如何logging在winston的JavaScript对象和数组作为console.log呢?
我正在查看顶级的节点日志logging系统: npmlog
, log4js
, bunyan
和winston
并决定使用winston
的npm
月度下载量最多。
我想要设置的是自定义logging器,我将可以在开发环境上使用logger.debug(...)
,它不会在生产环境中logging任何东西。 当我在开发环境中时,这将有助于我,因为我将看到所有的输出,所以我不需要写任何东西。
这是我现在所拥有的:
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 });
当我尝试loggingJavaScript Object
或Javascript Array
时,会发生问题。 与Object
,我需要做的toJSON()
,并为Array
我需要第一个JSON.stringify()
,然后JSON.parse()
。
把所有这些方法都写下来是不好的,只是为了logging我想要的东西。 此外,它甚至不是资源友好的,因为这些格式化方法需要在logger.debug()
意识到它在生产之前执行,并且它不应该logging在第一位(基本上,它是在函数调用之前评估参数) 。 我只是喜欢console.log()
loggingJavaScript对象和数组。
现在,当我写这个问题时,我发现有一种描述每个winston transports
对象的自定义格式的方法。 这是做的方式,还是有其他的方式吗?
尝试改变prettyPrint参数
prettyPrint: function ( object ){ return JSON.stringify(object); }
使用内置的Node.js函数util.format
以与console.log
相同的方式将对象转换为string。
我的build议是在Winston的基础上编写自己的抽象,这个抽象有一个方便的方法来打印你的对象进行debugging。
你也可以看看这个回应,提示如何开发这个方法。
logger.log("info", "Starting up with config %j", config);