log4j2使用教程


Log4j2簡介
log4j2是log4j 1.x 的升級版,2015年5月,Apache宣布log4j1.x 停止更新。最新版為1.2.17。
 
log4j2參考了logback的一些優秀的設計,並且修復了一些問題,因此帶來了一些重大的提升,主要有:
1、異常處理:在logback中,Appender中的異常不會被應用感知到,但是在log4j2中,提供了一些異常處理機制。
2、性能提升:log4j2相較於log4j 1和logback都具有很明顯的性能提升。
3、自動重載配置:參考了logback的設計,提供自動刷新參數配置,可以動態的修改日志的級別而不需要重啟應用。
4、無垃圾機制,log4j2在大部分情況下,都可以使用其設計的一套無垃圾機制,避免頻繁的日志收集導致的jvm gc。
 
 
以Java項目為例介紹log4j2配置步驟
工程結構如下
       
 
 
1.添加log4j2相關jar包(maven)
<!--添加log4j2相關jar包-->
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-api</artifactId>
    <version>2.7</version>
</dependency>
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-core</artifactId>
    <version>2.7</version>
</dependency>

 

2.log4j2.xml配置和簡單說明
<?xml version="1.0" encoding="UTF-8"?>
<configuration status="error">
    <!--先定義所有的appender -->
    <appenders>
        <!--這個輸出控制台的配置 -->
        <Console name="Console" target="SYSTEM_OUT">
            <!--             控制台只輸出level及以上級別的信息(onMatch),其他的直接拒絕(onMismatch) -->
            <ThresholdFilter level="trace" onMatch="ACCEPT" onMismatch="DENY"/>
            <!--             這個都知道是輸出日志的格式 -->
            <PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/>
        </Console>
 
        <!--文件會打印出所有信息,這個log每次運行程序會自動清空,由append屬性決定,這個也挺有用的,適合臨時測試用 -->
        <!--append為TRUE表示消息增加到指定文件中,false表示消息覆蓋指定的文件內容,默認值是true -->
        <File name="log" fileName="D:/logs/log4j2.log" append="false">
            <PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/>
        </File>
 
        <!--添加過濾器ThresholdFilter,可以有選擇的輸出某個級別以上的類別  onMatch="ACCEPT" onMismatch="DENY"意思是匹配就接受,否則直接拒絕  -->
        <File name="ERROR" fileName="D:/logs/error.log">
            <ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/>
            <PatternLayout pattern="%d{yyyy.MM.dd 'at' HH:mm:ss z} %-5level %class{36} %L %M - %msg%xEx%n"/>
        </File>
 
        <!--這個會打印出所有的信息,每次大小超過size,則這size大小的日志會自動存入按年份-月份建立的文件夾下面並進行壓縮,作為存檔 -->
        <RollingFile name="RollingFile" fileName="D:/logs/web.log"
                     filePattern="logs/$${date:yyyy-MM}/web-%d{MM-dd-yyyy}-%i.log.gz">
            <PatternLayout pattern="%d{yyyy-MM-dd 'at' HH:mm:ss z} %-5level %class{36} %L %M - %msg%xEx%n"/>
            <SizeBasedTriggeringPolicy size="2MB"/>
        </RollingFile>
    </appenders>
 
 
    <!--然后定義logger,只有定義了logger並引入的appender,appender才會生效 -->
    <loggers>
        <root level="trace">
            <appender-ref ref="RollingFile"/>
            <appender-ref ref="Console"/>
            <appender-ref ref="ERROR" />
            <appender-ref ref="log"/>
        </root>
    </loggers>
</configuration>

 

 
3.測試類
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
 
public class log4j2Test {
 
    private static Logger logger= LogManager.getLogger(LogManager.ROOT_LOGGER_NAME);
 
    public static void main(String[] args) {
        for(int i=0;i<3;i++){
            // 記錄trace級別的信息
            logger.trace("log4j2日志輸出:This is trace message.");
            // 記錄debug級別的信息
            logger.debug("log4j2日志輸出:This is debug message.");
            // 記錄info級別的信息
            logger.info("log4j2日志輸出:This is info message.");
            // 記錄error級別的信息
            logger.error("log4j2日志輸出:This is error message.");
        }
    }
}

 

 
控制台輸出結果
 
日志文件輸出結果
 
 
log4j2配置說明
log4j 2.x版本不再支持像1.x中的.properties后綴的文件配置方式,2.x版本常用.xml后綴的文件進行配置,除此之外還包含.json和.jsn配置文件
 
log4j2雖然采用xml風格進行配置,依然包含三個組件,分別是 Logger(記錄器)、Appender(輸出目的地)、Layout(日志布局)。
 
XML配置文件解析
1、根節點Configuration有兩個屬性:status和monitorinterval,有兩個子節點:Appenders和Loggers(表明可以定義多個Appender和Logger).
status用來指定log4j本身的打印日志的級別.
monitorinterval為log4j 2.x新特點自動重載配置。指定自動重新配置的監測間隔時間,單位是s,最小是5s。
 
2、Appenders節點,常見的有三種子節點:Console、File、RollingFile
Console節點用來定義輸出到控制台的Appender.
File節點用來定義輸出到指定位置的文件的Appender.
RollingFile節點用來定義超過指定大小自動刪除舊的創建新的的Appender.
 
通過在子節點中加入<PatternLayout pattern="自定義信息格式"/>進行日志布局
%c 輸出所屬類的全名,可寫為 %c{Num} ,Num類名輸出的范圍 如:"com.sun.aaa.classB",%C{2}將使日志輸出輸出范圍為:aaa.classB
%d 輸出日志時間其格式為 可指定格式 如 %d{HH:mm:ss}等
%l 輸出日志事件發生位置,包括類目名、發生線程,在代碼中的行數
%n 換行符
%m 輸出代碼指定信息,如info(“message”),輸出message
%p 輸出日志的優先級,即 FATAL ,ERROR 等
%r 輸出從啟動到顯示該條日志信息所耗費的時間(毫秒數)
%t 輸出產生該日志事件的線程名

 

3、Loggers節點,常見的有兩種:Root和Logger.
Root節點用來指定項目的根日志,如果沒有單獨指定Logger,那么就會默認使用該Root日志輸出
Logger節點用來單獨指定日志的形式,比如要為指定包下的class指定不同的日志級別等。
 
 
logback log4j log4j2 性能實測
可見在同步日志模式下, Logback的性能是最糟糕的
而log4j2的性能無論在同步日志模式還是異步日志模式下都是最佳的
 
詳細性能實測參考以下博客內容


免責聲明!

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



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