簡體   English   中英

如何配置特定FileHandler的屬性

[英]How to configure the properties of a specific FileHandler

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

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實例的屬性? 如果是,那么如何識別/命名?

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

我認為不可能。 如果您查看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通過反射調用它們的默認構造函數創建的,因此,當創建給定的處理程序時,它不知道它已被請求的特定記錄器,這就是為什么所有屬性都是通過自己的類名設置而不是通過記錄器的名稱設置的。

如果我理解正確,您嘗試使用java.util.logging包在不同的日志文件java.util.logging編寫。 如果不延長它,就無法開箱即用。

如果您無法切換到另一個日志記錄框架,如Logback ,請檢查對java util logging.properties的回答:如何記錄到兩個不同的文件 ,看它是否符合您的需求。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM