我需要為 websphere 應用程序服務器 9 上安裝和運行的每個應用程序生成一個日志文件。我使用 JUL 來生成日志文件。我的解決方案是創建一個特定的類,它繼承自 FileHandler 并通過配置文件設置日志屬性。這是我的代碼://Read config fileLogManager.getLogManager().readConfiguration(LoggerJUL.class.getResourceAsStream("/Logger.properties"));//Add handler to loggerLogger.getLogger(clazz)).addHandler(new PersonalFileHandler());PersonalFileHandler 擴展了 FileHandler,并且屬性由運行時 FileHandler 類上的 configure 方法設置。通過這種方式,我可以通過在 Websphere 上運行的應用程序創建一個日志文件,而不會覆蓋服務器日志的目標。雖然我實現了部分目標,但如果原始日志文件被鎖定,則會生成額外的文件,如下所示:testLogs.log.0,testLogs.log.1,testLogs.log.0.1等。我讀了很多建議和解決方案,但我無法阻止這個問題。有什么建議 ?handlers = com.mucam.xxxx.PersonalFileHandler# Set the default formatter to be the simple formattercom.mucam.xxxx.PersonalFileHandler.formatter = java.util.logging.SimpleFormatter# Write the log files to some file patterncom.mucam.xxxx.PersonalFileHandler.pattern = C:/Users/pmendez/Documents/Log/testLogs.log# Limit log file size to 5 Kbcom.mucam.xxxx.PersonalFileHandler.limit = 5000# Keep 10 log filescom.mucam.xxxx.PersonalFileHandler.count = 10#Customize the SimpleFormatter output format java.util.logging.SimpleFormatter.format = %d{ISO8601} [%t] %-5p %c %x - %m%n#Append to existing filecom.mucam.xxxx.PersonalFileHandler.append = true
1 回答

偶然的你
TA貢獻1841條經驗 獲得超3個贊
雖然我實現了部分目標,但如果原始日志文件被鎖定,則會生成額外的文件,如下所示:testLogs.log.0,testLogs.log.1,testLogs.log.0.1等。我讀了很多建議和解決方案,但我無法阻止這個問題。有什么建議 ?
由于您的計數設置為 10,因此您需要指定%g
記錄生成的模式。
com.mucam.xxxx.PersonalFileHandler.pattern?=?C:/Users/pmendez/Documents/Log/testLogs%g.log
該模式是絕對路徑,因此如果您創建多個文件處理程序,它將通過在末尾附加唯一編號來解決沖突。這是由%u
模式指定的。因此,如果您想移動整數在文件名中的位置,您可以%u
在模式中指定標記。
這也意味著您正在創建自定義文件處理程序的多個實例并且它們沒有被關閉。如果你想控制文件的數量,你要么需要控制你創建的 PersonalFileHandler 的數量,要么共享對單例 PersonalFileHandler 的引用。否則,您需要確保,如果顯式創建 PersonalFileHandler,則在創建第二個新的 PersonalFileHandler 之前顯式關閉該 PersonalFileHandler。
記錄器會受到垃圾收集的影響。該行:
Logger.getLogger(clazz).addHandler(new?PersonalFileHandler());
除非其他地方的代碼已經將該記錄器固定在內存中,否則會受到垃圾收集的影響。這可能會導致日志文件被創建、鎖定和清空。
添加回答
舉報
0/150
提交
取消