我需要为日志创建一个文件,但我想为此文件指定两种不同的布局。我在某处读到声明两个写入同一文件的appender不建议,那怎么办呢?提前谢谢。
答案 0 :(得分:5)
这似乎是一件相当奇怪的事情,因为通常你会希望单个日志文件中的所有行都是相同的格式,既方便了眼球,又想要稍后对日志进行任何自动处理上。但是,如果你必须那么你说你不应该有两个不同的appender同时写入同一个文件。
解决方案可能是实现自定义Layout
,它可以检查日志事件,然后委托给两个(或更多)其他布局中的一个进行实际格式化
public class MultiLayout extends Layout {
private Layout layout1;
private Layout layout2;
public MultiLayout() {
layout1 = ....;
layout1.activateOptions();
layout2 = ....;
layout2.activateOptions();
}
public boolean ignoresThrowable() {
return layout1.ignoresThrowable();
}
public String format(LoggingEvent e) {
// choose the appropriate layout, e.g. based on logger name
if(e.getLoggerName().startsWith("com.example.")) {
return layout1.format(e);
} else {
return layout2.format(e);
}
}
}