我们是否可以在logback

时间:2018-02-16 01:21:28

标签: java logging logback logback-classic

我正在使用筛选appender,有时我的记录器名称可以在末尾添加一个特殊字符串。例如,我的记录器名称可以是:

  1. com.test.example
  2. com.test.example.#SPECIAL#
  3. 记录器只会遵循上述两种格式中的一种,loggerNameloggerName后跟"."后跟some string # } ,.使用此类记录器时,我的日志如下所示:

    1. 2018-02-15 16:46:04.583 INFO [main] com.test.example - Application started
    2. 2018-02-12 16:46:04.583 INFO [main] com.test.example.#SPECIAL# - Application started
    3. 有没有办法在将记录器名称提供给模式之前对其进行编辑。在实际记录消息之前,我希望摆脱记录器名称末尾的.#SPECIAL#。这就是我的appender当前设置为:

      <appender name="APPLICATION-FILE" class="ch.qos.logback.classic.sift.SiftingAppender">
      <discriminator class="com.tibco.bw.extensions.logback.LoggerNameDiscriminator"/>
      <sift>
          <appender name="FILE-${loggerName}" class="ch.qos.logback.core.rolling.RollingFileAppender">
              <file>../log/${loggerName}.log</file>
      
              <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
                  <fileNamePattern>../log/${loggerName}%i.log</fileNamePattern>
                  <minIndex>1</minIndex>
                  <maxIndex>20</maxIndex>
              </rollingPolicy>
      
              <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
                  <maxFileSize>10MB</maxFileSize>
              </triggeringPolicy>
      
              <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
                  <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%thread] %logger{36} - %msg%n</pattern>
              </encoder>
          </appender>
      </sift>
      

      我看到一个选项编写我自己的Layout类,它从记录器名称中删除最后一个.#..#。有没有办法仍然保持相同的模式,并仍然允许用户配置记录器的长度(在这种情况下,其设置为36)。

      我的布局类看起来像这样:

      public class MySampleLayout extends LayoutBase<ILoggingEvent> {
          public String doLayout(ILoggingEvent event) {
              StringBuffer sbuf = new StringBuffer(128);
              sbuf.append(event.getTimeStamp()); // how to keep the {yyyy-MM-dd HH:mm:ss.SSS} format?
              sbuf.append(" ");
              sbuf.append(event.getLevel());
              sbuf.append(" [");
              sbuf.append(event.getThreadName());
              sbuf.append("] ");
              String loggerName = event.getLoggerName();
              int poundIdx = loggerName.indexOf('#');
              loggerName = poundIdx > 0 ? loggerName.substring(0, poundIdx - 1) : loggerName;
              sbuf.append(loggerName);
              sbuf.append(" - ");
              sbuf.append(event.getFormattedMessage());
              sbuf.append(CoreConstants.LINE_SEP);
              return sbuf.toString();
          }
      }
      

      要使用此功能,我的appender的编码器部分将更改为:

      <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
            <layout class="com.example.MySampleLayout" />
      </encoder>
      

      如您所见,布局类将从记录器名称中删除#SPECIAL#。 有一个更好的方法吗?另外,有没有办法在logback文件中编辑记录器的长度?

      更新:我最终使用了一个简单的模式匹配器。我现在唯一要寻找的是能够在应用替换功能后缩写记录器。希望保持之前设置的36的相同缩写长度。这是我的编码器:

      <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
          <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%thread] %replace(%logger){'\.#.*#', ''} - %msg%n</pattern>
      </encoder>
      

0 个答案:

没有答案