【发布时间】:2020-09-28 14:27:05
【问题描述】:
我有同样的问题,想要和这里一样的结果: Outputting Logs inside JSON Object with Winston in Node.js
但我使用winston-daily-rotate-file,因此给定的答案/解决方案不适用于我的情况。
我的记录器看起来像这样:
const path = require('path');
const { createLogger, format, transports, addColors, config } = require('winston');
const winstonDailyRotateFile = require('winston-daily-rotate-file');
const { combine, timestamp, json, colorize, label, printf, errors } = format;
const CustomTransport = require('./customtransport')
const customLevels = {
levels: {
error: 0,
warn: 1,
fileProcessed: 2,
info: 3,
debug: 4,
silly: 5,
},
colors: {
error: 'bold red',
warn: 'bold yellow',
fileProcessed: 'bold blue',
info: 'bold cyan',
debug: 'bold gray',
silly: 'bold magenta'
}
};
addColors(customLevels.colors);
const consoleFormat = printf(({ level, message, label, stack }) => {
const log = `${level}: [${label}] ${message}`;
const errLog = `${log}\n${stack}`;
return stack ? errLog : log;
});
module.exports = (module) => {
const logger = createLogger({
levels: customLevels.levels,
transports: [
new CustomTransport({
}),
new winstonDailyRotateFile({
format: combine(
errors({stack: true}),
timestamp({ format: 'YYYY-MM-DD HH:mm:ss' }),
label({ label: path.basename(module.filename) }),
json(),
),
dirname: './logs',
filename: 'sppa-%DATE%.log',
datePattern: 'YYYY-MM-DD',
zippedArchive: true,
maxSize: '20m',
maxFiles: '14d'
})
]
});
// If we're not in production then log to the `console`
if (process.env.NODE_ENV !== 'production') {
logger.add(new transports.Console({
levels: customLevels.levels,
level: 'silly',
format: combine(
colorize(),
errors({stack: true}),
label({ label: path.basename(module.filename) }),
consoleFormat
),
}));
}
return logger;
}
任何帮助将不胜感激!
【问题讨论】:
标签: node.js json logging winston