2014-06-04 44 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中包含的內容的詳細信息。

相關問題