我想将来自nodejs服务的消息记录到Windows事件日志中。
我找到了winston-winlog和winston-winlog2模块,但是它们都使用旧的Winston版本。
如何为Winston3进行自定义传输以登录Windows事件日志?
答案 0 :(得分:0)
这是我对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 logger中:
let myTransport = new WinstonWinlogTransport({ source: 'Label1' }) ; // Go to "Applications" logs
let myOtherTransport = new WinstonWinlogTransport({ source: 'Label2', eventLog: 'SYSTEM' }) ; // Go to "System" logs
请注意,您的nodejs服务必须与管理员privilleges一起安装。 (为了将nodejs代码安装为Windows服务,我使用了WinSW)