每 N 行 log4j header

标签 log4j

我需要在日志的每 N 行添加一个 log4j 页眉和页脚。我知道如何通过覆盖 PatternLayout 类的 getHeader()/getFooter() 方法来指定 log4j 页眉/页脚。但是,这似乎仅限于在每个滚动日志文件(在我的例子中是每天)中仅包含一次页眉/页脚(顶部/底部)。

谢谢!

最佳答案

继承布局类是不够的。如果您还创建自己的 appender 子类,我认为在您的情况下为 RollingFileAppender,那将会起作用。您可以覆盖 append() 方法,以便它计算写入文件的行数(实际上是写入的记录),然后根据行数调用 writeHeader()/writeFooter()。

以下实现允许您通过 headerFrequency 属性设置将 header 写入配置文件的频率:

public class MyRollingFileAppender extends RollingFileAppender {
  // number of lines after which the header is written
  private int headerFrequency = -1;
  // Count of lines written by the appender
  private int nbLines = 0;

  @Override
  public void append(final LoggingEvent event) {
    super.append(event);
    nbLines++;
    if ((headerFrequency > 0) &&
        (nbLines % headerFrequency == 0)) {
      writeHeader();
    }
  }

  public int getHeaderFrequency() {
    return headerFrequency;
  }

  public void setHeaderFrequency(final int headerFrequency) {
    this.headerFrequency = headerFrequency;
  }
}

布局的以下实现允许您在 log4j 配置文件中实际设置 header 文本:

public class MyLayout extends PatternLayout {
  // The header
  private String header = null;

  @Override
  public String getHeader() {
    return header;
  }

  public void setHeader(String header) {
    this.header = header;
  }
}

然后您可以在 log4j 配置中使用它,如下所示:

log4j.appender.CUSTOM=test.MyRollingFileAppender
log4j.appender.CUSTOM.HeaderFrequency=100
... other appender properties ...
log4j.appender.CUSTOM.layout=test.MyLayout
log4j.appender.CUSTOM.layout.Header=***** This is my header *****\n
... other layout properties ...

log4j.rootLogger=INFO, CUSTOM

关于每 N 行 log4j header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22161268/

相关文章:

java - 查找丢失异常堆栈跟踪的日志语句

java - Junit测试如何读取日志文件

java - 在 log4j 中过滤子类

hadoop - 无法使用hbase-shaded-client jar,因为其内部依赖于log4j-1.2.17(CVE-2019-1757)

java - log4j:WARN 请正确初始化 log4j 系统

grails - 使用 grails.config.locations 在 Grails 生产环境中配置 Log4j

java - 奇怪的 log4j 声明

apache-spark - 如何在 Windows 上以独立模式设置 Spark log4j 路径?

java - 自定义输出log4j

java - 使用log4j实例创建slf4j Logger