我winston-js
在我的项目中用作记录器 - 它工作正常,但是我现在尝试为每个日志行添加一个唯一的日志 ID 以进行调试。
我有 2 次传输 - 1)控制台,2)文件。
我希望两个传输的同一日志行的日志 ID 相同。目前,随着请求通过我的系统,日志 ID 保持不变。
在下面的示例代码中,我使用的是winston's defaultMeta
- 这似乎不起作用,但是我也尝试过添加函数 - 并得到相同的结果。
我是否将同一日志行的日志 ID 设置为两个传输的相同?
注意:我在项目中使用 UUID 作为 LogId - 为简单起见,我在示例中使用了单个数字。
例如,我当前的设置是:
文件
logID: 1 | Request: Post | Request: 1
logID: 1 | Request: Post | Request: 1
logID: 2 | Request: Post | Request: 2
安慰
logID: 1 | Request: Post | Request: 1
logID: 1 | Request: Post | Request: 1
logID: 2 | Request: Post | Request: 2
我想要:
文件
logID: 1 | Request: Post | Request: 1
logID: 2 | Request: Post | Request: 1
logID: 3 | Request: Post | Request: 2
安慰
logID: 1 | Request: Post | Request: 1
logID: 2 | Request: Post | Request: 1
logID: 3 | Request: Post | Request: 2
.
function devLogger () {
const logFormat = printf(({ level, message, timestamp, stack, ...meta }) => {
var logId = meta.logId
return `${timestamp} [${level}] ${message} | ${logId} | Console`;
})
const jsonFormat = printf(({ level, message, timestamp, stack, ...meta }) => {
var logId = meta.logId
return `${timestamp} [${level}] ${message} | ${logId} | File`;
})
return createLogger({
defaultMeta: { logId: uuidv4() }, // Add logId to both transports
transports: [
new transports.Console({
level: 'debug',
format: combine(
format.colorize(),
timestamp({ format: 'DD-MM-YY HH:mm:ss' }),
logFormat
),
}),
new transports.File({
level: 'debug',
filename: 'error.log',
format: combine(timestamp({ format: 'DD-MM-YY HH:mm:ss' }), errors({ stack: true }), jsonFormat),
}),
]
});
}