zoukankan      html  css  js  c++  java
  • log4j 分级别输出到不同的文件

    看到有需要输出不同级别的日志到不同的文件,比如说info级别输出到info.log,debug级别日志输出到debug日志。

    1.我们可以通过log4j.properties设置多个appender来达到目的。

    本次使用的jar包为commons-logging-1.0.4.jar,log4j-1.2.15.jar

    # For JBoss: Avoid to setup Log4J outside $JBOSS_HOME/server/default/deploy/log4j.xml!
    # For all other servers: Comment out the Log4J listener in web.xml to activate Log4J.
    #根日志 收录所有的日志信息
    log4j.rootLogger=INFO,stdout
    
    log4j.logger.stdout=DEBUG,stdout
    log4j.appender.stdout=org.apache.log4j.DailyRollingFileAppender
    log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
    log4j.appender.stdout.layout.ConversionPattern=%d %p [%t] %C{1}.%M(%L) | %m%n
    log4j.appender.stdout.file=D:/workMobile/shelltest/log/stdout.txt
    
    
    #分支模块日志 只收录stdout_test1下的日志信息
    log4j.logger.fordebug=DEBUG,fordebug
    log4j.appender.fordebug=org.apache.log4j.DailyRollingFileAppender
    log4j.appender.fordebug.layout=org.apache.log4j.PatternLayout
    log4j.appender.fordebug.layout.ConversionPattern=%d %p %c - <%m>%n
    #%d %p [%t] %C{1}.%M(%L) | %m%n
    log4j.appender.fordebug.file=D:/workMobile/shelltest/log/debug.log
    
     
    
    #分支模块日志 只收录info下的日志信息
    log4j.logger.forinfo=DEBUG,forinfo
    log4j.appender.forinfo=org.apache.log4j.DailyRollingFileAppender
    log4j.appender.forinfo.layout=org.apache.log4j.PatternLayout
    log4j.appender.forinfo.layout.ConversionPattern=%d %p [%t] %C{1}.%M(%L) | %m%n
    log4j.appender.forinfo.file=D:/workMobile/shelltest/log/info.log

     java代码中使用:

    //    private static final Log stdout = LogFactory.getLog("stdout");
    private static final Log fordebug = LogFactory.getLog("fordebug");
    private static final Log forinfo = LogFactory.getLog("forinfo");
    
    /**
    * @param args
    */
    public static void main(String[] args) {
    
    fordebug.info("stdout_test1 info");
    fordebug.debug("stdout_test1 debug");
    
    forinfo.info("stdout_test2");
    forinfo.debug("stdout_test2");
    
    }

    这样所有fordebug打印出的日志全部收录到D:/workMobile/shelltest/log/debug.log文件中。

    而所有forinfo打印出的日志全部收录到D:/workMobile/shelltest/log/forinfo.log文件中。

    这样就达到了日志分离的目的。

    2.我们还可以通过使用log4j.xml配置文件来进行配置。

    本次使用的jar包为log4j-1.2.15.jar

    <?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"/> 
    </appender> 
    <!-- 使用时间控制日志文件的更迭
    <appender name="DEBUG" class="org.apache.log4j.DailyRollingFileAppender">
    
    生成的日志文件名
    
    <param name="File" value="debug.log"/> 
    <param name="Append" value="true"/>
    
    定义日志文件名时间格式
    <param name="datePattern" value="'.'yyyy-MM-dd" /> 
    <layout class="org.apache.log4j.PatternLayout">
    
    定义日志输出的格式
    <param name="ConversionPattern" value="%5p [%t] (%F:%L) - %m%n"/> 
    </layout>
    
    *通过过滤器,我们可以定义这个文件将接收何种等级的日志信息,这里是debug级别
    <filter class="org.apache.log4j.varia.LevelRangeFilter"> 
    <param name="LevelMax" value="DEBUG" /> 
    <param name="LevelMin" value="DEBUG" /> 
    </filter> 
    </appender> 
    <appender name="INFO" class="org.apache.log4j.DailyRollingFileAppender"> 
    <param name="File" value="info.log"/> 
    <param name="Append" value="true"/> 
    <param name="datePattern" value="'.'yyyy-MM-dd" />
    <layout class="org.apache.log4j.PatternLayout"> 
    <param name="ConversionPattern" value="%p %t %c - %m%n"/> 
    </layout> 
    <filter class="org.apache.log4j.varia.LevelRangeFilter"> 
    <param name="LevelMax" value="INFO" /> 
    <param name="LevelMin" value="INFO" /> 
    </filter> 
    </appender>
    --> 
    <!--  通过日志大小来确定是否生成新的日志文件 -->
    <appender name="DEBUG" class="org.apache.log4j.RollingFileAppender"> 
    <param name="File" value="debug.log"/> 
    <param name="Append" value="true"/> 
    <param name="MaxFileSize" value="1KB"/> 
    <param name="MaxBackupIndex" value="2"/> 
    <layout class="org.apache.log4j.PatternLayout"> 
    <param name="ConversionPattern" value="%5p [%t] (%F:%L) - %m%n"/> 
    </layout> 
    <filter class="org.apache.log4j.varia.LevelRangeFilter"> 
    <param name="LevelMax" value="DEBUG" /> 
    <param name="LevelMin" value="DEBUG" /> 
    </filter> 
    </appender> 
    <appender name="INFO" class="org.apache.log4j.RollingFileAppender"> 
    <param name="File" value="info.log"/> 
    <param name="Append" value="true"/> 
    <param name="MaxFileSize" value="1KB"/> 
    <param name="MaxBackupIndex" value="2"/> 
    <layout class="org.apache.log4j.PatternLayout"> 
    <param name="ConversionPattern" value="%p %t %c - %m%n"/> 
    </layout> 
    <filter class="org.apache.log4j.varia.LevelRangeFilter"> 
    <!-- 如果想error级日志也输入到此,修改 <param name="LevelMax" value="ERROR"--> <param name="LevelMax" value="INFO" /> <param name="LevelMin" value="INFO" /> </filter> </appender> <root> <appender-ref ref="STDOUT"/> <appender-ref ref="DEBUG"/> <appender-ref ref="INFO"/> </root> </log4j:configuration>

    这样,我们仍然可以和以前一样使用:

    Logger log=Logger.getLogger(this.getClass());
    log.info("this is info msg!");
    log.debug("this is debug msg!");

    使用log4j.xml来配置时,如果报不能找到log4j.dtd的异常,从log4j的jar包中找org/apache/log4j/xml/log4j.dtd,拷贝到src下即可。

    想了解下log4j中log4j.properties和log4j.xml的加载顺序,经过查看LogManager.java

    // if the user has not specified the log4j.configuration
    // property, we search first for the file "log4j.xml" and then
    // "log4j.properties"

    明确了,当用户没有设置log4j.configuration属性,则首先查找log4j.xml,然后查找log4j.properties。

    log4j.properties以后已经不再推荐使用了。

  • 相关阅读:
    打印九九乘法表
    PAT (Basic Level) Practice (中文) 1091 N-自守数 (15分)
    PAT (Basic Level) Practice (中文)1090 危险品装箱 (25分) (单身狗进阶版 使用map+ vector+数组标记)
    PAT (Basic Level) Practice (中文) 1088 三人行 (20分)
    PAT (Basic Level) Practice (中文) 1087 有多少不同的值 (20分)
    PAT (Basic Level) Practice (中文)1086 就不告诉你 (15分)
    PAT (Basic Level) Practice (中文) 1085 PAT单位排行 (25分) (map搜索+set排序+并列进行排行)
    PAT (Basic Level) Practice (中文) 1083 是否存在相等的差 (20分)
    PAT (Basic Level) Practice (中文) 1082 射击比赛 (20分)
    PAT (Basic Level) Practice (中文) 1081 检查密码 (15分)
  • 原文地址:https://www.cnblogs.com/lansor/p/2536669.html
Copyright © 2011-2022 走看看