# log4j1 升級到 log4j2 的實戰紀錄 [前情提要](https://hackmd.io/zGqT5FsGRtSZKdDwmyVIoQ) --- ## 本篇還有加入slf4j ### Step1: 替換掉相關的jar檔 **原本log4j1 的相關jar檔**  **要替換的log4j2 和 slf4j的相關jar檔**  log4j-slf4j-impl 的jar檔是用來實現log4j2 ### Step2: 修改呼叫logger相關的程式 **原本log4j1的 呼叫logger的寫法**  **改成用slf4j來呼叫logger的寫法** (前人都用了slf4j但卻不知道為啥沒寫)  ### Step3: 修改log4j.xml配置檔 **原本log4j1的相關設定檔**  **原本log4j1的xml配置**  ```xml=\ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"> <appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender"> <param name="Encoding" value="UTF-8"/> <param name="Threshold" value="debug"/> <param name="Target" value="System.out"/> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="[%t] %d{HH:mm:ss} %-5p %-20C{1} L:%-4L - %m%n"/> </layout> </appender> <appender name="FILE" class="org.apache.log4j.DailyRollingFileAppender"> <param name="Encoding" value="UTF-8"/> <param name="File" value="log/nia_interview_srv.log" /> <param name="DatePattern" value="'.'yyyyMMdd" /> <param name="Append" value="true" /> <param name="Threshold" value="DEBUG" /> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="[%-13.13t] %d{yyyyMMdd HH:mm:ss.SSS} %-5p %-20C{1} - %m%n" /> </layout> </appender> <logger name="inspector.online"> <level value="debug" /> <appender-ref ref="FILE" /> </logger> <logger name="org.apache.activemq"> <level value="info" /> <appender-ref ref="FILE" /> </logger> <logger name="org.springframework.transaction"> <level value="info" /> <appender-ref ref="FILE" /> </logger> <root> <level value="error" /> <appender-ref ref="CONSOLE" /> </root> </log4j:configuration> ``` --- **修改成log4j2的格式** ```xml=\ <?xml version="1.0" encoding="UTF-8" ?> <configuration> <appenders> <Console name="CONSOLE" target="SYSTEM_OUT"> <ThresholdFilter level="DEBUG" onMatch="ACCEPT" onMismatch="DENY" /> <PatternLayout pattern="[%t] %d{HH:mm:ss} %-5p %-20C{1} L:%-4L - %m%n" charset="UTF-8" /> </Console> <!-- 實現log4j1 的DailyRollingFileAppender --> <RollingFile name="FILE" fileName="log/nia_interview_srv.log" filePattern="log/%d{yyyyMMdd}_nia_interview_srv.log" append="true"> <ThresholdFilter level="DEBUG" onMatch="ACCEPT" onMismatch="DENY" /> <PatternLayout <PatternLayout pattern="[%-13.13t] %d{yyyyMMdd HH:mm:ss.SSS} %-5p %-20C{1} - %m%n" charset="UTF-8" /> <Policies> <TimeBasedTriggeringPolicy interval="1" /> </Policies> </RollingFile> </appenders> <loggers> <logger name="inspector.online" level="DEBUG" additivity="false"> <appender-ref ref="FILE" /> </logger> <logger name="org.apache.activemq" level="INFO" additivity="false"> <appender-ref ref="FILE" /> </logger> <logger name="org.springframework.transaction" level="INFO" additivity="false"> <appender-ref ref="FILE" /> </logger> <root level="ERROR"> <appender-ref ref="CONSOLE" /> </root> </loggers> </configuration> ``` **Tip1:** log4j2 不再用log4j.dtd,所以刪掉log4j.dtd檔 **Tip2:** log4j2 沒有DailyRollingFileAppender,所以要用RollingFile 搭配<TimeBasedTriggeringPolicy interval="1" /> 來實現 **Tip3:**<param name="Encoding" value="UTF-8"/>**改成在PatternLayout上面加上charset="UTF-8"** --- ### 修改完成 [log4j2配置檔參考資料 1: Pattern Layout詳細設置](https://www.jianshu.com/p/37ef7bc6d6eb) [log4j2配置檔參考資料 2: log4j1和log4j2兩者的比較](https://blog.csdn.net/u012060033/article/details/104150519) [log4j1 直接升 log4j2](https://blog.csdn.net/z69183787/article/details/74910675) ###### tags: `Java`
×
Sign in
Email
Password
Forgot password
or
Sign in via Google
Sign in via Facebook
Sign in via X(Twitter)
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
Continue with a different method
New to HackMD?
Sign up
By signing in, you agree to our
terms of service
.