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





    附件列表

    • 相关阅读:
      限制CPU个数
      delphi 不阻塞提示对话框
      快捷打开vnc 某个连接
      delphi ShellExecute 传递多个参数
      JS对JSON的操作总结 (转)
      Windows Server 2008 IIS下部署网站出现的问题
      SqlParameter序列化的问题
      求解,工作流点通过时,弹出窗口让用户录入审核意见
      oracle调度
      c# 多态
    • 原文地址:https://www.cnblogs.com/juforg/p/3488740.html
    Copyright © 2020-2023  润新知