软件开发和维护过程中,日志是必不可少的工具,对于一个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日志输出的更多相关文章

  1. log4j日志输出级别变更

    1.   现阶段log4j日志输出配置 示例:基础服务日志配置 #DEBUG < INFO < WARN < ERROR < FATAL\u65E5\u5FD7\u7684\u ...

  2. web项目Log4j日志输出路径配置问题

    问题描述:一个web项目想在一个tomcat下运行多个实例(通过修改war包名称的实现),然后每个实例都将日志输出到tomcat的logs目录下实例名命名的文件夹下进行区分查看每个实例日志,要求通过尽 ...

  3. log4j日志输出使用教程

    Log4j是帮助开发人员进行日志输出管理的API类库.它最重要的特点就可以配置文件灵活的设置日志信息的优先级.日志信息的输出目的地以及日志信息的输出格式.Log4j除了可以记录程序运行日志信息外还有一 ...

  4. Mybatis 的Log4j日志输出问题 - 以及有关日志的所有问题

    使用Mybatis的时候,有些时候能输出(主要是指sql,参数,结果)日志.有些时候就不能. 无法输出日志的时候,无论怎么配置log4j,不管是properties的还是xml的,都不起作用. 有些时 ...

  5. log4j日志输出框架

    什么是log4j框架呢? log4j是一个日志输出框架,用于输出日志的.比如MyBatis的日志就是通过log4j输出的,主流框架都是log4j输出的,Spring框架 也可以通过log4j输出日志! ...

  6. log4j日志输出到日志文件中和控制台中 +log4j配置详解

    1.引入log4j的jar包 https://mvnrepository.com/,可以找到log4j的jar和依赖. 2.创建log4j.properties,并配置log4j #设置日志的级别 , ...

  7. log4j日志输出使用_1

    转自https://www.cnblogs.com/sky230/p/5759831.html Log4j是帮助开发人员进行日志输出管理的API类库.它最重要的特点就可以配置文件灵活的设置日志信息的优 ...

  8. log4j日志输出到文件的配置

    1.Maven的dependency 2.log4j.properties的配置 3.Junit的Test类 4.web.xml的配置(非必要) 5.spring的db.config的配置(非必要) ...

  9. Log4j 日志输出学习(Eclipse)

    学习网址1:http://www.cnblogs.com/licheng/archive/2008/08/23/1274566.html 一.快速入手 1.官网下载log4j压缩包,本地加压 2.Ec ...

随机推荐

  1. Nginx-多服务绑定80端口及映射域名

    多服务绑定80端口及映射域名 说明:业务需要配置的样例模板,如需深入了解,请查看官方文档 1.Nginx配置文件nginx.conf(可拆分多台机器部署) worker_processes  1; e ...

  2. webrtc之TURE、STUN、摄像头打开实战

    前言: 大家周末好,今天给 webrtc之TURE.STUN.摄像头打开实战 大家分享的是webrtc第一篇文章,在之前的音视频文章里面没有分享过关于webrtc的内容:在上个周末分享了一篇关于播放器 ...

  3. php安裝7.3版本

    CentOS 安装 EPEL 源: yum install epel-release 安装 REMI 源: CentOS 7: yum install http://rpms.remirepo.net ...

  4. 使用微服务Blog.Core开源框架的一些坑

    1.使用SqlSuger组件时同一API无法自动切库 1.1 在生成Model时在类上加上特性 1.2 一个接口如果使用了多个数据库实例,会出现库找不到,需要使用ChangeDataBase切库 2. ...

  5. 5.Java流程控制

    所有的流程控制语句都可以相互嵌套.互不影响 一.用户交互Scanner Scanner对象 之前我们学的基本语法中我们并没有实现程序和人的交互,但是Java给我们提供了这样一个工具类,我们可以获取用户 ...

  6. Automation Framework Design 自动化框架设计思想

    从2007年到2017年,十年内自动化测试工具层出不穷,各种工具在运用一段时间之后,各个公司都会有测试架构师对于目前的自动化测试工具进行框架定制设计. 从惠普2007年GDCC推出的的WebDrivi ...

  7. etcd的使用

    etcd的使用 什么是etcd etcd的特点 etcd的应用场景 服务注册与发现 消息发布和订阅 负载均衡 分布式通知与协调 分布式锁 分布式队列 集群监控与Leader竞选 参考 etcd的使用 ...

  8. JVM优化过头了,直接把异常信息优化没了?

    你好呀,我是why. 你猜这次我又要写个啥没有卵用的知识点呢? 不好意思,问的稍微有点早了,啥提示都没给,咋猜呢,对吧? 先给你上个代码: public class ExceptionTest {   ...

  9. RPC远程协议之Thrift入门

    在上一篇文章<RPC远程协议之原理分析>中,我介绍了RPC的工作原理及欲实现RPC框架功能应该做哪些事情,因为要做的事情太多,完全由开发人员研发实现,不是很现实,所以市面上出现了诸多RPC ...

  10. ubuntu18.04aliyun

    deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse deb-src http://mirr ...