一尘不染

如何在多个模块中使用Winston?

node.js

我有几个模块-假设是server.js,module1.js,…,moduleN.js。

我想在server.js中定义日志文件:

winston.add(winston.transports.File, { filename: 'mylogfile.log' });

然后在我所有的模块中使用它

最好的方法是什么?我可以exports.winston=winston;在每个模块中,然后在server.js中进行设置,但是还有更好的解决方案吗?

先感谢您!


阅读 268

收藏
2020-07-07

共1个答案

一尘不染

默认的记录器概念很好地解决了这一问题。

Winston定义了一个默认记录器,任何对Winston的直接要求(及其后要求)都将检索该记录器。因此,您只需配置一次此默认记录器,即可通过其出色的调整后的多传输模式中的vanilla
require(’winston’)进行后续模块使用。

例如,这是我定义3种传输方式的完整日志记录设置。我有时将Loggly换成MongoDB。

server.js

var logger=require('./log.js'); 
// requires winston and configures transports for winstons default logger- see code below.

所有其他.js文件

var logger=require('winston'); // this retrieves default logger which was configured in log.js
logger.info("the default logger with my tricked out transports is rockin this module");

log.js-这是DEFAULT记录器的一次性配置

var logger = require('winston');
var Loggly = require('winston-loggly').Loggly;
var loggly_options={ subdomain: "mysubdomain", inputToken: "efake000-000d-000e-a000-xfakee000a00" }
logger.add(Loggly, loggly_options);
logger.add(winston.transports.File, { filename: "../logs/production.log" });
logger.info('Chill Winston, the logs are being captured 3 ways- console, file, and Loggly');
module.exports=logger;

另外,对于更复杂的情况,您可以使用Winston容器并从其他模块中的命名容器中检索记录器。我没有用过

我唯一的问题是部署主机上缺少日志目录,该目录很容易修复。

希望这可以帮助。

2020-07-07