我可以按照以下方式做点什么:
-Djava.util.logging.loglevel=FINE
显然这不起作用,但你明白了。有什么相似的吗?或者我被迫创建属性文件?
答案 0 :(得分:4)
您甚至可以将日志级别作为用户定义的属性传递。
-DmyProp.logLevel=FINE
在您的代码中:
String logLevel = System.getProperties("myProp.logLevel");
但我知道你正在寻找一个更“内置”和自动处理的财产,对吧? AFAIK,它不存在,但也许我错了。
答案 1 :(得分:1)
您可以配置代码以根据环境变量设置级别:
String sLoglevel= System.getenv("LOGLEVEL");
int ilevel = loglevel.parseInt(sLoglevel);
//set the log level based on retrieved value
答案 2 :(得分:0)
通常 java.util.logging
不使用系统属性来配置自身(很少有例外,例如 java.util.logging.SimpleFormatter.format
)。相反,全局 LogManager 单例实例负责配置日志子系统,默认情况下它从 $JAVA_HOME/conf/logging.properties
加载属性。有几种方法可以调整此行为:
java.util.logging.config.file
系统属性。java.util.logging.config.class
系统属性,该类名提供日志配置属性输入流。因此,在覆盖全局默认日志级别的情况下,在 updateConfiguration(...)
方法的开头使用 main
可能是最简单的。 LogManager
使用 .level
属性(“根”记录器的级别)作为其所有子记录器的默认值,因此使用示例中的 java.util.logging.loglevel
系统属性,它会是这样的:
var cmdLineVal = System.getProperty("java.util.logging.loglevel");
if (cmdLineVal != null) {
LogManager.getLogManager().updateConfiguration(
(key) -> (oldVal, newVal) ->
key.equals(".level") ? cmdLineVal : newVal);
}
请注意,在默认日志配置的情况下,上述内容不足以在控制台上输出任何 FINE
(或更低)日志条目,因为 ConsoleHandler
默认输出 {{1 }} 和更高。要更改此设置,您还需要覆盖 INFO
日志记录配置属性。如果您想再次为此使用相同的系统属性,则如下所示:
java.util.logging.ConsoleHandler.level
最后要注意的是,我最近编写了一个简单的辅助函数,可以更轻松地对日志配置进行临时命令行更改:updateLogLevels