2016-09-14 58 views
2

我有一個使用maven構建的java項目。 我用我的項目java.util.logging.Logger,並想用logger.properties文件來配置它(而不是命令行)。Java Logger:無法在logger.properties文件中設置日誌級別

我創建了一個logger.properties文件是這樣的:

handlers=java.util.logging.FileHandler, java.util.logging.ConsoleHandler 
.level=WARNING 

java.util.logging.SimpleFormatter.format=[%4$s] %5$s %n 

java.util.logging.config.file="../../results/api.log" 

下面是我有問題:

  1. java.util.logging.SimpleFormatter.format是工作。當我在這裏更改格式時,我立即在項目中看到變化。所以我知道至少我正確地導入文件。
  2. .level不工作。我試過將它改爲info,finest,warning等,但是在我改變它之後,即使我告訴它不要顯示INFO,我仍然可以看到所有的INFO消息。
  3. java.util.logging.config.file不工作。我有點期待這一個不工作,因爲它是一個相對路徑。任何人都知道我可以如何解決屬性文件中的相對路徑名?

解決方案

我需要的.level移動到頂部,這樣的:

logger.properties

.level=WARNING 

handlers=java.util.logging.FileHandler, java.util.logging.ConsoleHandler 

java.util.logging.SimpleFormatter.format=[%4$s] %5$s %n 

然後,爲了節省結果以「api.log」,我在我的代碼中執行了此操作:

RequestHelper.java

import org.apache.commons.io.FilenameUtils; 

public class RequestHelper { 

    private static final Logger LOGGER = Logger.getLogger(RequestHelper.class.getName()); 

    protected RequestHelper() { 
     //SET LOGGER TO OUTPUT TO "../../results/api.log" 
     //Logs will ALSO output to console. 
     String result_file = getNormalizedAbsolutePath("../../results/api.log"); 
     Handler fh = new FileHandler(result_file); 
     Logger.getLogger("").addHandler(fh); 
    } 

    public static String getNormalizedAbsolutePath(String fileName) { 
     String path; 
     File file = new File(fileName); 
     try { 
      path = file.getCanonicalPath(); 
     } catch (IOException e) { 
      LOGGER.warning("Error while computing the canonical path of file: " + fileName); 
      path = file.getAbsolutePath(); 
     } 
     return FilenameUtils.normalize(path); 
    } 
} 
+0

您是否設置了-Djava.util.logging.config.file =「logging.properties」? –

回答

2

只是一個猜測。從文檔:

假定名稱以「.level」結尾的所有屬性定義記錄器的日誌級別。因此,「foo.level」爲名爲「foo」的記錄器定義了一個日誌級別,並且(針對命名層次結構中的任何子級)遞歸地定義了該日誌級別。 日誌級別按其在屬性文件中定義的順序應用。因此樹中的子節點的級別設置應該在其父母的設置之後。

在定義任何處理程序之前,先嚐試設置.level。如果先設置根記錄器級別,則後面定義的記錄器將繼承根日誌級別。

另外:

的屬性 「配置」。該屬性旨在允許運行任意配置代碼。

java.util.logging.config.file是一個系統屬性,並且不會在配置文件中工作。嘗試使用「配置」。

+1

哇,你明白了!我只需要將「.level」行移到頂端!現在工作ty^- ^ – Kayvar