我正在使用筛选appender,有时我的记录器名称可以在末尾添加一个特殊字符串。例如,我的记录器名称可以是:
com.test.example
或com.test.example.#SPECIAL#
记录器只会遵循上述两种格式中的一种,loggerName
或loggerName
后跟"."
后跟some string
#
} ,.使用此类记录器时,我的日志如下所示:
2018-02-15 16:46:04.583 INFO [main] com.test.example - Application started
或2018-02-12 16:46:04.583 INFO [main] com.test.example.#SPECIAL# - Application started
有没有办法在将记录器名称提供给模式之前对其进行编辑。在实际记录消息之前,我希望摆脱记录器名称末尾的.#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>