mirror of
https://github.com/nicotsx/ironmount.git
synced 2025-12-10 12:10:51 +01:00
39 lines
1.3 KiB
TypeScript
39 lines
1.3 KiB
TypeScript
import { createLogger, format, transports } from "winston";
|
|
import { sanitizeSensitiveData } from "./sanitize";
|
|
import { config } from "../core/config";
|
|
|
|
const { printf, combine, colorize } = format;
|
|
|
|
const printConsole = printf((info) => `${info.level} > ${info.message}`);
|
|
const consoleFormat = combine(colorize(), printConsole);
|
|
|
|
const defaultLevel = config.__prod__ ? "info" : "debug";
|
|
const winstonLogger = createLogger({
|
|
level: process.env.LOG_LEVEL || defaultLevel,
|
|
format: format.json(),
|
|
transports: [new transports.Console({ level: process.env.LOG_LEVEL || defaultLevel, format: consoleFormat })],
|
|
});
|
|
|
|
const log = (level: "info" | "warn" | "error" | "debug", messages: unknown[]) => {
|
|
const stringMessages = messages.flatMap((m) => {
|
|
if (m instanceof Error) {
|
|
return [sanitizeSensitiveData(m.message), m.stack ? sanitizeSensitiveData(m.stack) : undefined].filter(Boolean);
|
|
}
|
|
|
|
if (typeof m === "object") {
|
|
return sanitizeSensitiveData(JSON.stringify(m, null, 2));
|
|
}
|
|
|
|
return sanitizeSensitiveData(String(m));
|
|
});
|
|
|
|
winstonLogger.log(level, stringMessages.join(" "));
|
|
};
|
|
|
|
export const logger = {
|
|
debug: (...messages: unknown[]) => log("debug", messages),
|
|
info: (...messages: unknown[]) => log("info", messages),
|
|
warn: (...messages: unknown[]) => log("warn", messages),
|
|
error: (...messages: unknown[]) => log("error", messages),
|
|
};
|