log4j2使用和配置解析xml,yml

  • log4j2的優勢

在異步,吞吐量等方面有極大的性能提升,Log4j2的性能爲什麼這麼好https://www.jianshu.com/p/359b14067b9e

  • maven

<!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-api -->
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-api</artifactId>
    <version>2.11.1</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.12.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-slf4j-impl -->
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-slf4j-impl</artifactId>
    <version>2.11.1</version>
    <scope>test</scope>
</dependency>

  • gradle

compile 'org.apache.logging.log4j:log4j-api:2.11.1'
compile 'org.apache.logging.log4j:log4j-core:2.11.1'
compile "org.apache.logging.log4j:log4j-slf4j-impl:2.11.1"

  • log4j與slf4j的關係

slf4j是日誌框架的標準接口之一,log4j是它的一個實現。面向接口編程,告訴我們使用具體的日誌系統,不方便升級換代,引入的jar中的日誌系統還可能不一樣,
無法使用,所以需要一個統一的日誌接口,可以兼容各類日誌系統。那就是slf4j。

slf4j提供接口,供用戶使用。但不提供實現,用戶要在自己的項目中進行選擇配置
期望的日誌系統。只要引入的jar中都使用slf4j,那麼就不會出現兼容問題。

具體使用方法是,在slf4j和具體的日誌系統中間使用橋接,實現slf4j的spi接口,同時
使用具體的日誌系統。

詳細請參考https://www.jianshu.com/p/370ed25cb7c4

  • Log2j配置文件

Log4j2支持多種配置文件,XML、JSON、YAML和perperties文件都支持,當然最常用的還是XML文件。將配置文件放在類路徑下即可,如果使用Maven或者Gradle的話,就是在resources文件夾下。

  • xml格式

  • <?xml version="1.0" encoding="UTF-8"?>
    <configuration status="WARN" monitorInterval="30">
    	<!-- appeenders自定義log控制的標籤 -->
        <appenders>
    		<!-- 輸出到控制檯的配置 -->
            <console name="Console" target="SYSTEM_OUT">
    			<!-- 日誌輸出的格式 -->
                <PatternLayout pattern="[%d{yyyy-MM-dd HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
            </console>
    		<!--文件回打印出所有的信息,這個log每次運行回自動清空,由append屬性決定,適合臨時測試使用
    			append爲TRUE表示消息增加到指定文件中,false表示 消息覆蓋指定的文件內容,默認是TRUE-->
            <File name="log" fileName="./logs/test.log" append="false">
                <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/>
            </File>
    		<!--產生一個新的log文件 filePattern指定在文件超過指定size的時候的備份路徑 -->
            <RollingFile name="RollingFileInfo" fileName="./logs/info.log"
                         filePattern="./logs/backups/$${date:yyyy-MM}/info-%d{yyyy-MM-dd}-%i.log.gz">
    			<!-- 指定log輸出的最低優先級 -->		 
                <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
                <PatternLayout pattern="[%d{yyyy-MM-dd HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
                <Policies>
                    <TimeBasedTriggeringPolicy/>
    				<!-- 日誌的size-->
                    <SizeBasedTriggeringPolicy size="5 MB"/>
                </Policies>
            </RollingFile>
            <RollingFile name="RollingFileWarn" fileName="./logs/warn.log"
                         filePattern="./logs/backups/$${date:yyyy-MM}/warn-%d{yyyy-MM-dd}-%i.log">
                <ThresholdFilter level="warn" onMatch="ACCEPT" onMismatch="DENY"/>
                <PatternLayout pattern="[%d{yyyy-MM-dd HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
                <Policies>
                    <TimeBasedTriggeringPolicy/>
                    <SizeBasedTriggeringPolicy size="5 MB"/>
                </Policies>
                <DefaultRolloverStrategy max="20"/>
            </RollingFile>
            <RollingFile name="RollingFileError" fileName="./logs/error.log"
                         filePattern="./logs/backups/$${date:yyyy-MM}/error-%d{yyyy-MM-dd}-%i.log">
                <ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/>
                <PatternLayout pattern="[%d{yyyy-MM-dd HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
                <Policies>
                    <TimeBasedTriggeringPolicy/>
                    <SizeBasedTriggeringPolicy size="5 MB"/>
                </Policies>
            </RollingFile>
        </appenders>
    	<!-- log的記錄器 建立要給默認的logger-->
        <loggers>
            <root level="all">
                <appender-ref ref="Console"/>
                <appender-ref ref="RollingFileInfo"/>
                <appender-ref ref="RollingFileWarn"/>
                <appender-ref ref="RollingFileError"/>
            </root>
        </loggers>
    </configuration>

     

  • Yaml格式

如果要使用yaml格式則需要在引入jar包

maven:

<dependency>
    <groupId>com.fasterxml.jackson.dataformat</groupId>
    <artifactId>jackson-dataformat-yaml</artifactId>
    <version>2.10.1</version>
</dependency>

gradle:
compile group: 'com.fasterxml.jackson.dataformat', name: 'jackson-dataformat-yaml', version: '2.10.1'

Configuration:
  Properties:
    Property:
      - name: log-path
        value: "logs"
      - name: charset
        value: "UTF-8"
      - name: compact
        value: false
      - name: eventEol
        value: true
      - name: kafka-topic
        value: neuralyzer
      - name: bootstrap-servers
        value: 127.0.0.1:9092
      - name: complete
        value: false
      - name: stacktraceAsString
        value: true
      - name: log.pattern
        value: "%d{yyyy-MM-dd HH:mm:ss.SSS} -%5p ${PID:-} [%X{tracking_id}] [%15.15t] %-30.30C{1.} : %m%n"

  Appenders:
    Console:
      name: CONSOLE
      target: SYSTEM_OUT
      PatternLayout:
        pattern: ${log.pattern}

    RollingFile:
      - name: REQUEST_LOG
        fileName: ${log-path}/request.log
        filePattern: "${log-path}/historyLog/info-%d{yyyy-MM-dd}-%i.log.gz"
        Filters:
          ThresholdFilter:
            - level: error
              onMatch: DENY
              onMismatch: NEUTRAL
            - level: warn
              onMatch: DENY
              onMismatch: NEUTRAL
            - level: info
              onMatch: ACCEPT
              onMismatch: DENY
        JsonLayout:
          - charset: ${charset}
            compact: ${compact}
            complete: ${complete}
            stacktraceAsString: ${stacktraceAsString}
            eventEol: ${eventEol}
            properties: true
            KeyValuePair:
              - key: tags
                value: REQUEST_LOG
        Policies:
          TimeBasedTriggeringPolicy:
            interval: 1
            modulate: true
        DefaultRolloverStrategy:
          max: 100
      - name: SERVICE_LOG
        fileName: ${log-path}/service.log
        filePattern: "${log-path}/historyLog/service-%d{yyyy-MM-dd}-%i.log.gz"
        Filters:
          ThresholdFilter:
            - level: error
              onMatch: DENY
              onMismatch: NEUTRAL
            - level: info
              onMatch: ACCEPT
              onMismatch: DENY
        JsonLayout:
          - charset: ${charset}
            compact: ${compact}
            complete: ${complete}
            stacktraceAsString: ${stacktraceAsString}
            eventEol: ${eventEol}
            properties: true
            objectMessageAsJsonObject: true
            KeyValuePair:
              - key: tags
                value: SERVICE_LOG
        Policies:
          TimeBasedTriggeringPolicy:
            interval: 1
            modulate: true
        DefaultRolloverStrategy:
          max: 100
      - name: ERROR_LOG
        fileName: ${log-path}/error.log
        filePattern: "${log-path}/historyLog/error-%d{yyyy-MM-dd}-%i.log.gz"
        Filters:
          ThresholdFilter:
            - level: error
              onMatch: ACCEPT
              onMismatch: DENY
        JsonLayout:
          - charset: ${charset}
            compact: ${compact}
            complete: ${complete}
            stacktraceAsString: ${stacktraceAsString}
            eventEol: ${eventEol}
            properties: true
            KeyValuePair:
              - key: tags
                value: ERROR_LOG
        Policies:
          TimeBasedTriggeringPolicy:
            interval: 1
            modulate: true
        DefaultRolloverStrategy:
          max: 100
    #    RollingFile:
    #      - name: REQUEST_LOG
    #        fileName: ${log-path}/request.log
    #        filePattern: "${log-path}/historyLog/info-%d{yyyy-MM-dd}-%i.log.gz"
    #        PatternLayout:
    #          charset: ${charset}
    #          pattern: ${log.pattern}
    #        Filters:
    #          ThresholdFilter:
    #            - level: error
    #              onMatch: DENY
    #              onMismatch: NEUTRAL
    #            - level: warn
    #              onMatch: DENY
    #              onMismatch: NEUTRAL
    #            - level: debug
    #              onMatch: ACCEPT
    #              onMismatch: DENY
    #        Policies:
    #          TimeBasedTriggeringPolicy:
    #            interval: 1
    #            modulate: true
    #        DefaultRolloverStrategy:
    #          max: 100
    #      - name: SERVICE_LOG
    #        fileName: ${log-path}/service.log
    #        filePattern: "${log-path}/historyLog/service-%d{yyyy-MM-dd}-%i.log.gz"
    #        PatternLayout:
    #          charset: ${charset}
    #          pattern: ${log.pattern}
    #        Filters:
    #          ThresholdFilter:
    #            - level: info
    #              onMatch: ACCEPT
    #              onMismatch: DENY
    #        Policies:
    #          TimeBasedTriggeringPolicy:
    #            interval: 1
    #            modulate: true
    #        DefaultRolloverStrategy:
    #          max: 100
    #      - name: ERROR_LOG
    #        fileName: ${log-path}/error.log
    #        filePattern: "${log-path}/historyLog/error-%d{yyyy-MM-dd}-%i.log.gz"
    #        PatternLayout:
    #          charset: ${charset}
    #          pattern: ${log.pattern}
    #        Filters:
    #          ThresholdFilter:
    #            - level: error
    #              onMatch: ACCEPT
    #              onMismatch: DENY
    #        Policies:
    #          TimeBasedTriggeringPolicy:
    #            interval: 1
    #            modulate: true
    #        DefaultRolloverStrategy:
    #          max: 100
    Kafka:
      - name: KAFKA_REQUEST_LOG
        topic: ${kafka-topic}
        Property:
          name: bootstrap.servers
          value: ${bootstrap-servers}
        Filters:
          ThresholdFilter:
            - level: error
              onMatch: DENY
              onMismatch: NEUTRAL
            - level: warn
              onMatch: DENY
              onMismatch: NEUTRAL
            - level: info
              onMatch: ACCEPT
              onMismatch: DENY
        JsonLayout:
          - charset: ${charset}
            compact: ${compact}
            complete: ${complete}
            stacktraceAsString: ${stacktraceAsString}
            eventEol: ${eventEol}
            properties: true
            KeyValuePair:
              - key: tags
                value: INFO_LOG
      - name: KAFKA_SERVICE_LOG
        topic: ${kafka-topic}
        Property:
          name: bootstrap.servers
          value: ${bootstrap-servers}
        Filters:
          ThresholdFilter:
            - level: error
              onMatch: DENY
              onMismatch: NEUTRAL
            - level: info
              onMatch: ACCEPT
              onMismatch: DENY
        JsonLayout:
          - charset: ${charset}
            compact: ${compact}
            complete: ${complete}
            stacktraceAsString: ${stacktraceAsString}
            eventEol: ${eventEol}
            properties: true
            objectMessageAsJsonObject: true
            KeyValuePair:
              - key: tags
                value: SERVICE_LOG
      - name: KAFKA_ERROR_LOG
        topic: ${kafka-topic}
        Property:
          name: bootstrap.servers
          value: ${bootstrap-servers}
        Filters:
          ThresholdFilter:
            - level: error
              onMatch: ACCEPT
              onMismatch: DENY
        JsonLayout:
          - charset: ${charset}
            compact: ${compact}
            complete: ${complete}
            stacktraceAsString: ${stacktraceAsString}
            eventEol: ${eventEol}
            properties: true
            KeyValuePair:
              - key: tags
                value: ERROR_LOG
  Loggers:
    AsyncRoot:
      level: debug
      #      add location in async
      includeLocation: true
      AppenderRef:
        - ref: CONSOLE
    AsyncLogger:
      - name: REQUEST_LOG
        AppenderRef:
          - ref: REQUEST_LOG
      - name: SERVICE_LOG
        AppenderRef:
          - ref: SERVICE_LOG
      - name: ERROR_LOG
        AppenderRef:
          - ref: ERROR_LOG

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章