自定义Logger消息格式Java LoggerFactory.getLogger(getClass())



我需要更改标准日志行为,只需用空格替换符号。是否有可能在全局范围内处理记录器的最终消息?

作为一种解决方案,我自定义了Appender,但我不喜欢这种方法中的类型转换。

public class NonPrettyFileAppender extends ConsoleAppender<ILoggingEvent> {
@Override
protected void writeOut(ILoggingEvent event) throws IOException {
    final String origMsg = event.getMessage();
    final String newMsg = origMsg.replace("n", " ");
    ((LoggingEvent) event).setMessage(newMsg);
    super.writeOut(event);
}

}

创建新的PatternLayout来处理事件消息似乎更合适。它可以用于控制台和文件附加程序

public class NonPrettyPatternEncoder extends PatternLayoutEncoderBase<ILoggingEvent> {
@Override
public void start() {
    PatternLayout patternLayout = new NonPrettyPatternLayout();
    patternLayout.setContext(context);
    patternLayout.setPattern(getPattern());
    patternLayout.setOutputPatternAsHeader(outputPatternAsHeader);
    patternLayout.start();
    this.layout = patternLayout;
    super.start();
}
public static class NonPrettyPatternLayout extends PatternLayout {
    @Override
    protected String writeLoopOnConverters(ILoggingEvent event) {
        if (event.getLevel() == Level.ERROR) {
            return super.writeLoopOnConverters(event);
        } else {
            return super.writeLoopOnConverters(event).replace("n", " ") + "n";
        }
    }
}

}

最新更新