nodejs扩展log4js正则匹配区分文件(方案一)

来源:互联网 发布:网络暴力调查问卷 编辑:程序博客网 时间:2024/06/06 09:13
 由于项目需要,本人研究了下log4js的底层实现原理,并进行总结,nodejs的log4js包采用的是 nomiddlename/log4js-node  版本号:0.6.21
 而log4js中加载json配置项中的appenders主要使用到了两个方法,分别是 loadAppender()和addAppender(),而且对于log4js中运用return的内容包含function的比较多,最终需要获取的是loggingEvent的内容,具体可以参看下log4js中的layout.js这个文件,里面阐述了布局相关的方法。

       为了实现正则的区分,我的实现思路是这样的,当调用log4js的getLogger()的方法时,会传入参数category,因此我就采取在getLogger()的方法上传递的参数中做文章, 因此我写一个外部js,重写getLogger()方法,方法如下:

help-logger.js  文件内容:

 var log4js = require('log4js');var fs = require("fs");var path = require("path");var configPath = 'log4js.json';//配置文件的路径var jsonObject = JSON.parse(fs.readFileSync(configPath, 'utf8'));//log4js.configure(jsonObject);/** * 正则匹配方法 * @param r * @param s * @returns {boolean} */exports.regxMatch = function (r, s) {    if (r == null || r == "") {        return false;    }    var patrn = new RegExp(r);    if (patrn.exec(s))        return true    return false};/** * 设置log4js自定义appender * @param appender */exports.setAppender = function(appender,category){    var type = appender.type;    if(typeof(type) != "undefined"){        log4js.loadAppender(type);        if(type === "file"){            //log4js.addAppender(log4js.appenders.file('logs/cheese.log', log4js.layouts.patternLayout("%r|%p|%c|%m"), 20480, 3), category);        } else if(type === "dateFile"){            var filename = typeof(appender.filename) != "undefined" ? appender.filename : null;            var pattern = typeof(appender.pattern) != "undefined" ? appender.pattern : null;            var alwaysIncludePattern = typeof(appender.alwaysIncludePattern) != "undefined" ? appender.alwaysIncludePattern : false;            var layout = typeof(appender.layout.pattern) != "undefined" ? appender.layout.pattern : null;            log4js.addAppender(log4js.appenders.dateFile(filename,pattern,alwaysIncludePattern,log4js.layouts.patternLayout(layout)),category);        }    }    else{        console.log("log4js配置项中缺少type类型");    }}/** * 创建logger * @param category */exports.getLogger = function (category) {    var regxAppenders = jsonObject.RegxAppenders;    var otherRegxAppenderobj = null;    var regxAppenderObj = null;    if(typeof(regxAppenders) != "undefined"){        var len = regxAppenders.length;        //获取未选定正则匹配时,日志输出位置        for(var j = 0;j < len;j++){            var otherAppender = regxAppenders[j];            var otherCategoryRegx = otherAppender.categoryRegx;            if(typeof(otherCategoryRegx) === "undefined"){                otherRegxAppenderobj = otherAppender;                break;            }        }        for(var i = 0;i < len;i++){            //获取单个appender            var regxAppender = regxAppenders[i];            //获取appender中的正则表达式            var categoryRegx = regxAppender.categoryRegx;            //设定未设置正则表达式时,日志的输出路径,以及设置后的输出路径            if(typeof(categoryRegx) != "undefined"){                if(this.regxMatch(categoryRegx,category)){                    regxAppenderObj = regxAppender;                }            }        }    }    if(regxAppenderObj != null){        this.setAppender(regxAppenderObj,category);    } else {        if(otherRegxAppenderobj != null)            this.setAppender(otherRegxAppenderobj,category);    }    var logger = log4js.getLogger(category);    return logger;}; 


0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 婴儿个头长得慢怎么办 11个月宝宝认生怎么办 3个月宝宝认人怎么办 3个月的宝宝认生怎么办 两个月的宝宝睡觉一惊一惊怎么办 六个月宝宝不喜欢喝水怎么办 三岁宝宝尿多怎么办 一岁的宝宝尿少怎么办 一岁宝宝尿黄怎么办 三岁宝宝尿黄怎么办 5个月宝宝认生怎么办 3岁宝宝怕生胆小怎么办 2岁宝宝怕生胆小怎么办 1岁半宝宝认生怎么办 宝宝认人一直哭怎么办 七个月宝宝认人怎么办 一个月宝宝认人怎么办 2个多月宝宝认人怎么办 婴儿认人一直哭怎么办 六个月宝宝认人怎么办 十一个月宝宝断奶后辅食怎么办 6个月宝宝不会坐怎么办 7个月宝宝坐不住怎么办 三个月宝宝白天闹觉怎么办 3个月宝宝不追声怎么办 一岁宝宝垃肚子怎么办 新生儿四天没大便怎么办老放屁 新生儿四五天不大便怎么办 新生儿五天没解大便怎么办 婴儿五天没拉大便怎么办 宝宝45天不拉屎怎么办 儿童4天不大便怎么办 4一5天不大便怎么办 俩月的宝宝便秘怎么办 宝宝6天没大便怎么办 新生儿3天不大便怎么办 50天宝宝几天没有大便怎么办 宝宝一吃奶就拉怎么办 2个月宝宝不拉屎怎么办 吃苹果呛到气管怎么办 三个月宝宝五天没拉大便了怎么办