0

I need to change standard log behavior, just replace \n symbol by space. 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.

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);
}

}

ekitru
  • 172
  • 1
  • 5
  • 16

1 Answers1

0

It seems more right to create new PatternLayout for processing event message. 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";
        }
    }
}

}

ekitru
  • 172
  • 1
  • 5
  • 16