Log4js 添加自定义的Appender类型

Appenders

Appenders这是给的介绍。里面介绍了,appenders不仅仅可以通过我们通常使用的直接配置的方式实现,还可以自定义一些自己的类型,并做相应的处理。

log4js.configure({
    appenders:{
        everything:{
            type : 'file',
            filename : filepath ,
            maxLogSize : 204800,//bytes
            backups : 3 //integer (optional, default value = 5) - the number of old log files to keep during log rolling.
        },
        output: {
            type:"output"
        }
    },
    categories: {
        default: { appenders: [ 'everything', "output"], level: this.logLevel }
    }
});

如上所示里面配置了两个appenders分别是everything和output,everything只标准的file类型保存,而output,在标准库里面并没有这个方法,这个就是我们新建的类型。
另外发现,在default的appenders里面引用了两个类型,一个是标准类型,另外一个是我们自定义的output类型

type说明

如上code,自定义了一个output的类型,此output指向的就是output所在的node_module或者NODE_PATH路径

output文件格式

/**
 * Custom appenders for log4js
 */
function outputAppender(layout, config) {
    var app = function (loggingEvent) {
        console.log("log msg:", loggingEvent);
        process.stdout.write(layout(loggingEvent, config) + "\n");
    };
    app.shutdown = function (complete) {
        console.log(complete);
    };
    return app;
}
/**
 * Custom appenders for log4js
 */
function configure(config, layouts) {
    var layout = layouts.colouredLayout;
    if (config.layout) {
        layout = layouts.layout(config.layout.type, config.layout);
    }
    return outputAppender(layout, config);
}
exports.configure = configure;
function shutdown(complete) {
}
exports.shutdown = shutdown;
//# sourceMappingURL=output.js.map

该文件中主要导出了两个方法configure,shutdown,这两个方法是必须的,如果不到导出,会直接报错找不到out类型。
另外一点比较坑的,如果把shutdown直接写成如下居然也会报错,很奇怪:

export function shutdown(complete){
}

configure

如上代码,output文件导出了一个configure方法,在该方法里面主要做了相关的配置和layouts的设置,然后调用outputAppender方法,返回了一个app对象,该对象是我们最需要关心的问题,
app方法里面最重要的就是loggingEvent实现,我们自己在实现的时候最主要也是实现此处的代码,用于编辑自己log处理方法,loggingEvent类型的格式如下:

      LoggingEvent {
        startTime: 2017-08-18T06:20:30.981Z,
        categoryName: 'output',
        data: [ 'error test' ],
        level: Level { level: 40000, levelStr: 'ERROR', colour: 'red' },
        context: {},
        pid: 6784 }

这个里面把我们需要的time,data,level等都做了填充,尽情的实习那自己的log输出把。

  • log4js github地址:https://github.com/nomiddlename/log4js-node
  • lib结构
Log4js 添加自定义的Appender类型_第1张图片
image.png

如上图,里面定义了系统支持的appenders

  • 支持的appenders
Log4js 添加自定义的Appender类型_第2张图片
image.png

有兴趣的可以参考内部的appenders实现自己的appenders

你可能感兴趣的:(Log4js 添加自定义的Appender类型)