如何使用具有自定义标头的log4j制作日志?

时间:2018-07-06 05:51:34

标签: java logging log4j

我正在使用具有以下格式的log4j制作日志文件: x,x,x,x x,x x,x,x X 数量 数量 数量 数量 。 。

要放置标题(即包含x的前4行),我扩展了PatternLayout类并覆盖了getHeader()方法。 getHeader代码如下:

@Override
public String getHeader(){
    return FIRST_LINE + SECOND_LINE + THIRD_LINE + FOURTH_LINE;
}

我将应用程序托管在weblogic服务器上。 问题是,每当我重新启动服务器时,标头都会被附加。 另一个问题是,当我在重新启动后点击第一个请求时,标头再次被追加:

“重新启动后的标题” “第一个请求后的标题”

任何人都可以建议我如何解决此问题或任何其他替代方法,以使同一报告具有4个标头行和这些标头后面的其他动态值?

1 个答案:

答案 0 :(得分:0)

我终于找到了解决这个问题的方法。 我们将重写getHeader()方法,仅在需要时才返回标头。 我使用了以下方法:

  1. 检查日志文件的第一行是否为空。
  2. 如果日志文件中没有第一行,则只有从getHeader()方法返回标头。

您可以使用以下代码解决此问题:

 @Override
public String getHeader () {
    try (BufferedReader br = new BufferedReader (new FileReader (fileName)) {

        String line = br.readLine ();
        if (line != null)
            return null;

    } catch (IOException e) {
        e.printStackTrace ();
    }

    return FIRST_LINE + SECOND_LINE + THIRD_LINE + FOURTH_LINE;
}

请注意,这段代码只会检查文件的第一行,而不是整个文件。