log4j 分类输出

一个log4j的问题也是折磨了我两天了。

终于算是实现了个符合需求的小demo。然而,我必须吧log4j搞定,这个乐塞。

需求描述:

  用xml配置文件,将debug、info、warn、error分类且单独放各自相应的日志文件中。

实现:

  xml文件:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">

  <appender name="console" class="org.apache.log4j.ConsoleAppender">
    <param name="Target" value="System.out"/>
    <layout class="org.apache.log4j.PatternLayout">
      <param name="ConversionPattern" value="%-5p %c{1} - %m%n"/>
    </layout>
  </appender>
  
  <appender name="my_error" class="org.apache.log4j.FileAppender">
    <param name="File" value="D://logs/log4j_error.log"/>   
    <layout class="org.apache.log4j.PatternLayout">
      <param name="ConversionPattern" value="%-5p %c{1} - %m%n"/>
    </layout>
    <filter class="org.apache.log4j.varia.LevelRangeFilter">
                        <param name="levelMin" value="ERROR" />
                        <param name="levelMax" value="ERROR" />
    </filter>
  </appender>
  
  <appender name="my_warn" class="org.apache.log4j.FileAppender">
    <param name="File" value="D://logs/log4j_warn.log"/>   
    <layout class="org.apache.log4j.PatternLayout">
      <param name="ConversionPattern" value="%-5p %c{1} - %m%n"/>
    </layout>
    <filter class="org.apache.log4j.varia.LevelRangeFilter">
                        <param name="levelMin" value="WARN" />
                        <param name="levelMax" value="WARN" />
    </filter>
  </appender>
  
  <appender name="my_info" class="org.apache.log4j.FileAppender">
    <param name="File" value="D://logs/log4j_info.log"/>   
    <layout class="org.apache.log4j.PatternLayout">
      <param name="ConversionPattern" value="%-5p %c{1} - %m%n"/>
    </layout>
    <filter class="org.apache.log4j.varia.LevelRangeFilter">
                        <param name="levelMin" value="INFO" />
                        <param name="levelMax" value="INFO" />
    </filter>
  </appender>
  
  <appender name="my_debug" class="org.apache.log4j.FileAppender">
    <param name="File" value="D://logs/log4j_debug.log"/>   
    <layout class="org.apache.log4j.PatternLayout">
      <param name="ConversionPattern" value="%-5p %c{1} - %m%n"/>
    </layout>
    <filter class="org.apache.log4j.varia.LevelRangeFilter">
                        <param name="levelMin" value="DEBUG" />
                        <param name="levelMax" value="DEBUG" />
    </filter>
  </appender>
  
     <logger name="Test.log4jTest" additivity="true">      
        <level value="DEBUG" />      
        <appender-ref ref="my_debug" />  
        <appender-ref ref="my_warn" /> 
        <appender-ref ref="my_info" /> 
        <appender-ref ref="my_error" />  
     </logger>
     
    <root>
      <priority value ="debug" />
      <appender-ref ref="console" />
    </root>

</log4j:configuration>

测试类 log4jTest:

package Test;

import org.apache.log4j.Appender;
import org.apache.log4j.xml.DOMConfigurator;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class log4jTest {
    private static Logger logger = LoggerFactory.getLogger(log4jTest.class);

    static {
        DOMConfigurator.configure("log4j.xml");
    }

    public static void main(String[] args) {
        logger.debug("this is debug");
        logger.info("this is info");
        logger.error("this is error");
        logger.warn("this is warn");
    }

}

关键点:

  1.xml中,起单独分类作用的是标签 <filter>

  2.测试类中,加上一行代码,用于获取log4j.xml。(为了配置方便,我的log4j放在了项目根目录下,与src同级,故必须加上改行代码。)

    DOMConfigurator.configure("log4j.xml");

  其他point将在后续文章逐点列出,敬请关注。

原文地址:https://www.cnblogs.com/not-NULL/p/5147829.html