日志配置logback


在選擇項目日志框架時,發現log4j的作者開發了新的日志框架,據說性能提高不少,那就選它了,不過,除了配置上有點不習慣外,最重要的一點 ,打印線程號這個功能依然沒有(打印線程名這個東西是在是個雞肋)。在log4j的時代,改寫PatternLayout 就可以實現打印線程號,參考另外一篇文章日志配置log4j 打印線程號 。但是最新版的logback貌似不支持改寫PatternLayout, 糾結,擱置一段時間后,是在受不了,繼續研究,翻閱N篇文檔,雖然沒有找到具體方法,但是受到了一些啟發,最終找到方法了,在此與大家分享。

  1. 在pom.xml中引入依賴(如果你的項目不是Maven的,祝福你)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    < dependency >
         < groupId >org.slf4j</ groupId >
         < artifactId >slf4j-api</ artifactId >
         < version >${slf4j.version}</ version >
    </ dependency >
    < dependency >
         < groupId >ch.qos.logback</ groupId >
         < artifactId >logback-classic</ artifactId >
         < version >1.0.13</ version >
    </ dependency >
    <!-- 代碼直接調用log4j會被橋接到slf4j -->
    < dependency >
         < groupId >org.slf4j</ groupId >
         < artifactId >log4j-over-slf4j</ artifactId >
         < version >${slf4j.version}</ version >
    </ dependency >

  2. 新建Encoder類和Converter類

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public class LogBackExEncoder extends PatternLayoutEncoder {
         static {
             PatternLayout.defaultConverterMap.put( "T" , ThreadNumConverter. class .getName());
             PatternLayout.defaultConverterMap.put( "threadNum" , ThreadNumConverter. class .getName());
         }
         @Override
         public void doEncode(ILoggingEvent event) throws IOException {
             super .doEncode(event);
         }
    }
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public class ThreadNumConverter extends ClassicConverter {
         /**
            * 當需要顯示線程ID的時候,返回當前調用線程的ID
            */
         @Override
         public String convert(ILoggingEvent event) {
             return String.valueOf(Thread.currentThread().getId());
         }
    }

  3. 在配置文件中調用自己的Encoder

    1
    2
    3
    4
    5
    6
    <!-- 控制台輸出 -->
    < appender name = "stdout" class = "ch.qos.logback.core.ConsoleAppender" >
       < encoder charset = "UTF-8" class = "ch.qos.logback.core.encoder.LogBackExEncoder" >
         < pattern >[APP_LOG] %date [%T] %-5level (%logger{80}.%method:%line - %msg%n</ pattern >
       </ encoder >
    </ appender >

    其中[%T] 就是用於打印線程號的

  4. 日志效果


    附上我的logback配置文件





附件列表

     


    免責聲明!

    本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



     
    粵ICP備18138465號   © 2018-2025 CODEPRJ.COM