server-logger/src/logger.ts
2025-04-22 16:59:55 +01:00

76 lines
2.7 KiB
TypeScript

import path from "path";
import { createLogger, format, Logger, transports } from "winston";
import DailyRotateFile from "winston-daily-rotate-file";
import DiscordTransport from "winston-discord-transport";
export default class AppLogger {
private static Loggers: Logger[] = [];
public static InitialiseLogger(service: string): Logger {
const customFormat = format.printf(({ level, message, timestamp, label }) => {
return `${timestamp} [${label}] ${level}: ${message}`;
});
const logger = createLogger({
level: "verbose",
format: format.combine(
format.timestamp({
format: "YYYY-MM-DD HH:mm:ss"
}),
format.errors({ stack: true }),
format.splat(),
customFormat,
),
defaultMeta: { service },
transports: [],
});
const logDir = path.join(process.env.LOG_DIR!);
logger.add(new DailyRotateFile({
filename: "%DATE%.log",
dirname: logDir,
datePattern: "YYYY-MM-DD-HH",
maxSize: "20m",
maxFiles: "14d",
level: "info",
}));
logger.add(new transports.Console({
format: format.combine(
format.colorize(),
format.timestamp(),
customFormat,
)}));
logger.add(new DiscordTransport({
webhook: process.env.LOG_DISCORD_WEBHOOK!,
defaultMeta: { service: service },
level: "info",
}));
AppLogger.Loggers.push(logger);
return logger;
}
public static LogError(service: string, label: string, message: string) {
const logger = AppLogger.Loggers.find(x => x.defaultMeta!.service == service) ?? AppLogger.InitialiseLogger(service);
logger.error({ service, label, message });
}
public static LogWarn(service: string, label: string, message: string) {
const logger = AppLogger.Loggers.find(x => x.defaultMeta!.service == service) ?? AppLogger.InitialiseLogger(service);
logger.warn({ service, label, message });
}
public static LogInfo(service: string, label: string, message: string) {
const logger = AppLogger.Loggers.find(x => x.defaultMeta!.service == service) ?? AppLogger.InitialiseLogger(service);
logger.info({ service, label, message });
}
public static LogVerbose(service: string, label: string, message: string) {
const logger = AppLogger.Loggers.find(x => x.defaultMeta!.service == service) ?? AppLogger.InitialiseLogger(service);
logger.verbose({ service, label, message });
}
}