【转】日志配置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配置文件

猜你喜欢

转载自blog.csdn.net/goldtoad/article/details/79496301