40 lines
1.2 KiB
TypeScript
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"); |