log4j2分析總結(一)


現在公司用log4j2 進行日志記錄,我也看了相關的資料,現在進行記錄學習總結下

整體結構

  • Appenders里設置日志的輸出方式、級別和格式
  • Loggers里設置全局的級別和綁定appenders里的name

簡單代碼demo

加載依賴

登錄官網,找到maven依賴

<dependencies>
  <dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-api</artifactId>
    <version>2.11.0</version>
  </dependency>
  <dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-core</artifactId>
    <version>2.11.0</version>
  </dependency>
</dependencies>

新建一個log4j2.xml

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
    <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
        </Console>
    </Appenders>
    <Loggers>
        <Root level="TRACE">
            <AppenderRef ref="Console" />
        </Root>
    </Loggers>
</Configuration>

新建一個測試類

    Logger logger = LogManager.getLogger(LogManager.ROOT_LOGGER_NAME);
    logger.trace("trance level");
    logger.debug("debug level");
    logger.info("info level");
    logger.warn("warn level");
    logger.error("error level");
    logger.fatal("fatal level");

輸出結果

22:36:42.966 [main] TRACE  - trance level
22:36:42.968 [main] DEBUG  - debug level
22:36:42.969 [main] INFO   - info level
22:36:42.969 [main] WARN   - warn level
22:36:42.969 [main] ERROR  - error level
22:36:42.969 [main] FATAL  - fatal level

細節分析

首先 我們要明白日志的級別

日志級別從低到高分為TRACE < DEBUG < INFO < WARN < ERROR < FATAL,如果設置為WARN,則低於WARN的信息都不會輸出

Configuration

  • Configuration為根節點,有一個status屬性,這個屬性表示log4j2本身的日志信息打印級別

Appenders

建議大家去官網看看,現在支持很多種appender,並且官網上也有示例。

Console節點中的PatternLayout定義了輸出日志時的格式

  • %d{HH:mm:ss.SSS} 表示輸出到毫秒的時間

  • %t 輸出當前線程名稱

  • %-5level 輸出日志級別,-5表示左對齊並且固定輸出5個字符,如果不足在右邊補0

  • %logger 輸出logger名稱,因為Root Logger沒有名稱,所以沒有輸出

  • %msg 日志文本

  • %n 換行

其他的參數意義,大家遇到自行搜索

自定義Appender

我們發現這個log4j2是支持我們自定義的Appender的,很好的體現了開閉原則:對擴展支持,對修改關閉。再想想渣渣猿我自己寫的代碼,果然大神們寫的代碼還是很six的,這里不具體展開詳細介紹,我現在對這一塊也不是很熟悉

注意事項

大家最好結合阿里規約中日志的規約,大家自行查看。摘出其中一句話,供大家參考

大量地輸出無效日志,不利於系統性能提升,也不利於快速定位錯誤點。記錄日志時請
思考:這些日志真的有人看嗎?看到這條日志你能做什么?能不能給問題排查帶來好處?


免責聲明!

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



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