在包一级定制log4j日志输出
软件开发和维护过程中,日志是必不可少的工具,对于一个10万行规模的产品,要分析它的某一部分,最简单的方法是将log4j配置文件的rootLogger的输出级别设置为debug,但这样将使产品的所有部分的debug信息都输出,一方面会对产品性能产生巨大影响,另一方面所关心部分的debug信息会淹没在其他debug日志里,比较好的解决方法是 将这一部分的debug日志单独输出到一个新的日志文件里进行分析 ,下面 以指令平台为例说明实现方法。原始的log4j.properties文件如下:
log4j.rootLogger=INFO,stdout,R,errorlogger
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=[%p] [%d] [%c - %L] - [%m]%n
log4j.appender.stdout.Threshold=INFO
log4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=[%p] [%d] [%c - %L] - [%m]%n
log4j.appender.R.Threshold=INFO
log4j.appender.R.File=../log/godu.log
log4j.appender.R.MaxFileSize=20MB
log4j.appender.R.MaxBackupIndex=5
log4j.appender.errorlogger=org.apache.log4j.RollingFileAppender
log4j.appender.errorlogger.layout=org.apache.log4j.PatternLayout
log4j.appender.errorlogger.layout.ConversionPattern=[%p] [%d] [%c] - [%m]%n
log4j.appender.errorlogger.Threshold=ERROR
log4j.appender.errorlogger.File=../log/error.log
log4j.appender.errorlogger.MaxFileSize=20MB
log4j.appender.errorlogger.MaxBackupIndex=5
可以看到这里定义了3个rootLogger(默认输出级别是INFO):stdout向屏幕输出,R记录普通信息(指向godu.log,输出级别为INFO),errorlogger指向error.log,用来记录错误日志(ERROR及以上级别的日志)。现在我们要分析鉴权部分的工作过程,鉴权类都在com.boco.godu.framework.auth包里,要将这个包下所有类的debug信息输出到auth.log里。实现方法是在配置文件中增加一个专门处理auth包的logger:
log4j.logger.com.boco.godu.framework.auth=DEBUG,authDebuger
log4j.additivity.com.boco.godu.framework.auth=false
log4j.appender.authDebuger=org.apache.log4j.RollingFileAppender
log4j.appender.authDebuger.File=../log/auth.log
log4j.appender.authDebuger.Append=false
log4j.appender.authDebuger.MaxFileSize=2MB
log4j.appender.authDebuger.MaxBackupIndex=10
log4j.appender.authDebuger.layout=org.apache.log4j.PatternLayout
log4j.appender.authDebuger.layout.ConversionPattern=%d{MM-dd HH:mm:ss,SSS} %t %c,%L %p - %m%n
所以, 包一级定制logger的方法是 :
log4j.logger.=OUTPUT_LEVEL, logger_name
此logger的appender, layout的定义方法与rootLogger一样。上面第二行的作用是 避免详细日志写入rootLogger日志 ,否则新产生的大量debug日志会将之前已有的godu.log(以及godu.log.1等)冲掉,在现场环境下尤其要注意。它的一般形式是:
log4j.additivity.=false
这样就保证了auth包的debug日志不写入godu.log,additivity的默认值是true,所以如果不定义additivity,默认debug日志分别写入godu.log和auth.log中。实验发现指定rootLogger的输出级别(log4j.appender.R.Threshold=INFO)也可以避免debug日志写入godu.log里,但定义additivity更明确,是更好的方法。
除了用来输出详细日志, 包一级定制还有一个用处:屏蔽输出 。如果不需要某些包的日志,只要将它的输出级别调高就可以了。例如我们不想看到mina包的info日志,只有mina报错才写日志,可以做如下处理:
log4j.logger.org.apache.mina=WARN
在包一级定制log4j日志输出的更多相关文章
- log4j日志输出级别变更
1. 现阶段log4j日志输出配置 示例:基础服务日志配置 #DEBUG < INFO < WARN < ERROR < FATAL\u65E5\u5FD7\u7684\u ...
- web项目Log4j日志输出路径配置问题
问题描述:一个web项目想在一个tomcat下运行多个实例(通过修改war包名称的实现),然后每个实例都将日志输出到tomcat的logs目录下实例名命名的文件夹下进行区分查看每个实例日志,要求通过尽 ...
- log4j日志输出使用教程
Log4j是帮助开发人员进行日志输出管理的API类库.它最重要的特点就可以配置文件灵活的设置日志信息的优先级.日志信息的输出目的地以及日志信息的输出格式.Log4j除了可以记录程序运行日志信息外还有一 ...
- Mybatis 的Log4j日志输出问题 - 以及有关日志的所有问题
使用Mybatis的时候,有些时候能输出(主要是指sql,参数,结果)日志.有些时候就不能. 无法输出日志的时候,无论怎么配置log4j,不管是properties的还是xml的,都不起作用. 有些时 ...
- log4j日志输出框架
什么是log4j框架呢? log4j是一个日志输出框架,用于输出日志的.比如MyBatis的日志就是通过log4j输出的,主流框架都是log4j输出的,Spring框架 也可以通过log4j输出日志! ...
- log4j日志输出到日志文件中和控制台中 +log4j配置详解
1.引入log4j的jar包 https://mvnrepository.com/,可以找到log4j的jar和依赖. 2.创建log4j.properties,并配置log4j #设置日志的级别 , ...
- log4j日志输出使用_1
转自https://www.cnblogs.com/sky230/p/5759831.html Log4j是帮助开发人员进行日志输出管理的API类库.它最重要的特点就可以配置文件灵活的设置日志信息的优 ...
- log4j日志输出到文件的配置
1.Maven的dependency 2.log4j.properties的配置 3.Junit的Test类 4.web.xml的配置(非必要) 5.spring的db.config的配置(非必要) ...
- Log4j 日志输出学习(Eclipse)
学习网址1:http://www.cnblogs.com/licheng/archive/2008/08/23/1274566.html 一.快速入手 1.官网下载log4j压缩包,本地加压 2.Ec ...
随机推荐
- WEB应用访问缓慢的问题定位
WEB应用访问缓慢的问题定位 欢迎关注博主公众号「java大师」, 专注于分享Java领域干货文章, 关注回复「资源」, 免费领取全网最热的Java架构师学习PDF, 转载请注明出处 http://w ...
- 第九章 身体质量指数BMI的python实现
身体质量指数BMI:对身体质量的刻画(Body Mass Index) 国际上常用的衡量人体肥胖和健康程度的重要标准,主要用于统计分析 定义: BMI=体重(kg)/身高^2(m2) 提出问题: 实例 ...
- Pandas高级教程之:window操作
目录 简介 滚动窗口 Center window Weighted window 加权窗口 扩展窗口 指数加权窗口 简介 在数据统计中,经常需要进行一些范围操作,这些范围我们可以称之为一个window ...
- C语言:预定义的宏
预定义宏就是已经预先定义好的宏,我们可以直接使用,无需再重新定义.ANSI C 规定了以下几个预定义宏,它们在各个编译器下都可以使用: __LINE__:表示当前源代码的行号: __FILE__:表示 ...
- C语言:fopen函数
在C语言中,操作文件之前必须先打开文件:所谓"打开文件",就是让程序和文件建立连接的过程.打开文件之后,程序可以得到文件的相关信息,例如大小.类型.权限.创建者.更新时间等.在后续 ...
- 【LeetCode】974. 和可被 K 整除的子数组
974. 和可被 K 整除的子数组 知识点:数组:前缀和: 题目描述 给定一个整数数组 A,返回其中元素之和可被 K 整除的(连续.非空)子数组的数目. 示例 输入:A = [4,5,0,-2,-3, ...
- deepin安装Motrix,cocomusic
1,motrix(下载工具):https://motrix.app/ 2,cocomusic(开源音乐播放器):https://github.com/xtuJSer/CoCoMusic/release ...
- 微信小程序云开发-数据库-用户删除数据
一.在商品详情页添加[删除单条数据]按钮 进入goodDetail.wxml页面,添加[删除单条数据]按钮,绑定点击事件removeGood() 二.进入goodDetail.js文件,定义remo ...
- P2015
二叉苹果树 1 #include<iostream> 2 #include<cstdio> 3 #include<algorithm> 4 #include< ...
- windows7查看和关闭占用的端口
1. 查看占用的端口 cmd 后输入命令:netstat -aon|findstr [要查的端口] 如欲查端口1099,输入:netstat -aon|findstr 1099 2. 关闭占用的端口 ...