我正在使用筛选附加程序,有时我的记录器名称可以在最后附加一个特殊字符串的字符串。例如,我的记录器名称可能是:
com.test.example
或者com.test.example.#SPECIAL#
记录器只会遵循上述两种格式中的一种,其中它要么是 theloggerName
要么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 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>