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 Logger 的一次性配置
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;
6 回答
默认的 Logger 概念处理得很好 .
Winston定义了一个默认 Logger ,任何直接需要(以及后续要求)的winston都将检索 . 因此,您只需配置一次此默认 Logger ,并可通过vanilla require('winston')在其光荣的调整多传输模式下使用后续模块 .
例如这是我完整的日志记录设置,定义了3个传输 . 我有时会将Loggly换成MongoDB .
server.js
所有其他.js文件
log.js - 这是DEFAULT Logger 的一次性配置
或者对于更复杂的场景,您可以使用winston容器并从其他模块中的命名容器中检索 Logger . 我没用过这个 .
我唯一的问题是我的部署主机上缺少日志目录,很容易修复 .
希望这可以帮助 .
我所做的(可能不是最好的方式)是使用“全局”模块,我通过我的应用程序导出我使用的所有东西 . 例如:
现在只需要从其他模块中获取这个全局使用的模块
因为文件在第一次加载后被缓存(您可以通过在全局中包含日志语句来验证它;它只会记录一次),再次包含它的开销很小 . 将所有内容放在一个文件中也比在每个页面上要求所有全局使用的模块更容易 .
我想使用自定义颜色和级别 .
所以我删除了默认的console-transport并设置了一个彩色的
这是我的 logger.js
Loading from app.js:
Loading from other modules:
稍微偏离主题(正如OP询问温斯顿),但我喜欢Bunyan的'儿童 Logger '方法:
它解决了OP的问题,因为 Logger 可以通过req对象获得(因此在每个模块中不需要'require(log)') . 此外,属于特定请求的所有日志条目都将具有将它们连接在一起的唯一ID .
我不确定温斯顿是否也支持这一点 .
我正在创建一个新的Winston Logger .
log.js
a.js
b.js
我现在正在 Winston 3.0.0 工作 . 似乎配置默认 Logger 的方式已经发生了一些变化 . 对我有用的方法是:
log.js //全局 Logger 的设置
另一部分是一样的 . 在您的应用程序的开头,
require('log.js')
,还有require ('winston'),
而在所有其他文件中,只需require('winston')
.