Try   HackMD

[JAVA] log4j2框架參數檔設定

tags: log4j 工作筆記

前情提要

不管是使用FloggerSl4jjboss-logging等常見的框架套件,它們都是屬於interface的層級。
真正實踐的部分是 Log4j JUL(java.util.logging)或是 Log4j2 Logback
而Spring Boot官方推薦的是Sl4j+Log4j2 Logback的搭配。
以下就以log4j2.yml的設定檔來說明

log4j2.yml

log4j2.yml放在專案 src > main > resources 底下(與application.yml為同層)
整體組成為在Configuration元素下有0至N個appender元素,0至N個logger元素,0至1個root元素(最多只能一個)

Configuration

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →

  • name(可以不用):自訂這個設定檔名稱
  • status:log4j2框架自身的輸出log等級,由層級低到高:TRACE < DEBUG < INFO < WARN < ERROR < FATAL,可以修改為其中任意層級。如果設定了ERROR等級,則TRACE、DEBUG、INFO、WARN就不會紀錄。
  • properties(可以不用):可以存放一些下方設定檔需要帶入的參數值

Appenders

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →

該元素有兩個必需屬性name和class。 appender元素可以包含0至1個layout元素,0至N個encoder元素以及0至N個filter元素

  • name:指定該appender的名稱
  • class:指定要實例化的appender類的完全限定名稱。

這邊的範例有Console、File、RollingFile三的Appenders

Loggers

下方包含了0至N個logger元素,0至1個root元素

  • root:配置一個預設的紀錄等級。並以AppenderRef指定到對應的Appender
  • logger:只接受一個必需的name屬性,一個可選的level屬性和一個可選的additivity屬性,允許值為true或false。 level屬性的值允許一個不區分大小寫的字符串值TRACE,DEBUG,INFO,WARN,ERROR,ALL或OFF。特殊於大小寫不敏感的值INHERITED或其同義詞NULL將強制記錄器的級別從層次結構中的較高級別繼承,logger元素可以包含零個或多個appender-ref元素; 這樣引用的每個appender都被添加到指定的logger中,logger元素級別具有繼承性。
Configuration: name: Default status: warn Properties: Property: <!-- 設定log存放的路徑的name和value --> name: log-path value: ${env:LOG4J2_LOG_PATH:-d:/Batch/log/SFTP_WATCHER} Appenders: Console: <!-- 設定控制台appender的名字 --> name: CONSOLE <!-- 設定Console的Log要如何處置,這邊是直接顯示印出 --> target: SYSTEM_OUT PatternLayout: disableAnsi: ${env:LOG4J2_DISABLE_ANSI:-false} <!-- 設定Log輸出的樣式 --> Pattern: '%d{HH:mm:ss.SSS} [%highlight{%thread}{MAGENTA blink}] %highlight{%-5level}{FATAL=red blink, ERROR=red, WARN=red} %highlight{%logger{36}}{FATAL=red blink, ERROR=red, WARN=red} - %msg%throwable%n' File: <!-- 設定檔案appender名字 --> name: APPLICATION <!-- 設定輸出檔案的路徑及檔案名 --> fileName: ${log-path}/smas.log <!-- true表示訊息增加到指定文件中,false則將訊息覆蓋指定的文件內容,預設值是true。--> append: false PatternLayout: <!-- 設定Log輸出的樣式 --> Pattern: '%d{yyyy-MM-dd-HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%throwable{10}%n' RollingFile: <!-- 按照一定規則拆分的Log檔案的appender,這邊以1.每日日期 2.檔案大小>10MB 做切割--> - name: RollingFile_Appender fileName: ${log-path}/smas-rollingfile.log filePattern: ${log-path}/smas-rollingfile-%d{yyyy-MM-dd}-%i.log PatternLayout: pattern: '%d{yyyy-MM-dd-HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%throwable%n' Policies: TimeBasedTriggeringPolicy: interval: 1 modulate: true SizeBasedTriggeringPolicy: size: 10 MB <!-- 刪除規則,這邊設定為保留7日內log--> DefaultRollOverStrategy: Delete: basePath: ${log-path} maxDepth: 2 IfFileName: glob: '*.log' IfLastModified: age: 7d Loggers: Root: level: info AppenderRef: - ref: CONSOLE - ref: APPLICATION Logger: - name: java level: warn - name: javax level: warn - name: org level: warn - name: com level: info - name: com.MyCompany level: debug - name: org.springframework level: info - name: org.springframework.core level: info - name: org.springframework.context level: info - name: org.springframework.context.i18n level: info - name: org.springframework.security.ldap level: info - name: org.springframework.orm.jpa level: info - name: org.springframework.orm.jpa.JpaTransactionManager level: debug - name: org.springframework.transaction level: info - name: org.springframework.security.oauth2 level: info - name: org.hibernate level: info - name: org.flywaydb.core.internal.scanner level: debug - name: p6spy additivity: true level: warn