2013-02-15 95 views
11

這與其他question類似,儘管我已將logging.properties放在可執行文件jar中並且不起作用。無法配置可執行文件夾的日誌記錄

我有一個類(ReportGenerator)認爲有以下幾點:

Logger logger = Logger.getLogger(ReportGenerator.class.getName()); 
logger.log(Level.INFO, "LOG THIS"); 

我使用NetBeans所以我把logging.properties文件路徑src/main/resources。它有這個(除其他事項外):

# default file output is in user's home directory. 
java.util.logging.FileHandler.pattern = /my/folder/reports.log 
java.util.logging.FileHandler.limit = 50000 
java.util.logging.FileHandler.count = 10 
java.util.logging.FileHandler.formatter = java.util.logging.SimpleFormatter 

# Limit the message that are printed on the console to INFO and above. 
java.util.logging.ConsoleHandler.level = OFF 
java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter 


############################################################ 
# Facility specific properties. 
# Provides extra control for each logger. 
############################################################ 

# For example, set the com.xyz.foo logger to only log SEVERE 
# messages: 
com.mypackage.ReportGenerator.level = ALL 

使用Maven生成的罐子,解壓縮時,我可以看到logging.properties是在罐子裏的主文件夾。與我的課程所在的文件夾com一起。

-com 
    -mypackage 
     -ReportGenerator 
logging.properties 
...other things 

當我從控制檯運行:

java - jar MyReportsJar.jar 

這說明我通過控制檯的日誌。我想將它記錄到我在logging.properties.

中設置的文件我做錯了什麼? 如何在不設置JVM java.util.logging.config.file參數的情況下執行此操作?

回答

12

處理幾天針對這一點,並在互聯網上閱讀的資源後,我想出了這個解決方案:

我不得不改變在程序中LogManager的日誌記錄屬性。我可以使用logging.properties文件打包在.jar這樣的:

LogManager.getLogManager().readConfiguration(ReportGenerator.class.getClassLoader().getResourceAsStream("logging.properties")); 

,然後我可以做和以前一樣得到記錄和日誌:

Logger logger = Logger.getLogger(ReportGenerator.class.getName()); 
logger.log(Level.INFO, "LOG THIS"); 

但我發現非常有用的,你所以我最後的代碼是這樣可以指定在運行時另一logging.properties文件:

 String logFile = System.getProperty("java.util.logging.config.file"); 
     if(logFile == null){ 
      LogManager.getLogManager().readConfiguration(ReportGenerator.class.getClassLoader().getResourceAsStream("logging.properties")); 
     }     
     Logger logger = Logger.getLogger(ReportGenerator.class.getName()); 
     logger.log(Level.INFO, "LOG THIS"); 

這樣,如果我執行的罐子,因爲這:

java -jar MyReportsJar.jar 

它使用內部logging.properties文件。

但如果我執行:

java -Djava.util.logging.config.file=<external-logging.properties> -jar MyReportsJar.jar 

它使用外部logging.properties文件。