# **[JAVA] log4j2框架參數檔設定** ###### tags: `log4j` `工作筆記` ### 前情提要 不管是使用`Flogger`、`Sl4j`、`jboss-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 ![20181218155518113](https://user-images.githubusercontent.com/42643506/211732888-a3a32c56-09ab-4980-b1d7-b29470d8718d.png) * name(可以不用):自訂這個設定檔名稱 * status:log4j2框架自身的輸出log等級,由層級低到高:TRACE < DEBUG < INFO < WARN < ERROR < FATAL,可以修改為其中任意層級。如果設定了ERROR等級,則TRACE、DEBUG、INFO、WARN就不會紀錄。 * properties(可以不用):可以存放一些下方設定檔需要帶入的參數值 ### Appenders ![20181218161812651](https://user-images.githubusercontent.com/42643506/211735605-2542875e-1527-4fde-a1b0-2ad5bb10eb12.png) 該元素有兩個必需屬性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元素級別具有繼承性。 ```yaml= 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 ```