Log4j配置說明及樣例


  一般的應用都會記錄日志,Java圈里面用得最多就屬log4j了,比較規范一點就是使用log4j.xml進行配置Log輸出。這里就比較有疑問,多數情況是使用log4j.properties文件吶,前面也說了,規范一點就用log4j.xml進行配置,他們之間究竟有哪些區別呢,在百度知道里面有人這么回答,個人覺得還是有點道理的,廣大博友可以自由備注。

  • 區別不大,只是在項目中配置的文件形式不一樣。功能上沒區別。 推薦用xml 方式。

  • 有web 項目中log4.properties不能使用Filter攔截日志級別,而log4j.xml可以,這點感覺log4j.xml要強大些

  • log4j.xml插入數據庫的時候sql寫在layout屬性的ConversionPattern參數中,而log4.properties則有單獨的sql屬性接受配置文件中的sql語句

  雖然沒有人點贊,但是有點道理哦。有這么一個場景:某一個模塊中,我想把很重要的業務日志分離出來,保存在單獨的一個文件中,不和其他普通的日志打在一起,后續用來做統計也比較方便(我廠大部分應用都是將日志統統地打印在一起,然后通過一個日志收集平台收集到MQ、HDFS中去做統計分析,然后統計分析的時候又要對這些日志做過濾只關心特殊的業務日志,個人認為這樣很不好,不僅給后續統計分析帶來復雜度,同時也給浪費大量收集平台的網絡、IO等資源。)這里給出一個log4j.xml的配置:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/xml/doc-files/log4j.dtd">
<log4j:configuration>
    <appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="[%d{dd/MM/yy HH:mm:ss:sss}] %t %5p %c{2}: %m%n"/>
        </layout>
    </appender>

    <!--自定義appender-->
    <appender name="logmodel1" class="org.apache.log4j.RollingFileAppender">
        <param name="File" value="logs/model1.log"/>  <!--日志路徑-->
        <param name="Append" value="false"/> <!--是否追加-->
        <param name="MaxBackupIndex" value="3"/>        <!--最大roll的文件數-->
        <param name="MaxFileSize" value="10240"/> <!--文件size上限-->
        <layout class="org.apache.log4j.PatternLayout">          <!--日志輸出格式-->
            <param name="ConversionPattern" value="[%d{dd/MM/yy HH:mm:ss:sss}] %5p %c: %m%n"/>
        </layout>
    </appender>

    <!--自定義logger,additivity: 是否遵循缺省的繼承機制-->
    <logger name="model1" additivity="false">
        <level value="DEBUG"/>
        <appender-ref ref="logmodel1"/>
    </logger>
    <root>
        <level value="INFO"/>
        <appender-ref ref="CONSOLE"/>
    </root>
</log4j:configuration>

簡單的模塊樣例代碼:

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;


public class Log4JTest {
    /**
     * root logger
     */
    private static final Logger LOG = LoggerFactory.getLogger(Log4JTest.class);

    /**
     * 自定義model1 logger
     */
    private static final Logger MODEL_LOG1 = LoggerFactory.getLogger("model1");

    public static void printLog(int i) {
        LOG.info("log something....." + i);
    }

    public static void printModelLog1(int i) {
        MODEL_LOG1.info("log info model1 something....." + i);
        MODEL_LOG1.debug("log debug model1 something....." + i);
    }

    public static void main(String[] args) throws InterruptedException {
        for (int i=10; i < 20; i++) {
            printLog(i);
            printModelLog1(i);
            Thread.sleep(1000);
        }
    }

}

  然后,普通的日志就直接輸出在Console上了,比較核心的printModelLog1中通過MODEL_LOG1將日志輸出到logs/model1.log文件中。具體log4j支持哪些appender以及ConversionPattern網上一搜一大把,不再贅述。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM