• 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以后已经不再推荐使用了。

  • 相关阅读:
    Java 基础 泛型
    Hibernate 注解
    Head Fisrt Android Development读书笔记(7)Database Persistent
    ruby中的Enumerable的使用
    [置顶] 从small到safe,形容词的学问
    Silverlight中DomainDataSource的一种Debug方法
    [置顶] 从高中一次半夜不冲厕所的经历谈程序
    [置顶] 视频网站:一炷香后即将为您播放精彩内容
    Android. Handling some SQLite issues
    查找ruby方法(以rails为例)
  • 原文地址:https://www.cnblogs.com/lansor/p/2536669.html
Copyright © 2020-2023  润新知