如何使用Winston3在Windows事件日志中记录事件?

时间:2019-08-27 07:20:19

标签: node.js event-log winston

我想将来自nodejs服务的消息记录到Windows事件日志中。

我找到了winston-winlogwinston-winlog2模块,但是它们都使用旧的Winston版本。

如何为Winston3进行自定义传输以登录Windows事件日志?

1 个答案:

答案 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