我希望我的Logger与FileHandler一起使用我的配置文件中定义的设置。在使用LogManager.readConfiguration(InputStream)之后是否必须使用Logger.getLogger或Logger.addHandler(新的FileHandler())还是有更多内容吗?换句话说,假设它与订单有关并且不是别的东西,我应该做以下3件事(getLogger,addHandler,readConfigurations)的顺序是什么?
我无法找到很多这方面的例子,我发现它们在Logger.getLogger之后有了LogManager.readConfiguration,但这似乎不起作用。
这是配置文件:
handlers = java.util.logging.FileHandler
.level = ALL
# Default
java.util.logging.FileHandler.limit = 10000000
java.util.logging.FileHandler.count = 10
java.util.logging.FileHandler.append = true
java.util.logging.FileHandler.formatter = java.util.logging.SimpleFormatter
java.util.logging.FileHandler.level = FINE
编辑:以下是与配置相关的代码部分。
String configFilename = "C:\\Users\\dalawh\\Documents\\config.properties";
LogManager manager = LogManager.getLogManager();
String property = manager.getProperty(this.getClass().getPackage().getName()); //DEBUGGING
LogManager.getLogManager().readConfiguration(new FileInputStream(configFilename));
String property2 = manager.getProperty(this.getClass().getPackage().getName()); //DEBUGGING
Logger logger = java.util.logging.Logger.getLogger(this.getClass().getPackage().getName());
String property3 = manager.getProperty(this.getClass().getPackage().getName()); //DEBUGGING
String filename = "C:\\Users\\dalawh\\Documents\\log.log";
this.fileHandler = new FileHandler(filename);
this.logger.addHandler(this.fileHandler);
答案 0 :(得分:2)
与此相关的是:configure Logger via global config file。
对LogManager.readConfiguration的调用将确定logger.getLogger将返回什么。如果在属性文件中定义处理程序,则不必在以后添加处理程序。 如果要使用代码添加处理程序,那么您要查找的解决方案是:
如果您在启动脚本中将java.util.logging.config.file
定义为系统属性,则无需编写任何代码。
-Djava.util.logging.config.file="path to file"
有关详细信息,请阅读LogManager班级文档。
如果您无法在启动时定义该属性,则可以使用LogManager.readConfiguration(InputStream)方法执行设置。除非您遇到JDK-8033661 readConfiguration does not cleanly reinitialize the logging system或者{。}},否则您不必调用任何其他方法 JDK-5035854 LogManager.readConfiguration does not properly modify existing loggers
如果这些选项都不起作用,您可以根据需要使用记录器并调用配置方法。
要解决您的问题,请添加以下内容:
String configFilename = "C:\\Users\\dalawh\\Documents\\config.properties";
System.out.println(new File(configFilename).length());
LogManager manager = LogManager.getLogManager();
LogManager.getLogManager().readConfiguration(new FileInputStream(configFilename));
String property = manager.getProperty("java.util.logging.FileHandler.formatter"); //DEBUGGING
System.out.println(property);
这是一个简单的测试,用于证明日志管理器的工作原理。
public class LogManagerTest {
public static void main(String[] arg) throws IOException {
read(LogManager.getLogManager(), create());
FileHandler h = new FileHandler();
h.close();
System.out.println(h.getFormatter());
}
private static Properties create() {
Properties props = new Properties();
props.setProperty("java.util.logging.FileHandler.formatter",
"java.util.logging.SimpleFormatter");
return props;
}
private static void read(LogManager manager, Properties props) throws IOException {
final ByteArrayOutputStream out = new ByteArrayOutputStream(512);
props.store(out, "No comment");
manager.readConfiguration(new ByteArrayInputStream(out.toByteArray()));
}
}