Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 以编程方式从Log4J FileAppender访问文件_Java_File_Log4j_Appender - Fatal编程技术网

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

Java 以编程方式从Log4J FileAppender访问文件,java,file,log4j,appender,Java,File,Log4j,Appender,我有一个使用log4j日志框架的Java应用程序。在我的应用程序中,我有几个模块,每个模块创建自己的日志文件。我通过命令行启动我的应用程序,传递一个参数告诉我的应用程序应该运行哪个模块。 假设我有3个模块,因此每次启动一个模块时,都会创建所有3个日志文件,但只有一个日志文件充满了信息(我刚刚启动的模块中的一个)。 我已将每个文件附加器设置为 ...append = false 因此,每次启动应用程序时,都会有没有旧日志数据的新日志文件 现在我有了一个批处理文件,它创建了一个流程链,所以所有3个

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

...append = false
因此,每次启动应用程序时,都会有没有旧日志数据的新日志文件

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

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

每次运行程序模块时,您都需要一个新的日志文件

你有没有考虑过使用一种新的方法?在设置
RollingFileAppender
后,使用
appender.rollOver()在程序的开头创建一个新的日志文件。您可以配置为使用appender.setMaxBackupIndex(int)
保留许多旧日志文件。任何旧日志文件都将被删除。这将文件的管理委托给框架


另一种方法是使用一个。您可以配置文件滚动的时间间隔。

如果我理解正确,则滚动文件附加器将为每个模块创建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)
目前,在启动第二个模块后,I将具有:

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)

好的,谢谢。这是个好主意。但是如果我不知道有多少模块正在启动呢?因此,如果我有3个模块,那么每个日志文件将创建3次,因此我必须将MaxBackupIndex设置为3。但在以后的时间里,我会使用数量可变的模块。每个模块都使用自己的Appender。因此,只需创建3个日志文件一次。如果只重新启动一个模块,其他附加程序不会被覆盖。但我使用xml配置文件的设置,因为我不想以编程方式创建附加程序,另一个问题是,我必须在应用程序的第一个模块设置日志文件(甚至在启动主方法之前)如下所示:
System.setProperty(“main.log”,pathToLogFiles+“overview.log”);System.setProperty(“import.log”,pathToLogFiles+“importToDB.log”);setProperty(“runjdbconn.log”,pathToLogFiles+“runjdbconnector.log”);setProperty(“testjdbconn.log”,pathToLogFiles+“testjdbconnector.log”)