2010-11-27 90 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