76 lines
2.7 KiB
TypeScript
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 });
|
|
}
|
|
}
|