2014-06-04 46 views
0

我正在使用JUL进行日志记录(不,我不能改变它)。我开发了一个简单的包装器,它传递参数,并且每次都以正确的格式创建FileHandler,这样我就不必在每个项目中重新创建日志记录。Java FileHandler将不需要的数字添加到文件名

我的测试应用程序的功能与预期完全一样,但是当我将库导入其他项目时,我似乎正在获得一个(迄今为止只有一个)唯一错误:每次都会在末尾添加一个“.0”的日志文件。

它甚至在没有冲突的情况下执行此操作,并且Filehandler已被配置为将现有文件附加到最后(它没有问题)。我玩过各种文件名,最近我一直在使用简单的“mylog.log”,日志文件仍然以“mylog.log.0”的形式输出。我已经检查并且fileHandler正在传递正确的文件(“mylog.log”),但它不会在那里记录。

这不会发生在我的测井测试中,只发生在我真正想要使用它的项目中。即使使用完全相同的参数,我也会得到不同的文件名。

有没有关于JUL的一些古怪,我错过了?代码非常简单。培训相关代码:

String logFilePath = directory+name; // directory and name are method arguments 
Handler newFileHandler; 
File dirFile = new File(directory); 
if(!dirFile.exists()) 
{ 
    dirFile.mkdirs(); 
} 
newFileHandler = new FileHandler(logFilePath, true); 
newFileHandler.setFormatter(myformatter); 
//... etc 

回答

0

我终于明白了这一点,并忘记张贴原因。

有两件事情在起作用:

  1. 由于我是在环境中,“滚动”记录已被一些回地面变量我不知道的激活,因此为什么”。 0“被添加了,但我只有在将它从测试中移出并进入实际实施项目时才会看到它。

  2. JUL在它的工作方式上很不灵活。真的,我不能说得很差。无论如何,长话短说,如果启用滚动日志记录,它将总是追加一个文件编号,使活动日志以“.0”结尾。通常情况下,我使用的API只有辅助日志中的数字,而当前日志会保留您给出的确切名称 - 这给我带来了一些麻烦,因为JUL 也有没有“获取当前日志文件”方法来获取活跃文件的名称,所以我需要创建一个丑陋的方法,预测名称基于参数,并希望没有出错。顺便说一句,你不能改变代号的格式(这也造成了一些问题,因为它最好是文件编号01,02,... 10,11而不是0,1,2,... 10)。

0

It does this even when there is no conflicts ....

是证明证据或假设?按照FileHandler文档:

If no "%g" field has been specified and the file count is greater than one, then the generation number will be added to the end of the generated filename, after a dot.

If there is a conflict and no "%u" field has been specified, it will be added at the end of the filename after a dot. (This will be after any automatically added generation number.)

Note that the use of unique ids to avoid conflicts is only guaranteed to work reliably when using a local disk file system.

冲突可能包括:打开多个文件处理器相同的位置。您需要验证每个这些点。有什么可以帮助您添加代码来获取RuntimeMXBean,然后添加单个日志语句以记录呼叫ClassLoader,current thread,runtime namestart time。运行时名称通常映射到进程ID和主机名。运行程序并验证文件的内容。

您包含的代码有帮助,但您需要包含有关如何启动应用程序以及logging.properties中包含的内容的详细信息。

相关问题