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输出把。

image.png

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

  • 支持的appenders
image.png

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,032评论 19 139
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,785评论 18 399
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,802评论 25 709
  • 其一 柳畔暑天晚,水中颜色新。 流霞涂落日,一抹照来人。 其二 斜阳才抱影,已染半天霞。 看取晚来景,不由频叹嗟。...
    雪窗_武立之阅读 659评论 0 2
  • 最近,感谢遇到那么多的正能量。在我心中十几年的犹豫,彷徨,终于找到了合适的答案。 辞职,太过冲动,且,没有后路。 ...
    落落晓默阅读 149评论 0 0