67 lines
1.8 KiB
TypeScript
67 lines
1.8 KiB
TypeScript
|
import { createLogger } from "@lib/log.ts";
|
||
|
import { join } from "node:path";
|
||
|
import { DATA_DIR } from "@lib/env.ts";
|
||
|
import { ensureDir } from "fs";
|
||
|
|
||
|
function getLogFileName() {
|
||
|
const d = new Date();
|
||
|
const year = d.getFullYear();
|
||
|
const month = (d.getMonth() + 1).toString().padStart(2, "0"); // Ensure two digits
|
||
|
const day = d.getDate().toString().padStart(2, "0"); // Ensure two digits
|
||
|
return `${year}-${month}-${day}.log`;
|
||
|
}
|
||
|
|
||
|
const LOG_DIR = join(DATA_DIR, "logs");
|
||
|
|
||
|
// Ensure the log directory exists
|
||
|
await ensureDir(LOG_DIR);
|
||
|
|
||
|
const log = createLogger("");
|
||
|
log.addEventListener("log", async (data) => {
|
||
|
const logEntry = JSON.stringify(data.detail);
|
||
|
const logFilePath = join(LOG_DIR, getLogFileName());
|
||
|
|
||
|
// Append the log entry to the file (creating it if it doesn't exist)
|
||
|
await Deno.writeTextFile(
|
||
|
logFilePath,
|
||
|
new Date().toISOString() + " | " + logEntry + "\n",
|
||
|
{ append: true },
|
||
|
);
|
||
|
});
|
||
|
|
||
|
export type Log = {
|
||
|
scope: string;
|
||
|
level: number;
|
||
|
date: Date;
|
||
|
args: unknown[];
|
||
|
};
|
||
|
|
||
|
export async function getLogs() {
|
||
|
const logFilePath = join(LOG_DIR, getLogFileName());
|
||
|
|
||
|
try {
|
||
|
// Read the log file content
|
||
|
const logFileContent = await Deno.readTextFile(logFilePath);
|
||
|
|
||
|
// Split by lines and parse logs
|
||
|
const logs: Log[] = logFileContent
|
||
|
.split("\n")
|
||
|
.filter((line) => line.trim() !== "")
|
||
|
.map((line) => {
|
||
|
const [date, ...rest] = line.split(" | ");
|
||
|
const parsed = JSON.parse(rest.join(" | ")) as Log;
|
||
|
return {
|
||
|
...parsed,
|
||
|
date: new Date(date),
|
||
|
} as Log;
|
||
|
});
|
||
|
console.log(logs);
|
||
|
|
||
|
// Return the logs sorted by date
|
||
|
return logs.sort((a, b) => a.date.getTime() - b.date.getTime());
|
||
|
} catch (error) {
|
||
|
// If file does not exist, return an empty array
|
||
|
return [];
|
||
|
}
|
||
|
}
|