Java日志管理器在运行Java代码时通过传递属性覆盖默认值
是否有一种方法可以通过在启动应用程序时传递命令行属性来覆盖java中LogManager的配置。 目前,我使用Java日志管理器在运行Java代码时通过传递属性覆盖默认值,java,java.util.logging,Java,Java.util.logging,是否有一种方法可以通过在启动应用程序时传递命令行属性来覆盖java中LogManager的配置。 目前,我使用 File fn = new File(filename); URL url = fn.toURI().toURL(); LogManager.getLogManager().readConfiguration(url.openStream()) filename contains this handlers = java.util.logging.ConsoleHandler .
File fn = new File(filename);
URL url = fn.toURI().toURL();
LogManager.getLogManager().readConfiguration(url.openStream())
filename contains this
handlers = java.util.logging.ConsoleHandler
.level = CONFIG
java.util.logging.ConsoleHandler.level = ALL
java.util.logging.ConsoleHandler.formatter = abc.common.util.LogFormatter
java.util.logging.FileHandler.level = ALL
java.util.logging.FileHandler.formatter = abc.common.util.LogFormatter
我无法更改文件,但需要将.level=CONFIG更改为其他值。我不能更改代码,但只能在启动应用程序时传递java属性
有可能实现吗?鉴于您的限制,唯一可以使用的命令行参数是system property。然后,您必须修改classpath参数以包含自定义日志管理器,以执行所需的步骤
或者,如果您的目标只是更改根记录器级别,则可以附加到正在运行的应用程序,并使用它覆盖当前设置。在MBeans选项卡中,转到java.util.logging->logging->Operations->setLoggerLevel。删除“p0”字段中的所有字符,并在“p1”字段中以大写形式输入级别名称或级别编号。单击setLoggerLevel以更新该级别。您可以使用-
java -Djava.util.logging.config.file=<filelocation>
java-Djava.util.logging.config.file=
这一点很好。但是,java.util.logging.config.file参数仅修改无参数LogManager.readConfiguration方法的行为。该示例使用LogManager.readConfiguration(InputStream)方法,该方法不查找该系统属性。我检查了代码,它调用了重置,因此您的权限无效。令人沮丧的!你能创建一个自定义版本的类,并在类路径中放在它前面吗?同意。这听起来像是我在别处读到的答案