2012-05-10 48 views
5

Java日誌記錄配置文件允許我定義命名記錄器的屬性,例如,如何配置特定FileHandler的屬性

name.heikoseeberger.heikotron.level = FINE 
name.heikoseeberger.heikotron.handlers = java.util.logging.FileHandler 

到目前爲止,這麼好。現在我想配置那個特定的FileHandler,例如,與一個特定的輸出文件。不幸的是我只知道如何配置「全局」 的FileHandler,這是在配置文件中已存在:

java.util.logging.FileHandler.pattern = %h/java%u.log 
java.util.logging.FileHandler.limit = 50000 
java.util.logging.FileHandler.count = 1 
java.util.logging.FileHandler.formatter = java.util.logging.XMLFormatter 

我不希望配置這一項,但是這與我的自定義相關的實例Logger。我已經嘗試以下,但沒有成功:

name.heikoseeberger.heikotron.java.util.logging.FileHandler.pattern = %h/heikotron.log 
name.heikoseeberger.heikotron.java.util.logging.FileHandler.formatter = java.util.logging.SimpleFormatter 

是否有可能在所有設置特定的FileHandler實例的屬性?如果是,應如何識別/命名?

回答

0

我不認爲這是可能的。如果您查看源代碼,FileHandler你會很快確定它使用字符串"java.util.logging.FileHandler.pattern「,以確定該文件的方式來使用記錄的目的

private void configure() { 
     LogManager manager = LogManager.getLogManager(); 

     String cname = getClass().getName(); 

     pattern = manager.getStringProperty(cname + ".pattern", "%h/java%u.log"); 
     limit = manager.getIntProperty(cname + ".limit", 0); 
     //... 
    } 

這樣,你是在把配置文件甚至沒有被處理程序考慮。

這在我看來,處理器不知道任何特定的記錄(即name.heikoseeberger.heikotro n)的存在,他們只是知道如何發佈給定的LogRecord。

據我所知,一部分的處理程序特殊記錄器由LogManager通過反射地調用它們的默認構造函數創建,因此,當創建給定的處理程序時,它不知道它被請求了哪個特定的記錄程序,這就是爲什麼它們的所有屬性都是通過它們自己設置的原因類名稱,而不是通過記錄器的名稱。

1

這是通過使用LogManger的頂級文檔中描述的config選項完成的。使用公共構造函數創建一個公共命名類,並調用所有需要配置處理程序的java調用。然後在您的日誌記錄屬性中指示LogManager加載您創建的類以配置您的處理程序。否則,你可以子類化文件處理程序,它將創建一個自定義命名空間進行配置。

+0

'屬性「配置」。該屬性旨在允許運行任意配置代碼。' 所以這可以用來加載另一個具有類到文件名映射的配置文件 –