1. 程式人生 > >log4j2的簡介及基礎配置

log4j2的簡介及基礎配置

資源連結

log4j2的官網地址

log4j2的API

碼雲原始碼

log4j2的簡介

  Log4j使用如下圖所示的類。

這裡寫圖片描述

  使用Log4j 2 API的應用程式將請求日誌管理器中帶有特定名稱的日誌記錄器。LogManager將定位適當的日誌上下文,然後從它獲得日誌記錄器。這使得新的Log4j 2.0版本有了大幅的效能提升、新的外掛系統,以及配置設定方面的很多改善。Log4j 1.x 在高併發情況下出現死鎖導致cpu使用率異常飆升,而Log4j2.0基於LMAX Disruptor的非同步日誌在多執行緒環境下效能會遠遠優於Log4j 1.x和logback。

Log4j的使用

新增pom依賴

<!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-api -->
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-api</artifactId>
            <version>2.10.0</version>
        </dependency
>
<!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-core --> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> <version>2.10.0</version> </dependency
>

新增log4j2.xml配置檔案

  注意了,這裡是log4j2.xml而不是log4j.xml,這也是log4j2在配置檔案方面與log4j最不同的地方,兩者不能混淆,否則會報出找不到配置檔案的問題。

<?xml version="1.0" encoding="UTF-8"?>
<configuration status="OFF">
    <appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} %5p %t %-5l - %m%n"/>
        </Console>
        <!--
            fileName:指定日誌的所在位置以及日誌名稱
            filePattern:指定備份的日誌所在位置以及名稱
        -->
        <RollingFile name="RollingFile" fileName="F:/logs/log4j2-xml.log" filePattern="F:/logs/log4j2-xml-$${date:yyyy-MM}/log4j2-xml-%d{yyyy-MM-dd}-%i.log.gz">
            <!--輸出的日誌資料格式-->
            <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} %5p %t %-5l - %m%n"/>
            <!--設定日誌檔案大小,當超過5M時,觸發日誌備份操作-->
            <SizeBasedTriggeringPolicy size="5 MB" />
        </RollingFile>
    </appenders>
    <loggers>
        <root level="trace">
            <appender-ref ref="Console"/>
            <appender-ref ref="RollingFile"/>
        </root>
    </loggers>
</configuration>

  配置檔案中詳細的標籤我已經在程式碼備註上填寫完整了,所以說這裡就直接略過。

新增Log4j2Test測試程式碼

package com.lyc.log4j2;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.junit.Test;

public class Log4j2Test {

    private static final Logger log = LogManager.getLogger(Log4j2Test.class);

    @Test
    public void test(){
        for(int i = 0;i < 200000;i ++){
            log.info("這裡是在控制檯中輸出的資訊。");
        }
    }
}

執行結果

  上述程式碼的意思是log4j2在執行程式碼時將日誌資訊記錄在log4j2-xml.log日誌檔案中,這裡我在測試程式碼中特意執行了200000次,目的就是為了讓其生成比較大的日誌檔案,在log4j2.xml的配置檔案中,我們已經將其日誌檔案的最大上限通過SizeBasedTriggeringPolicy標籤限制在了5M,這樣,多餘的日誌資訊就會被記錄到相應的壓縮包中,該壓縮包的所在位置以及檔名稱由RollingFile標籤中的filePattern屬性所作出規定,所以說執行後的結果如下所示:

這裡寫圖片描述