2010-11-27 62 views
5

我有一個使用外部庫的java程序。主程序使用log4j來記錄其消息,並且該庫使用java.util.logging如何將java.util.logging重定向到文件?

我的問題是來自外部庫和主程序的日誌消息在控制檯中混合。

我想重定向全部將外部庫的消息記錄到文件中。我想這樣做有logging.properties文件:

handlers= java.util.logging.FileHandler 
.level= INFO 
java.util.logging.FileHandler.pattern = foo.log 
java.util.logging.FileHandler.formatter = java.util.logging.XMLFormatter 

此文件與初始化:

System.setProperty("java.util.logging.config.file", "logging.properties"); 

不幸的是,從外部庫日誌消息不斷出現在控制檯中。 我應該使用類似slf4j的東西截獲來自java.util.logging的日誌消息嗎?

謝謝你的時間。

+0

重複的http://stackoverflow.com/questions/751736/how-to-get-java-logger-output-to-file-by-default – 2010-11-27 16:42:14

回答

11

下面是我的一個程序的一些代碼。這也會自動旋轉。配置類是我自己從屬性文件中讀取的。你可以用你自己的價值取代。

Logger rootLogger = Logger.getLogger(""); 
logHandler = new FileHandler(config.getLogFile(), 
          config.getLogRotateSize()*1024*1024, 
          config.getLogRotateCount(), false); 
logHandler.setFormatter(new SimpleFormatter()); 
logHandler.setLevel(Level.INFO); 
rootLogger.removeHandler(rootLogger.getHandlers()[0]); 
rootLogger.setLevel(Level.INFO); 
rootLogger.addHandler(logHandler); 

注意這是一個獨立的程序。任何應用程序服務器都有自己的日誌配置工具。如果需要動態調試模式,程序還可以隨時更改格式化程序和級別。

+0

哇謝謝你,這工作完美無瑕! – gulbrandr 2010-11-27 17:31:36