log4j

来源:互联网 发布:人工智能专家系统 济南 编辑:程序博客网 时间:2024/06/03 17:37

log4j虽然总的来说是比较容易使用的,但是要是想比较精通的操纵它还是有很多地方值得探讨的。
    这几天有空,把项目中大家用到的log4j实现的功能分了一下类,大致分为下面三类:
    <1>所有的日志信息都输出到log.log.
    <2>对于一些特殊的日志(如启动时候的日志),输出到log/startup/startup.log.
    <3>对于某些特殊包下面的日志,如com.aspire包下面的error信息都输出到error.log   
    有了这几个功能,相信对于大部分的系统都是够用的了,下面这个例子就是实现了这几个功能:
    (至于其他的一些配置,如格式这些的就不说明,有很多这种资料)
   
    ***********  log4j 配置文件  ************   
   
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" threshold="debug">

<appender name="file" class="org.apache.log4j.RollingFileAppender">
 <param name="File" value="log.log"/>
 <layout class="org.apache.log4j.PatternLayout">
 <param name="ConversionPattern" value=" %d{ISO8601} [%c]- %m%n"/>
 </layout>
</appender>

<appender name="error" class="org.apache.log4j.RollingFileAppender">
  <param name="File" value="error.log"/>
  <param name="MaxBackupIndex" value="300"/>
  <param name="Encoding" value="GB2312"/>
  <param name="MaxFileSize" value="20MB"/>
  <layout class="org.apache.log4j.PatternLayout">
   <param name="ConversionPattern" value="%d{ISO8601} %p [%c] - [%m]%n"/>
  </layout>
    <filter class="org.apache.log4j.varia.LevelRangeFilter">
  <!-- 过滤,只记录error信息-->
  <param name="LevelMin" value="error"/>
  <param name="LevelMax" value="error"/>
  <param name="acceptOnMatch" value="true"/>
    </filter>
</appender>
<appender name="startup" class="com.aspire.TimeSizeRollingFileAppender">
  <!--该类使自己从FileAppender派生,可以自己控制输出文件的路径 -->
  <param name="File" value="log/startup/startup.log" />
  <param name="Encoding" value="GBK" />
  <layout class="org.apache.log4j.PatternLayout">
   <param name="ConversionPattern" value="%m %d{ISO8601}- %m%n %p %l%n" />
  </layout>
</appender>

<logger name="biz.startup">
<!--Logger logger = Logger.getLogger("biz.startup") 可以这样来调用本logger-->
  <level value="debug" />
  <appender-ref ref="startup" />
</logger>

<logger name="com.aspire" additivity="false">
<!--Log log = LogFactory.getLog(TestLog4j.class) 此时如果TestLog4j
    位于com.aspire包下面,那么使用本logger
 -->
  <level value="debug"/>
  <appender-ref ref="error"/>
</logger>
<root>
<level value="info"/>
<!-- 默认输出到log.log-->
<appender-ref ref="file"/>
</root>
</log4j:configuration>

***********  log4j 配置文件结束 ************

**********  派生的TimeSizeRollingFileAppender类*****
package com.aspire;

import org.apache.log4j.FileAppender;
import org.apache.log4j.spi.ErrorCode;
import java.io.File;
import java.io.IOException;

public class TimeSizeRollingFileAppender
    extends FileAppender
    implements ErrorCode {

  private final static String FS = System.getProperty("file.separator");
  public TimeSizeRollingFileAppender() {
  }
  public void setFile(String file) {
    String val = file.trim();
    File domain = new File(".");
    try {
      fileName = domain.getCanonicalPath() + FS + val;
    }
    catch (IOException ex) {
      ex.printStackTrace();
    }
  }
}

********** TimeSizeRollingFileAppender 类结束 ******

************ 调用示例 TestLog4j类 **************
package com.aspire;

import org.apache.log4j.Logger;
import org.apache.log4j.LogManager;
import org.apache.commons.logging.LogFactory;
import org.apache.log4j.xml.DOMConfigurator;
import org.apache.commons.logging.Log;

public class TestLog4j {
  private Logger logger = Logger.getLogger("biz.startup");
  private Log log = LogFactory.getLog(TestLog4j.class);

  public static void config(){
    DOMConfigurator.configure("conf//log4jConf.xml");
  }
  public void Test(){
    /**
     * error > warn > info > debug
     */
    logger.error("*****error*****");
    logger.debug("****debug*****");
    logger.warn("*****warn******");
    logger.info("*****info******");
    log.error("中华之崛起!");
  }
  public static void main(String [] argv){
    TestLog4j t = new TestLog4j();
    TestLog4j.config();
    t.Test();
  }
}

***************  TestLog4j end ***********

原创粉丝点击