我有一个简单的Java程序:
public class UseLog {
public static final Logger logger = Logger.getLogger("UseLog");
public static void main(String[] args) {
logger.info("my4");
}
}
还有一个“ myConfig.txt”文件:
.level=WARNING
UseLog.level=WARNING
我通过命令行编译并运行它:
java UseLog -Djava.util.logging.config.file=myConfig.txt
我希望它什么都不打印,但是实际上:
Jan 05, 2019 10:46:13 下午 UseLog main
INFO: my4
所以看来我的配置文件对我的程序无效。我在哪里弄错了以及如何解决?
答案 0 :(得分:1)
由于未设置JVM属性,因此将忽略您的配置文件。
将jvm arg放在类名之前,主类名之后的所有内容都是程序参数,而不是JVM属性。
java -Djava.util.logging.config.file=myConfig.txt UseLog
如果我稍稍更改了程序:
package com.soquestion;
import java.util.logging.Logger;
public class Main {
public static final Logger log = Logger.getLogger("UseLog");
public static void main(String[] args) {
System.out.println("arg count: " + args.length);
log.info("hello from info");
log.warning("hello from warning");
}
}
在类名后输出-D:
$ java com.soquestion.Main -Djava.util.logging.config.file=myConfig.txt
arg count: 1
Jan 07, 2019 2:17:17 PM com.soquestion.Main main
INFO: hello from info
Jan 07, 2019 2:17:17 PM com.soquestion.Main main
WARNING: hello from warning
在类名之前输出-D:
$ java -Djava.util.logging.config.file=myConfig.txt com.soquestion.Main
arg count: 0
在类名之前输出-D,并在配置文件中定义处理程序:
handlers = java.util.logging.ConsoleHandler
UseLog.level = WARNING
结果:
$ java -Djava.util.logging.config.file=myConfig.txt com.soquestion.Main
arg count: 0
Jan 07, 2019 2:18:38 PM com.soquestion.Main main
WARNING: hello from warning