天天看點

log4j2在項目中的使用log4j2的下載下傳位址log4j2在maven項目中的使用比較完整的配置檔案介紹

文章目錄

  • log4j2的下載下傳位址
  • log4j2在maven項目中的使用
  • 比較完整的配置檔案介紹

log4j2的下載下傳位址

apache的日志元件官網:http://logging.apache.org/

log4j2下載下傳(提供的windows的下載下傳位址,其他版本或者linux的版本請到官網):http://mirrors.tuna.tsinghua.edu.cn/apache/logging/log4j/2.11.2/apache-log4j-2.11.2-bin.zip

解壓後有很多jar包,僅需兩個

log4j-api-2.11.2.jar
log4j-core-2.11.2.jar
           

log4j2在maven項目中的使用

  1. 建立maven項目
    log4j2在項目中的使用log4j2的下載下傳位址log4j2在maven項目中的使用比較完整的配置檔案介紹
    2.添加依賴(在maven倉庫搜尋和log4j2的官方文檔)
<dependencies>
      <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-api</artifactId>
        <version>2.11.2</version>
      </dependency>
      <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-core</artifactId>
        <version>2.11.2</version>
      </dependency>
    </dependencies>
           
  1. 添加配置檔案(在resources目錄下添加log4j2.xml)

 這裡是簡單的配置檔案,和之前的log4j的配置檔案相比,結構更清晰一些,以下隻是一個追加器和一個根記錄器的配置。

<?xml version="1.0" encoding="utf-8" ?>
<!--
    status屬性:檢視log4j的裝配過程,值為OFF表示關閉,值為debug等日志級别為檢視日志過程
-->
<configuration status="OFF">
    <!--定義附加器,需要在appender标簽中定義-->
    <Appenders>
        <!--
            name屬性:定義追加器的辨別名稱
            target:定義輸出日志形式    SYSTEM_OUT/SYSTEM_ERR
        -->
        <Console name="console" target="SYSTEM_OUT">
            <PatternLayout pattern="[log4j2-demo]  %-d{yyyy-MM-dd HH-mm-ss.SSS} [%-5p] %C:%L  %m%n"/>
        </Console>
    </Appenders>
    
    <Loggers>
        <!-- 定義根日志 -->
        <!-- level : 指定根日志的日志輸出級别 -->
        <Root level="info">
            <!-- 引用日志追加器,和上面定義的追加器的名稱一樣-->
            <AppenderRef ref="console"/>
        </Root>
    </Loggers>

</configuration>
           
  1. 運作時類
public class log4j2demo {

    public static void main(String[] args) {
        Logger logger = LogManager.getLogger(log4j2demo.class);

        logger.fatal("this is fatal message");
        logger.error("this is error message");
        logger.warn("this is warn message");
        logger.info("this is info message");
        logger.debug("this is debug message");
        logger.trace("this is trace message");
    }
}
           

4.運作結果

配置錯誤或者不配置,按

預設的配置

輸出,類似結果如下

ERROR StatusLogger No Log4j 2 configuration file found. Using default configuration (logging only errors to the console).......
10:39:49.129 [main] FATAL com.emptycloud.blog.log4j2demo - this is fatal message
10:39:49.133 [main] ERROR com.emptycloud.blog.log4j2demo - this is error message
           

正确

[log4j2-demo]  2019-02-15 11-22-39.810 [FATAL] com.emptycloud.blog.log4j2demo:19  this is fatal message
[log4j2-demo]  2019-02-15 11-22-39.815 [ERROR] com.emptycloud.blog.log4j2demo:20  this is error message
[log4j2-demo]  2019-02-15 11-22-39.815 [WARN ] com.emptycloud.blog.log4j2demo:21  this is warn message
[log4j2-demo]  2019-02-15 11-22-39.815 [INFO ] com.emptycloud.blog.log4j2demo:22  this is info message
           

比較完整的配置檔案介紹

<?xml version="1.0" encoding="utf-8" ?>
        <!--
            status屬性:檢視log4j的裝配過程,值為OFF表示關閉,值為debug等日志級别為檢視日志建立過程(正常情況下隻有debug和trace級别日志顯示)
            monitorInterval : 配置檔案更改後重新加載,不用重新開機應用,機關秒
        -->
<configuration status="warn" monitorInterval="600">
<!--全局屬性聲明,友善後面使用${屬性名稱} 進行引用-->
<properties>
    <!-- /代表的是盤符根目錄, 還有諸如 .代表目前目前項目路徑 ,我們可以使用@ 名稱@從pom.xml中動态擷取這些值 -->
    <property name="LOG_HOME">/log</property>
    <property name="DEBUG_FILE_NAME">debug</property>
    <property name="ERROR_FILE_NAME">error</property>
</properties>

<!--定義附加器,需要在appender标簽中定義-->
<Appenders>
    <!--
        name屬性:定義追加器的辨別名稱
        target:定義輸出日志形式    SYSTEM_OUT/SYSTEM_ERR
    -->
    <Console name="console" target="SYSTEM_OUT">
        <!--
            ThresholdFilter:指定追加器過濾日志的級别
            level:設定級别
            onmatch:比對符合條件的日志輸出
            onMismatch:拒絕不符合條件
        -->
        <ThresholdFilter level="warn" onmatch="ACCEPT" onMismatch="DENY"/>
        <PatternLayout pattern="[log4j2-demo]  %-d{yyyy-MM-dd HH-mm-ss.SSS} [%-5p] %C:%L  %m%n"/>
    </Console>

    <!--
        File : 檔案追加器
        append :決定新産生的日志是追加還是覆寫(true為追加(預設))
        FileName : 決定日志檔案的名稱和位置
    -->
    <File name="file" FileName="${LOG_HOME}/file.log" append="true">
        <ThresholdFilter level="error" onmatch="ACCEPT" onMismatch="DENY"/>
        <PatternLayout pattern="[log4j2-demo] %-d{yyyy-MM-dd HH-mm-ss.SSS} [%-5p] %c:%L %m%n"/>
    </File>

    <!--
        以天/月/時為機關列印日志
        filePattern指定封存日志檔案的格式
    -->
    <RollingFile name="rollingFile" fileName="${LOG_HOME}/rollfile.log"
                 filePattern="${LOG_HOME}/$${date:yyyy-MM}/rollfile-%d{yyyy-MM-dd}.log">
        <!--
            間隔時間備份政策
            modulate為true表示以0點為邊界進行時間偏移計算,
            例:每隔4個小時進行日志封存,目前時間為3點,那麼1個小時後進行一次日志封存(将之前的日志放置到filePattern指定的封存位置)
            interval:間隔時間(其機關有filePattern中-dd HH%d{yyyy-MM}的最小機關來決定,)
        -->
        <TimeBasedTriggeringPolicy modulate="true" interval="1"/>
        <PatternLayout pattern="[log4j3-demo] %-d{yyyy-MM-dd HH-mm-ss.SSS} [%-5p] %c:%L %m%n"/>
        <ThresholdFilter level="debug" onmatch="ACCEPT" onMismatch="DENY"/>
    </RollingFile>

    <!--
        以大小為政策進行日志封存,%i用于記錄封存檔案的生成先後順序(),.zip/.gz等指定壓縮格式
        immediateFlush:log4j2接收到日志事件時,是否立即将日志刷到磁盤。預設為true。
    -->
    <RollingFile name="sizedRollFile" fileName="${LOG_HOME}/sizerollfile.log" immediateFlush="true"
                 filePattern="${LOG_HOME}/$${date:yyyy-MM-dd}/sizerollfile-%d{yyyy-MM-dd HH}-%i.log.zip">
        <PatternLayout pattern="[log4j2-demo] %-d{yyyy-MM-dd HH:mm:ss.SSS} [%-5p] %c:%L %m%n"/>
        <!-- 當有多個政策時,使用Policies 标簽-->
        <Policies>
            <TimeBasedTriggeringPolicy />
            <!--基于大小的觸發政策,size指定大小-->
            <SizeBasedTriggeringPolicy size="10 kB"/>
        </Policies>
        <Filters>
            <thresholdFilter level="debug" onmatch="ACCEPT" onMismatch="DENY"/>
        </Filters>
        <!--
            控制生成的封存檔案數量的一種政策,max控制filePattern 中的%i ,不指定預設為7,
            (就是你隻能看見7個封存的檔案,多餘的你可以了解為覆寫掉了)
            這雖然也是一種政策,但是放置在政策标簽之外
        -->
        <DefaultRolloverStrategy max="20" />
    </RollingFile>
</Appenders>

<Loggers>
    <!-- 定義根日志 -->
    <!--
        level : 指定根日志的日志輸出級别,ThresholdFilter生效其設定的日志級别輸出取決于此
        例:如果跟記錄器的日志級别設定成error,那麼追加器也不會輸出error級别一下的日志
    -->
    <Root level="debug">
        <!-- 引用日志追加器,和上面定義的追加器的名稱一樣-->
        <AppenderRef ref="console"/>
        <AppenderRef ref="file"/>
        <AppenderRef ref="rollingFile"/>
        <AppenderRef ref="sizedRollFile"/>
    </Root>

    <!--
        Logger:定義其他記錄器,和根記錄器存在繼承關系, 一般用于設定單獨的包的日志列印級别
        additivity : 設定是否繼承父記錄器的追加器
    -->

    <Logger name="com.emptyCloud.blog" level="debug" additivity="false">
        <AppenderRef ref="console"/>
    </Logger>
</Loggers>

</configuration>
           
log4j2在項目中的使用log4j2的下載下傳位址log4j2在maven項目中的使用比較完整的配置檔案介紹
log4j2在項目中的使用log4j2的下載下傳位址log4j2在maven項目中的使用比較完整的配置檔案介紹