代码之家  ›  专栏  ›  技术社区  ›  Troskyvs

Java Logger-CONFIG文件不起作用

  •  0
  • Troskyvs  · 技术社区  · 6 年前

    我有一个简单的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
    

    因此,我的配置文件似乎对我的程序无效。我哪里出错了,怎么解决?

    1 回复  |  直到 6 年前
        1
  •  1
  •   stringy05    6 年前

    配置文件被忽略,因为未设置JVM属性。

    将jvm参数放在类名之前,主类名之后的所有内容都是程序参数,而不是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