0

我有一个使用 log4j 日志框架的 Java 应用程序。在我的应用程序中,我有几个模块,每个模块都创建自己的日志文件。我通过命令行启动我的应用程序,传递一个参数来告诉我的应用程序应该运行哪个模块。假设我有 3 个模块,所以每次启动一个模块时,都会创建所有 3 个日志文件,但只有一个包含信息(我刚刚启动的模块中的那个)。我已将每个 File Appender 设置为

...append = false

这样每次我启动我的应用程序时,我都会有没有旧日志数据的新日志文件。

现在我有一个创建流程链的批处理文件,因此在批处理文件中,所有 3 个模块都在另一个之后被调用。但问题是:最后,前 2 个模块的日志文件是空的,只有最后一个模块将其日志存储在正确的日志文件中(当然这必须是这样,因为我将 append 选项设置为每个文件追加器)

我正在寻找以下解决方案:当我启动一个模块时,我想检查该模块的日志文件是否为空。如果是,那么我只需将日志记录数据附加到此文件中。如果文件中已经有数据,我想删除内容以存储当前的日志记录数据。所以最后当我调用所有 3 个模块(每次使用不同的参数启动应用程序 3 次)时,我希望填充所有 3 个日志文件。有任何想法吗?

4

2 回答 2

0

如果我理解正确,那么 RollingFileAppender 将为每个模块创建 3 个日志文件(假设我启动 3 个模块)所以假设我有以下模块,括号中包含适当的日志文件:

Module 1: -import (import.log)
Module 2: -parsing (parsing.log)
Module 3: -deletion (deletion.log)

启动 modul 1 后,我将拥有以下文件 + 它们的大小:

import.log (size >0)
parsing.log (empty)
deletion.log (empty)

目前在启动第二个模块后,我将拥有:

import.log (empty)
parsing.log (size >0)
deletion.log (empty)

当我使用 RollingFileAppender 时,我会在启动第二个模块后得到以下内容:

import1.log (empty)
import.log (size >0)
parsing1.log (empty)
parsing.log (size >0)
deletion.log (empty)

但是在启动可用的 3 个模块中的 2 个后,我想拥有以下内容

import.log (size >0)
parsing.log (size >0)
deletion.log (empty)
于 2012-08-23T11:49:35.403 回答
0

每次运行程序模块时,您想要的是一个全新的日志文件。

您是否考虑过使用RollingFileAppender?在您在程序开始时RollingFileAppender使用的设置之后创建一个新的日志文件。appender.rollOver();您可以配置保留许多旧日志文件,而appender.setMaxBackupIndex(int)任何旧日志文件都将被删除。这将文件的管理委托给框架。

另一种方法是使用DailyRollingFileAppender。您可以配置文件翻转的时间间隔。

于 2012-08-23T11:11:37.107 回答