zoukankan      html  css  js  c++  java
  • 在包一级定制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

  • 相关阅读:
    linux Apache 安装与配置
    从零开始的JAVA 2. java程序的构成及命名规则
    从零开始的JAVA 1. 安装 JAVA 与 设置环境变量
    通过系统光盘搭建本地yum仓库
    Linux网站服务Apache+php+mysql的安装
    PostgreSQL学习手册(常用数据类型)
    1.4、WebRTC源码
    1.3、WebRTC架构
    1.2、初识WebRTC
    必读前言—— 作者的独白
  • 原文地址:https://www.cnblogs.com/darkmatter/p/3606807.html
Copyright © 2011-2022 走看看