如何logging在winston的JavaScript对象和数组作为console.log呢?

我正在查看顶级的节点日志logging系统: npmloglog4jsbunyanwinston并决定使用winstonnpm月度下载量最多。

我想要设置的是自定义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。

你也可以看看这个回应,提示如何开发这个方法。

https://stackoverflow.com/a/12620543/2211743

 logger.log("info", "Starting up with config %j", config);