# log4j1 升級到 log4j2 的實戰紀錄 [前情提要](https://hackmd.io/zGqT5FsGRtSZKdDwmyVIoQ) --- ## 本篇還有加入slf4j ### Step1: 替換掉相關的jar檔 **原本log4j1 的相關jar檔** ![](https://i.imgur.com/tgxRVlR.jpg) **要替換的log4j2 和 slf4j的相關jar檔** ![](https://i.imgur.com/NPhrDyc.jpg) log4j-slf4j-impl 的jar檔是用來實現log4j2 ### Step2: 修改呼叫logger相關的程式 **原本log4j1的 呼叫logger的寫法** ![](https://i.imgur.com/vC7FOZk.jpg) **改成用slf4j來呼叫logger的寫法** (前人都用了slf4j但卻不知道為啥沒寫) ![](https://i.imgur.com/mjzFEBD.jpg) ### Step3: 修改log4j.xml配置檔 **原本log4j1的相關設定檔** ![](https://i.imgur.com/MmWipIV.jpg) **原本log4j1的xml配置** ![](https://i.imgur.com/ngBxctB.jpg) ```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`