简体   繁体   English

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

[英]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.

相关问题 LoggerFactory.getLogger(ClassName.class) vs LoggerFactory.getLogger(this.getClass().getName()) - LoggerFactory.getLogger(ClassName.class) vs LoggerFactory.getLogger(this.getClass().getName()) Slf4j LoggerFactory.getLogger和声纳 - Slf4j LoggerFactory.getLogger and sonarqube SessionBean 上的实例 LoggerFactory.getLogger 上的 StackOverFlowError - StackOverFlowError on instance LoggerFactory.getLogger on a SessionBean LoggerFactory.getLogger“root”与“class”名称的区别是什么? - What the difference in LoggerFactory.getLogger “root” vs “class” name? 为什么不建议每次都调用LoggerFactory.getLogger(...)? - Why calling LoggerFactory.getLogger(…) every time is not recommended? SLF4J,避免每次都写 LoggerFactory.getLogger(MyClassName.class) - SLF4J, To avoid writing LoggerFactory.getLogger(MyClassName.class) every time LoggerFactory不能getLogger - LoggerFactory cannot getLogger 通过LogManger.getLogger()获取自定义记录器 - Get custom logger through LogManger.getLogger() Java-从其他jar从Logger.getLogger()获取自定义LogManager? - Java - get custom LogManager from Logger.getLogger() from other jar? 错误:从Spring 1.5.9升级到2.0.1后找不到符号Logger logger = Logger.getLogger(this.getClass()。getName()) - error: cannot find symbol Logger logger = Logger.getLogger(this.getClass().getName()) after Spring 1.5.9 upgrade to 2.0.1
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM