首先在nodejs winston logger中写入时间戳
write the timestamp first in nodejs winston logger
我试图让时间戳首先出现,但它总是被添加到 json 的末尾。
我用过这个配置:
var myFormat = winston.format.combine(winston.format.timestamp({format:'YYYY-MM-DD HH:mm:ss.SSS'}),
winston.format.json());
this.winstonLogger = winston.createLogger();
this.winstonLogger.configure({
level: 'info',
format: myFormat,
transports: [
new winston.transports.Console(),
]
});
并得到如下日志:
{"level":"info","message":"app is loaded","timestamp":"2019-06-03 17:01:10.054"}
我只想要它看起来像:
{"timestamp":"2019-06-03 17:01:10.054","level":"info","message":"app is loaded"}
您可以开发自己的格式化程序
const winston = require('winston');
class TimestampFirst {
constructor(enabled = true) {
this.enabled = enabled;
}
transform(obj) {
if (this.enabled) {
return Object.assign({
timestamp: obj.timestamp
}, obj);
}
return obj;
}
}
var myFormat = winston.format.combine(
winston.format.timestamp({
format: 'YYYY-MM-DD HH:mm:ss.SSS'
}),
new TimestampFirst(true),
winston.format.json()
);
winstonLogger = winston.createLogger();
winstonLogger.configure({
level: 'info',
format: myFormat,
transports: [
new winston.transports.Console(),
]
});
winstonLogger.info('hello', {
message: 'test'
});
您可以使用 JSON.stringify()
和 printf()
。只需将您的 myFormat
变量更改为:
var myFormat = winston.format.combine(
winston.format.timestamp({format: 'YYYY-MM-DD HH:mm:ss.SSS'}),
winston.format.printf((info) => {
return JSON.stringify({timestamp: info.timestamp,
level: info.level,
message: info.message});
}));
我试图让时间戳首先出现,但它总是被添加到 json 的末尾。
我用过这个配置:
var myFormat = winston.format.combine(winston.format.timestamp({format:'YYYY-MM-DD HH:mm:ss.SSS'}),
winston.format.json());
this.winstonLogger = winston.createLogger();
this.winstonLogger.configure({
level: 'info',
format: myFormat,
transports: [
new winston.transports.Console(),
]
});
并得到如下日志:
{"level":"info","message":"app is loaded","timestamp":"2019-06-03 17:01:10.054"}
我只想要它看起来像:
{"timestamp":"2019-06-03 17:01:10.054","level":"info","message":"app is loaded"}
您可以开发自己的格式化程序
const winston = require('winston');
class TimestampFirst {
constructor(enabled = true) {
this.enabled = enabled;
}
transform(obj) {
if (this.enabled) {
return Object.assign({
timestamp: obj.timestamp
}, obj);
}
return obj;
}
}
var myFormat = winston.format.combine(
winston.format.timestamp({
format: 'YYYY-MM-DD HH:mm:ss.SSS'
}),
new TimestampFirst(true),
winston.format.json()
);
winstonLogger = winston.createLogger();
winstonLogger.configure({
level: 'info',
format: myFormat,
transports: [
new winston.transports.Console(),
]
});
winstonLogger.info('hello', {
message: 'test'
});
您可以使用 JSON.stringify()
和 printf()
。只需将您的 myFormat
变量更改为:
var myFormat = winston.format.combine(
winston.format.timestamp({format: 'YYYY-MM-DD HH:mm:ss.SSS'}),
winston.format.printf((info) => {
return JSON.stringify({timestamp: info.timestamp,
level: info.level,
message: info.message});
}));