43 lines
1.2 KiB
TypeScript
43 lines
1.2 KiB
TypeScript
import { mkdirSync, appendFileSync, existsSync } from "fs";
|
|
import { join } from "path";
|
|
|
|
let logFilePath: string | null = null;
|
|
|
|
/**
|
|
* Initialize the logger. Creates the logs/ directory if needed
|
|
* and opens the log file in append mode.
|
|
*/
|
|
export function initLogger(filename = "api.log"): void {
|
|
const logsDir = join(process.cwd(), "logs");
|
|
if (!existsSync(logsDir)) {
|
|
mkdirSync(logsDir, { recursive: true });
|
|
}
|
|
logFilePath = join(logsDir, filename);
|
|
Log("LOGGER", "Logger initialized. Writing to:", logFilePath);
|
|
}
|
|
|
|
/**
|
|
* Log a timestamped, source-tagged message to stdout and the log file.
|
|
* Format: [YYYY-MM-DD] - [HH:MM:SS] - [source] - message
|
|
*/
|
|
export function Log(source: string, ...args: unknown[]): void {
|
|
const now = new Date();
|
|
const date = now.toISOString().slice(0, 10);
|
|
const time = now.toTimeString().slice(0, 8);
|
|
const msg = args
|
|
.map((a) => (typeof a === "object" ? JSON.stringify(a) : String(a)))
|
|
.join(" ");
|
|
|
|
const line = `[${date}] - [${time}] - [${source}] - ${msg}`;
|
|
|
|
console.log(line);
|
|
|
|
if (logFilePath) {
|
|
try {
|
|
appendFileSync(logFilePath, line + "\n");
|
|
} catch {
|
|
// If file write fails, stdout logging still works
|
|
}
|
|
}
|
|
}
|