日志配置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