[英]Custom Logger message format Java LoggerFactory.getLogger(getClass())
I need to change standard log behavior, just replace \\n symbol by space. 我需要更改标准的日志行为,只需将\\ n符号替换为空格即可。 It is somehow possible to process the final message for logger globally?
是否可以以某种方式全局处理记录器的最终消息?
As one solution I did custom Appender, but I do not like type casting in this approach. 作为一种解决方案,我做了自定义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);
}
} }
It seems more right to create new PatternLayout for processing event message. 创建用于处理事件消息的新PatternLayout似乎更合适。 It can be used for console and fileappenders
它可以用于控制台和文件附加器
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";
}
}
}
} }
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.