2011-11-29 34 views
1

我的目標是使用的java.util.logging(JDK1.6)如何讓根和命名記錄器的文件處理程序日誌記錄到同一個文件?

  • 寫入所有日誌到相同的日誌文件,並
  • 不要登錄旋轉
  • 可以使用%U在文件模式,以避免與其他程序

我已經配置了一個根記錄器和幾個指定logger,其中 根記錄的處理程序設置爲java.util.logging.FileHandler與設置潛在的文件衝突

java.util.logging.FileHandler.formatter = java.util.logging.SimpleFormatter 
java.util.logging.FileHandler.pattern = xxx.%u.log 
java.util.logging.FileHandler.limit = 200000 
java.util.logging.FileHandler.count = 20 
java.util.logging.FileHandler.append = true 

,並命名爲記錄器處理程序設置爲customFileH 與自定義設置

customFileH.class = java.util.logging.FileHandler 
customFileH.level = ALL 
customFileH.formatter = xxxFormat 

當我運行該程序,根記錄器將寫日誌到xxx.0.log,

同時指定logger將日誌寫入xxx.0.log.1,作爲不同的日誌文件。

即使我拿出文件模式中的「%u」備註文件旋轉配置, 他們寫入不同的日誌文件。 :(

感謝提前任何評論。:)

回答

1

看起來你嘗試應用的log4j風格配置的java.util.logging。如果要使用不同的格式化程序創建多個FileHandler,則必須使用config選項來安裝每個FileHandler。創建一個配置類:

package so; 
import java.io.IOException; 
import java.util.logging.FileHandler; 
import java.util.logging.Logger; 
import java.util.logging.SimpleFormatter; 
import java.util.logging.XMLFormatter; 

public final class LoggingConfig { 

    /** 
    * Pin the loggers. 
    */ 
    private static final Logger root = Logger.getLogger(""); 
    private static final Logger named = Logger.getLogger("some.name"); 

    /** 
    * Configure the loggers. 
    * @throws Exception if there is a problem. 
    */ 
    public LoggingConfig() throws Exception { 
     root.addHandler(newRootHandler()); 
     named.addHandler(newNamedHandler()); 
    } 

    private FileHandler newRootHandler() throws IOException { 
     FileHandler f = new FileHandler("simple%g.%u.log", 200000, 20, true); 
     f.setFormatter(new SimpleFormatter()); 
     return f; 
    } 

    private FileHandler newNamedHandler() throws IOException { 
     FileHandler f = new FileHandler("xml%g.%u.log", 200000, 20, true); 
     f.setFormatter(new XMLFormatter()); 
     return f; 
    } 
} 

然後添加以下到您的logging.properties:

否則,你也可以繼承的FileHandler只是爲了創建一個可以在你的日誌中使用的新的類名。屬性。

您必須使用%g選項來區分輪轉日誌和%u以處理衝突。從文件處理器文檔:

因此,如果三個進程都試圖將日誌記錄到fred%u%g.txt那麼他們可能會最終使用fred0.0.txt,fred1.0.txt,fred2.0。 .txt作爲其旋轉序列中的第一個文件。

默認情況下,所有指定的記錄器都將寫入根記錄器的處理程序。所以根據你在做什麼,你可能不需要附加文件處理程序到指定的記錄器。

相關問題