Tom*_*mmz 28 javascript arrays logging node.js winston
我一直在寻找顶级节点记录系统:npmlog,log4js,bunyan和winston并决定使用winston具有最npm每月下载.
我想要设置的是自定义记录器,我将能够在开发环境中使用logger.debug(...)它,不会在生产环境中记录任何内容.这对我有帮助,所以当我在开发环境中时,我不需要写任何东西,因为我会看到所有的输出.
这就是我现在拥有的:
var level = 'debug';
if (process.env.NODE_ENV !== 'development'){
level = 'production'; // this will never be logged!
}
var logger = new winston.Logger({
transports: [
// some other loggings
new winston.transports.Console({
name: 'debug-console',
level: level,
prettyPrint: true,
handleExceptions: true,
json: false,
colorize: true
})
],
exitOnError: false // don't crush no error
});
Run Code Online (Sandbox Code Playgroud)
当我尝试记录JavaScript Object或Javascript 时出现问题Array.有了Object,我需要做的toJSON(),以及Array我需要首先JSON.stringify(),然后JSON.parse().
写这些方法的所有时间都不好,只是为了记录我想要的东西.此外,它甚至不是资源友好的,因为这些格式化方法需要在logger.debug()实现它生产之前执行,并且它不应该首先记录它(基本上,它在函数调用之前评估参数).我只是喜欢古老的console.log()Java对象和数组.
现在,当我写这个问题时,我发现有一种方法可以描述每个winston 对象的自定义格式transports.这是做到这一点的方式,还是有其他方式?
Leo*_*Leo 26
logger.log("info", "Starting up with config %j", config);
Run Code Online (Sandbox Code Playgroud)
Winstons使用内置的utils.format库. https://nodejs.org/dist/latest/docs/api/util.html#util_util_format_format_args
Bha*_*tan 15
尝试将prettyPrint参数更改为
prettyPrint: function ( object ){
return JSON.stringify(object);
}
Run Code Online (Sandbox Code Playgroud)
在Winston> 3中,您可以使用
logger.log('%o', { lol: 123 }')
Run Code Online (Sandbox Code Playgroud)
无论如何...无法接受我必须一直使用%o并提出以下简单解决方案:
const prettyJson = format.printf(info => {
if (info.message.constructor === Object) {
info.message = JSON.stringify(info.message, null, 4)
}
return `${info.level}: ${info.message}`
})
const logger = createLogger({
level: 'info',
format: format.combine(
format.colorize(),
format.prettyPrint(),
format.splat(),
format.simple(),
prettyJson,
),
transports: [
new transports.Console({})
],
})
Run Code Online (Sandbox Code Playgroud)
所以这个记录器...
logger.info({ hi: 123 })
Run Code Online (Sandbox Code Playgroud)
...在控制台中转换为此
info: {
"hi": 123
}
Run Code Online (Sandbox Code Playgroud)