3

我需要为日志提供一个文件,但我想为该文件指定两种不同的布局。我在某处读到不建议声明两个写入相同文件的附加程序,那怎么办?提前致谢。

4

1 回答 1

5

这似乎是一件很奇怪的事情,因为通常您希望单个日志文件中的所有行都具有相同的格式,这既是为了便于观察,又是为了以后对日志进行任何自动处理。但是如果你必须那么你说你不应该有两个不同的附加程序同时写入同一个文件是正确的。

解决方案可能是实现一个自定义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);
    }
  }

}
于 2013-07-01T09:49:19.767 回答