log4j2知識點梳理

        log4j2很久以前就用過了,每次只是奉行「拿來主義」,對於其知識點沒有一個系統的瞭解,粗略的看了看官方文檔,整理了一下幾個關鍵的知識點。java

  • 依賴包

        log4j-core-xx.jar程序員

   log4j-api-xx.jarspring

  • log4j2與log4j1.x差異

  1. log4j2與log4j1.x不能兼容,所以不能無縫升級
  2. Log4j2.4及更高版本最低依賴Java 7,版本2.0-alpha1到2.3最低依賴Java 6。
  3. log4j2配置更簡潔,log4j2.4以後從新支持property配置,可是與log4j1.x不兼容
  4. 新增了JSON和YAML的配置方式,可是須要增長額外的依賴,不建議這種方式
  5. Log4j2.4開始,提供了編程配置的API
  • log4j2配置文件加載順序

  1. Log4j將檢查「log4j.configurationFile」系統屬性,若是設置,將嘗試使用與文件擴展名匹配的ConfigurationFactory加載配置。數據庫

  2. 若是未設置系統屬性,則ConfigurationFactory屬性將在classpath中查找log4j2-test.properties。編程

  3. 若是沒有找到這樣的文件,YAML ConfigurationFactory將在classpath中查找log4j2-test.yaml或log4j2-test.yml。json

  4. 若是沒有找到這樣的文件,JSON ConfigurationFactory將在classpath中查找log4j2-test.json或log4j2-test.jsn。api

  5. 若是找不到這樣的文件,XML ConfigurationFactory將在classpath中查找log4j2-test.xml。app

  6. 若是找不到測試文件,ConfigurationFactory屬性將在classpath上查找log4j2.properties。dom

  7. 若是找不到屬性文件,YAML ConfigurationFactory將在classpath上查找log4j2.yaml或log4j2.yml。測試

  8. 若是找不到YAML文件,JSON ConfigurationFactory將在classpath上查找log4j2.json或log4j2.jsn。

  9. 若是找不到JSON文件,XML ConfigurationFactory將嘗試在classpath上找到log4j2.xml(經常使用的配置)。

  10. 若是找不到配置文件,則將使用DefaultConfiguration。這將致使日誌記錄輸出轉到控制檯。

  • 日誌級別

  1. trace: 字面含義追蹤,能夠查看程序的一步步推動調用,分析源碼時,能夠放開,通常不用。

  2. debug: 調試開發時使用。

  3. info: 通常一些須要後臺監控的信息。

  4. warn: 有些信息不是錯誤信息,可是也要給程序員的一些提示。

  5. error: 錯誤信息。。

  6. fatal: 級別比較高了。重大錯誤。

    當日志級別設置爲某個值的時候,低於它的日誌信息將不會被輸出到appender中,只有高於設置的級別的信息會被輸出到appender中

  • 使用方式

 Logger logger = LogManager.getLogger(xx.class().getName());
  • 經常使用的配置

        配置示例:

        

<?xml version="1.0" encoding="UTF-8"?>

<Configuration>

    <!-- 定義日誌輸出目錄 -->

    <properties>

        <property name="LOG_HOME">${sys:catalina.base}/logs</property>

        <property name="LOG_FILE_NAME">manager</property>

    </properties>

    <Appenders>

        <Console name="Console" target="SYSTEM_OUT">

            <!-- 控制檯只輸出該level以上級別日誌 onMatch符合條件 onMismatch不合符條件-->

            <!--<ThresholdFilter level="debug" onMatch="ACCEPT" onMismatch="DENY"/>-->

            <!-- 定義日誌輸出格式 -->

            <PatternLayout pattern="%d %-5p [%c] (%F %L)- %m%n "/>

        </Console>

        <!-- name 聲明名稱  fileName 當前日誌名稱 -->

        <RollingRandomAccessFile name="fileLog" fileName="${LOG_HOME}/${LOG_FILE_NAME}.log"

                                 filePattern="${LOG_HOME}/${LOG_FILE_NAME}.%d{yyyy-MM-dd}.log">

            <PatternLayout pattern="%d %-5p [%c] (%F %L)- %m%n "/>

            <Policies>

                <TimeBasedTriggeringPolicy/>

                <SizeBasedTriggeringPolicy size="100MB"/>

            </Policies>

            <DefaultRolloverStrategy max="20"/>

        </RollingRandomAccessFile>

    </Appenders>

    <Loggers>

        <!--&lt;!&ndash; 聲明這些包輸出的日誌級別&ndash;&gt;

        <logger name="org.springframework" level="trace">

            <AppenderRef ref="Console"/>

        </logger>-->

        <!-- 數據庫操做單獨處理  級別trace 再fileLog輸出  additivity 解決重複輸出-->

        <logger name="com.test.mapper" level="debug" additivity="false">

            <AppenderRef ref="Console"/>

        </logger>

        <Root level="info">

            <!-- 控制檯-->

            <AppenderRef ref="Console"/>

            <!-- 日誌目錄 -->

            <AppenderRef ref="fileLog"/>

        </Root>

    </Loggers>

</Configuration>

     <appenders>

       標籤訂義日誌輸出位置的信息,內部能夠定義多種標籤如<Console><RollingRandomAccessFile>等來設定不一樣的輸入位置。幾個經常使用的appender標籤:

  1. ConsoleAppender:        將日誌輸出寫入System.out或System.err,默認寫入System.out

  2. FileAppender、 RollingFileAppender、RandomAccessFileAppender、 RollingRandomAccessFileAppender :將日誌寫入文件中,

  3. JDBCAppender和JPAAppender:寫入關係型數據庫中

  4. NoSQLAppender:使用內部輕量級提供程序接口將日誌事件寫入NoSQL數據庫。

  5. SMTPAppender: 發生特定日誌記錄事件時發送電子郵件,一般是錯誤或致命錯誤

 

     <loggers>

       定義了一些必要的logger,logger表明用於輸出日誌信息的具體對象

  1. <root>標籤:root標籤設置了一個默認的配置,當輸出對象沒有匹配的logger對象是,默認採用root配置

  2. 具體的<Logger>標籤在默認狀況下會繼承<root>的全部配置,固然也能夠自定義本身的配置,用於設定不一樣輸出對象

    Filters

     決定日誌事件可否被輸出。過濾條件有三個值:ACCEPT(接受), DENY(拒絕) or NEUTRAL(中立).

     log4j2規定了四個位置能夠設置filter:

  1. 上下文範圍的過濾器直接在配置,即Configuration根目錄下

  2. Logger標籤下

  3. 在一個appender元素。 這些過濾器能夠防止或致使事件由追加器處理。

  4. 在追加器引用元素中。 這些過濾器用於肯定記錄器是否應將事件路由到追加器。

    比較經常使用的Filter:ThresholdFilter

相關文章
相關標籤/搜索