步入職場,才首次對“日志”這個東西有了一個比較全面的認識。不像學生時代,隨處的print語句,學校總是教不了什么有用的東西。
最近從事的工作,恰好是將工程中原有的log4j日志組件轉換為logback。至於為什么要轉換,本來是因為logback的性能要優於log4j,然而最新版本的log4j的降臨,似乎又把這段差距彌補了。總之分配的任務就要用心做,並且還能從中學好很多有用的東西。下面,我就介紹一下log4j轉換logback的方法,可能遇到的問題及解決方案。其中涉及到的jar包會在最后給出下載鏈接。
log4j切換到logback的步驟:
1.將logback-classic和logback-core的jar包引入到工程,將有關log4j的jar包從工程的classpath中移除。
2.確認工程引入了slf4j的jar包,作為日志的適配。
3.在工程中新建logback.xml文件,利用轉換工具(地址:http://logback.qos.ch/translator/),將原來log4j配置文件(log4j.properties)的內容拷貝到轉換工具中,轉換為logback的對應配置,然后將轉換后的內容存入logback.xml。
4.完成上述轉換后,因為參數含義不同,要修改一些細微的地方:
配置內容 |
logback |
log4j |
%c{} |
{0}打印類名,例:MyLog {n}打印類名和包名的首字母,例:c.b.u.MyLog |
{0}打印全路徑類名,例:com.bs3.utils.MyLog {1}打印類名,例:MyLog {2}打印類名和上一層包名,例;utils.MyLog {n}依此類推 |
日志文件名稱樣式 |
<File>log/rpt.log</File> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>log/rpt.log.%d{yyyyMMddHH}</fileNamePattern> </rollingPolicy> <!-- 去掉了'.' --> |
log4j.appender.RPT.File = log/rpt.log log4j.appender.RPT.DatePattern ='.'yyyyMMdd |
5.將工程中,由於缺失了log4j.jar引起的錯誤進行修正,改為利用logback實現。
可能遇到的問題及解決方案:
1.Log4j轉換到logback后,運行后spring的日志都以紅字輸出到控制台,而不受logback控制。
因為Spring的日志默認采用commons-logging,解決方法是在工程中引入jcl-over-slf4j-1.6.1.jar,這樣就將commons-logging與slf4j對接,再通過logback進行了日志的統一輸出。
2.切換完成后,啟動工程時會出現java.lang.IllegalAccessError: tried to access field org.slf4j.impl.StaticLoggerBinder.SINGLETON from class org.slf4j.LoggerFactory這個錯誤。
原因是slf4j-api的jar包版本太低,改為slf4j-api-1.6.4.jar即可解決。
涉及到的jar包,下載鏈接:
http://pan.baidu.com/share/link?shareid=475873&uk=152821134