refactor(backend): split log files into separate file
This commit is contained in:
52
lib/log/index.ts
Normal file
52
lib/log/index.ts
Normal file
@@ -0,0 +1,52 @@
|
||||
import { StreamResponse } from "@lib/helpers.ts";
|
||||
import { writeLogEntry } from "@lib/log/fs.ts";
|
||||
import { LOG_LEVEL, Logger } from "@lib/log/types.ts";
|
||||
import { logLevel } from "@lib/log/constants.ts";
|
||||
|
||||
let longestScope = 0;
|
||||
|
||||
type LoggerOptions = {
|
||||
enabled?: boolean;
|
||||
};
|
||||
|
||||
const createLogFunction = (scope: string, level: LOG_LEVEL) => {
|
||||
return (...data: unknown[]) => {
|
||||
writeLogEntry({ level, scope, args: data, date: new Date() });
|
||||
if (level < logLevel) return;
|
||||
const logFunc = {
|
||||
[LOG_LEVEL.DEBUG]: console.debug,
|
||||
[LOG_LEVEL.INFO]: console.info,
|
||||
[LOG_LEVEL.WARN]: console.warn,
|
||||
[LOG_LEVEL.ERROR]: console.error,
|
||||
}[level];
|
||||
|
||||
logFunc(`[${scope.padEnd(longestScope, " ")}]`, ...data);
|
||||
};
|
||||
};
|
||||
|
||||
export function createLogger(scope: string, _options?: LoggerOptions): Logger {
|
||||
longestScope = Math.max(scope.length, longestScope);
|
||||
|
||||
return {
|
||||
debug: createLogFunction(scope, LOG_LEVEL.DEBUG),
|
||||
info: createLogFunction(scope, LOG_LEVEL.INFO),
|
||||
error: createLogFunction(scope, LOG_LEVEL.ERROR),
|
||||
warn: createLogFunction(scope, LOG_LEVEL.WARN),
|
||||
};
|
||||
}
|
||||
|
||||
export function loggerFromStream(stream: StreamResponse) {
|
||||
return {
|
||||
debug: (...data: unknown[]) =>
|
||||
stream.enqueue(`${data.length > 1 ? data.join(" ") : data[0]}`),
|
||||
info: (...data: unknown[]) =>
|
||||
stream.enqueue(`${data.length > 1 ? data.join(" ") : data[0]}`),
|
||||
error: (...data: unknown[]) =>
|
||||
stream.enqueue(`[ERROR]: ${data.length > 1 ? data.join(" ") : data[0]}`),
|
||||
warn: (...data: unknown[]) =>
|
||||
stream.enqueue(`[WARN]: ${data.length > 1 ? data.join(" ") : data[0]}`),
|
||||
};
|
||||
}
|
||||
|
||||
export type { Log } from "@lib/log/types.ts";
|
||||
export { getLogs } from "@lib/log/fs.ts";
|
||||
Reference in New Issue
Block a user