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中加载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
- nodejs扩展log4js正则匹配区分文件(方案一)
- nodejs log4js
- nodejs 关于log4js输出到指定文件中
- NodeJS-log4js 配置
- NodeJS日志管理 Log4js
- Nodejs中使用Log4js
- 【NodeJS】log4js打印日志
- Nodejs中使用Log4js
- Nodejs中Log4js使用
- 正则匹配一揽子方案
- 正则表达式全字不区分大小写模糊匹配(EXT)
- nodejs express项目使用log4js
- 玩转Nodejs日志管理log4js
- 关于Nodejs中使用Log4js 解决方案
- 玩转Nodejs日志管理log4js
- 玩转Nodejs日志管理log4js
- 玩转Nodejs日志管理log4js
- nodejs开发——log4js学习
- py2exe使用教程(六)——关于压缩文件
- Date()日期创建
- 织梦DedeCMS增加自定义文档属性四部曲
- jQuery中join方法
- android 根据原理分析ListView滑动checkbox状态被清除 不保存
- nodejs扩展log4js正则匹配区分文件(方案一)
- 指针和引用
- iOS UIPageControl
- cocostudio 2.0版本爬坑手记
- 第10周项目1(3)getchar()接受字符数据规律
- 数据结构实验之二叉树的建立于遍历
- 显示半个模态视图的方法
- Linux下安装docker
- 2014年10月份浏览器份IE11晋升第一Web浏览器