【发布时间】:2019-08-27 07:20:19
【问题描述】:
我想将来自 nodejs 服务的消息记录到 Windows 事件日志中。
我找到了winston-winlog 和winston-winlog2 模块,但它们都使用旧的winston 版本。
如何为 Winston3 制作自定义传输以登录 Windows 事件日志?
【问题讨论】:
我想将来自 nodejs 服务的消息记录到 Windows 事件日志中。
我找到了winston-winlog 和winston-winlog2 模块,但它们都使用旧的winston 版本。
如何为 Winston3 制作自定义传输以登录 Windows 事件日志?
【问题讨论】:
感谢node-windows 模块:
const Transport = require('winston-transport');
const WinEventLogger = require('node-windows').EventLogger;
class WinstonWinlogTransport extends Transport {
constructor(opts) {
super(opts);
this.logger = new WinEventLogger(opts);
}
log(info, callback) {
setImmediate(() => {
this.emit('logged', info);
});
let {message, level} = info ;
if ( level==='error' ) this.logger.error(message) ;
else if ( level==='warn' ) this.logger.warn(message) ;
else this.logger.info(message) ;
callback();
}
};
然后您可以创建传输并将它们添加到您的 winston 记录器:
let myTransport = new WinstonWinlogTransport({ source: 'Label1' }) ; // Go to "Applications" logs
let myOtherTransport = new WinstonWinlogTransport({ source: 'Label2', eventLog: 'SYSTEM' }) ; // Go to "System" logs
请注意,您的 nodejs 服务必须以管理员权限安装。 (为了将nodejs代码安装为windows服务,我使用了WinSW)
【讨论】: