Files
anthill-pot/src/framework/logger/logger.ts
2022-01-21 20:56:43 +01:00

40 lines
1.2 KiB
TypeScript

import winston, { format, transports, transport as Transport, Logger } from "winston";
import { Format } from "logform";
const { combine, timestamp, label, printf, errors, splat } = format;
// Custom logging format
const customFormat = printf(({ level, message, label, timestamp, stack }) => {
return `${timestamp} [${label || "-"}] ${level}: ${message} ${stack || ""}`;
});
// Custom combined logging format:
const customCombinedFormat = (module: string): Format =>
combine(
errors({ stack: true }),
format.colorize({ level: true }),
label({ label: module }),
timestamp(),
splat(),
customFormat
);
// Custom transports:
const customTransports = (): Transport[] => [new transports.Console()];
// Container to provide different pre-configured loggers
const logContainer = new winston.Container();
// Default logger for modules:
const getLogger = (module: string): Logger => {
if (!logContainer.has(module)) {
logContainer.add(module, {
format: customCombinedFormat(module),
transports: customTransports()
});
}
return logContainer.get(module);
};
export default getLogger;
export const defaultLogger = getLogger("default");