log4j 根据日志级别输出到指定文件中

1、log4j的参考配置文件 (以下支持根据级别输出到特定文件中)

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/'>

<appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%p] %d{yyyy-MM-dd HH\:mm\:ss} %l\: %m%n"/>
</layout>
</appender>


<appender name="DEBUG" class="org.apache.log4j.DailyRollingFileAppender">
<param name="File" value="logs/LottChartStBox_debug.log"/>
<param name="datePattern" value="'.'yyyy-MM-dd"/>
<param name="encoding" value="UTF-8">
<param name="Append" value="true"/>
<param name="MaxFileSize" value="500KB"/>
<param name="MaxBackupIndex" value="2"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%p] %d{yyyy-MM-dd HH\:mm\:ss} %l\: %m%n"/>
</layout>
</appender>

<appender name="WARN" class="org.apache.log4j.DailyRollingFileAppender">
<param name="File" value="logs/LottChartStBox_warn.log"/>
<param name="datePattern" value="_yyyy-MM-dd"/>
<param name="encoding" value="UTF-8">
<param name="Append" value="true"/>
<param name="MaxFileSize" value="500KB"/>
<param name="MaxBackupIndex" value="2"/>
<layout class="org.apache.log4j.PatternLayout">
   <param name="ConversionPattern" value="%p] %d{yyyy-MM-dd HH\:mm\:ss} %l\: %m%n"/>
</layout>
<filter class="org.apache.log4j.varia.LevelRangeFilter">
<param name="LevelMin" value="WARN" />
<param name="LevelMax" value="ERROR" />
</filter></appender>

<!-- <appender name="ERROR" class="org.apache.log4j.DailyMaxRollingFileAppender">
<param name="File" value="logs/LottChartStBox_error.log"/>
<param name="Append" value="true"/>
<param name="DatePattern" value="LottChartStBox_error_'yyyy-MM-dd'.log" />
<param name="encoding" value="UTF-8">
<param name="MaxFileSize" value="500KB"/>
<param name="MaxBackupIndex" value="2"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="[%p] %d{yyyy-MM-dd HH\:mm\:ss} %l\: %m%n"/>
</layout>
<filter class="org.apache.log4j.varia.LevelRangeFilter">
<param name="LevelMin" value="ERROR" />
<param name="LevelMax" value="ERROR" />
</filter> </appender>  -->

<root>
<priority value="debug"/>
<appender-ref ref="STDOUT"/>
<appender-ref ref="DEBUG"/>
<appender-ref ref="WARN"/>
<!-- <appender-ref ref="ERROR"/> -->
</root>

</log4j:configuration>

 

2、log4j的文件的放置于调用

     在log4j.jar中,有个初始化类org.apache.log4j.LogManager . 它有个静态代码块,指明了调用配置文件的先后顺序如下 :   

  static
  {
    Hierarchy h = new Hierarchy(new RootLogger(Level.DEBUG));
    repositorySelector = new DefaultRepositorySelector(h);
    String override = OptionConverter.getSystemProperty("log4j.defaultInitOverride", null);
    if ((override == null) || ("false".equalsIgnoreCase(override)))
    {
      String configurationOptionStr = OptionConverter.getSystemProperty("log4j.configuration", null);
      String configuratorClassName = OptionConverter.getSystemProperty("log4j.configuratorClass", null);
      


      URL url = null;
      if (configurationOptionStr == null)
      {
        url = Loader.getResource("log4j.xml");
        if (url == null) {
          url = Loader.getResource("log4j.properties");
        }
      }
      else
      {
        try
        {
          url = new URL(configurationOptionStr);
        }
        catch (MalformedURLException ex)
        {
          url = Loader.getResource(configurationOptionStr);
        }
      }
      if (url != null)
      {
        LogLog.debug("Using URL [" + url + "] for automatic log4j configuration.");
        try
        {
          OptionConverter.selectAndConfigure(url, configuratorClassName, getLoggerRepository());
        }
        catch (NoClassDefFoundError e)
        {
          LogLog.warn("Error during default initialization", e);
        }
      }
      else
      {
        LogLog.debug("Could not find resource: [" + configurationOptionStr + "].");
      }
    }
  }
     说明:

     1、OptionConverter.getSystemProperty() 等用于 System.getProperty()

     2、如果系统属性配置了“log4j.defaultInitOverride”且不是false(默认为null),那么就不会自动加载配置文件,必须手动调用org.apache.log4j.PropertyConfigurator.configure(xxxx)方法来自己手动加载文件属性

    3、没有配置“log4j.defaultInitOverride”,那么就会先在系统属性"log4j.configuration"所指定的路径下去查找配置文件,找到就加载,找不到就拉倒

    4、如果没有“log4j.defaultInitOverride” 和 "log4j.configuration" ,就会在项目classpath下去找,优先找到log4j.xml,再找log4j.properties,先找到哪个就加载哪个

    5、第一次获得logger对象后,就会放入缓存,后面取的将都是缓存里面的值 (注意,如果第一次构建对象时还没有加载到配置文件,及时后面系统加载了配置文件也不生效了,还有,谨防jar包里面的log4j配置文件的影响)

3、日志的输出

       我们调用一般会用2个  :

       org.apache.commons.logging.Log log =   org.apache.commons.logging.LogFactory.getLog(Class);   //来源于 commons-logging.jar

       org.apache.log4j.Logger logger =  org.apache.log4j.LogManager.getLogger(Class);   //来源于log4j.jar

       关系 :

      org.apache.commons.logging.Log  继承于(extends)   org.apache.log4j.Logger; 

      org.apache.commons.logging.LogFactory.getLog(Class);这个方法最终也是调用了org.apache.log4j.LogManager.getLogger(Class)的方法生成logger对象 。

      不过 org.apache.commons.logging.LogFactory.getLog(Class) 这个是包装了一层缓存,而 org.apache.log4j.LogManager.getLogger(Class)没有缓存 。 那么效率就肯定低下好多,且会new多个对象

      请使用

      org.apache.commons.logging.Log log =   org.apache.commons.logging.LogFactory.getLog(Class);   //来源于 commons-logging.jar

    

 

      

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值