以编程方式从Log4J FileAppender访问文件

时间:2012-08-23 09:25:45

标签: java file log4j appender

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

...append = false

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

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

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

2 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分:0)

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

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

启动模块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)

但是我希望在启动2个可用的3个模块之后有以下内容

import.log (size >0)
parsing.log (size >0)
deletion.log (empty)
相关问题