winston如何修改时间戳、级别、消息等的输出顺序
winston howto modify the output order of timestamp, level, message etc
我使用 winston
进行日志记录,这是我的代码:
const { createLogger, format, transports } = require('winston')
const logger = createLogger({
level: 'info',
format: format.combine(
format.timestamp({format: 'YYYY-MM-DDTHH:mm:ss'}),
format.json()
),
transports: [new transports.File({filename: 'logs/new_combined.log'})]
})
logger.info('haha')
输出为:
{"message":"haha","level":"info","timestamp":"2019-01-03T11:13:32"}
我想调整输出顺序,先timestamp
,然后level
,再message
,如下:
{"timestamp":"2019-01-03T11:13:32","level":"info","message":"haha"}
怎么做?
谢谢!
这是使用 winston.format.printf
完成的一种方法
format: format.combine(
format.timestamp({format: 'YYYY-MM-DDTHH:mm:ss'}),
format.printf(info => `${JSON.stringify({timestamp: info.timestamp, level: info.level, message: info.message})}`)
)
我能够使用以下方法使它正常工作:
format: winston.format.combine(
winston.format.timestamp(),
winston.format((info) => {
const {
requestId, timestamp, level, message, ...rest
} = info;
return {
requestId, timestamp, level, message, ...rest,
};
})(),
winston.format.json({ deterministic: false }),
),
这样做的好处是仍然可以使用具有循环引用保护的更安全的 stringify Winston。在我的例子中,这是在 AWS Lambda 上,所以我把 requestId 放在第一位以便于参考。
我使用 winston
进行日志记录,这是我的代码:
const { createLogger, format, transports } = require('winston')
const logger = createLogger({
level: 'info',
format: format.combine(
format.timestamp({format: 'YYYY-MM-DDTHH:mm:ss'}),
format.json()
),
transports: [new transports.File({filename: 'logs/new_combined.log'})]
})
logger.info('haha')
输出为:
{"message":"haha","level":"info","timestamp":"2019-01-03T11:13:32"}
我想调整输出顺序,先timestamp
,然后level
,再message
,如下:
{"timestamp":"2019-01-03T11:13:32","level":"info","message":"haha"}
怎么做?
谢谢!
这是使用 winston.format.printf
format: format.combine(
format.timestamp({format: 'YYYY-MM-DDTHH:mm:ss'}),
format.printf(info => `${JSON.stringify({timestamp: info.timestamp, level: info.level, message: info.message})}`)
)
我能够使用以下方法使它正常工作:
format: winston.format.combine(
winston.format.timestamp(),
winston.format((info) => {
const {
requestId, timestamp, level, message, ...rest
} = info;
return {
requestId, timestamp, level, message, ...rest,
};
})(),
winston.format.json({ deterministic: false }),
),
这样做的好处是仍然可以使用具有循环引用保护的更安全的 stringify Winston。在我的例子中,这是在 AWS Lambda 上,所以我把 requestId 放在第一位以便于参考。