Java 如何为多行日志输出添加缩进

Java 如何为多行日志输出添加缩进,java,logback,Java,Logback,我不认为,我是第一个想要它的人,但我找不到它的配置 典型的logback日志输出如下所示: 2021-01-07 13:26:04639[MyThread]错误[]one.of.my.Classes-一些不错的错误消息:java.lang.RuntimeException java.lang.RuntimeException:null 在一个.of.my.Classes.method0(类:123) 在我的班级中的一个班级里。方法2(班级:33) ... 原因:foo.bar.AnotherEx

我不认为,我是第一个想要它的人,但我找不到它的配置

典型的logback日志输出如下所示:

2021-01-07 13:26:04639[MyThread]错误[]one.of.my.Classes-一些不错的错误消息:java.lang.RuntimeException
java.lang.RuntimeException:null
在一个.of.my.Classes.method0(类:123)
在我的班级中的一个班级里。方法2(班级:33)
...
原因:foo.bar.AnotherException:Blah
在one.of.my.other.Clazz(Foo.java:693)
...
2021-01-07 13:26:04639[MyThread]信息[]one.of.my.Classes-多行信息消息
第二线
第三行
2021-01-07 13:26:04639[MyThread]信息[]其他一些输出
为了使输出更易于阅读,也更易于日志解析器处理,我想为属于另一行的行添加缩进,例如:

2021-01-07 13:26:04639[MyThread]错误[]one.of.my.Classes-一些不错的错误消息:java.lang.RuntimeException
java.lang.RuntimeException:null
在一个.of.my.Classes.method0(类:123)
在我的班级中的一个班级里。方法2(班级:33)
...
原因:foo.bar.AnotherException:Blah
在one.of.my.other.Clazz(Foo.java:693)
...
2021-01-07 13:26:04639[MyThread]信息[]one.of.my.Classes-多行信息消息
第二线
第三行
2021-01-07 13:26:04639[MyThread]信息[]其他一些输出

那么,如何使用logback实现这一点呢?

您可以为记录器实现自己的自定义

布局是负责将传入事件转换为字符串的logback组件

如何处理日志消息取决于您。简单的例子:

public class MyLayout extends LayoutBase<ILoggingEvent> {
    
    @Override
    public String doLayout(ILoggingEvent event) {
        StringBuffer sbuf = new StringBuffer(128);
        sbuf.append(event.getTimeStamp() - event.getLoggerContextVO().getBirthTime());
        sbuf.append(" ");
        sbuf.append(event.getLevel());
        sbuf.append(event.getLoggerName());
        sbuf.append(" - ");
        //few indentations for a new line
        sbuf.append(event.getFormattedMessage().replaceAll("\n", "\n  ")); 
        sbuf.append(CoreConstants.LINE_SEPARATOR);
        return sbuf.toString();
    }
}
公共类MyLayout扩展了LayoutBase{
@凌驾
公共字符串布局(ILOGINGEVENT事件){
StringBuffer sbuf=新的StringBuffer(128);
追加(event.getTimeStamp()-event.getLoggerContextVO().getBirthTime());
sbuf.追加(“”);
追加(event.getLevel());
追加(event.getLoggerName());
sbuf.追加(“-”);
//新行的几个缩进
追加(event.getFormattedMessage().replaceAll(“\n”,“\n”);
sbuf.append(CoreConstants.LINE_分隔符);
返回sbuf.toString();
}
}
logback.xml


<configuration>

    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
            <layout class="com.log.test.layout.MyLayout" />
        </encoder>
    </appender>

    <root level="info">
        <appender-ref ref="CONSOLE"/>
    </root>

</configuration>