【发布时间】:2019-03-18 10:57:02
【问题描述】:
我是 NodeJs 的新手。 Afair NodeJs 不会直接将日志写入文件,因此我必须使用外部日志库。比如说温斯顿。
我想让所有模块都将日志写入 Winston 创建的文件,我也想让所有 console.log/console.info 也写入 Winston。
const logger = createLogger({
format: combine(
appendTimestamp({ tz: 'Europe/London' }),
myFormat
),
transports: [
new transports.Console(),
new winston.transports.File({
filename: 'error.log',
dirname: '/logs/',
level: 'error',
datePattern: 'yyyy-MM-dd.'
}),
new winston.transports.File({
filename: 'application.log',
dirname: '/logs/',
datePattern: 'yyyy-MM-dd.'
})
]
});
如果我使用logger.info - 它工作正常。但是我仍然可以看到一些模块正在使用 stout/stderr。
在 Java 中,这个问题解决如下 - 每个第三方库都使用日志适配器。 stdout、stderr 中没有写入任何内容。通过在类路径中包含日志库和日志配置,应用程序本身及其依赖项生成的所有应用程序日志都集中到一个位置。
我知道,我可以将日志重定向为以下节点 node index.js > mylog.js,但我希望我的日志可以轮换。
在应用程序中写入日志的最佳做法是使用自定义记录器还是使用 console.log/console.info?
其他 3-rd 方模块/库如何编写日志消息?他们是在使用console.log,还是最好有某种像Java 那样的日志适配器。
也许我可以使用这样的东西,但我不确定它是否正确
console.log = function() {
logger.info.apply(null, arguments);
}
console.error = function() {
logger.error.apply(null, arguments);
}
【问题讨论】: