【问题标题】:Setting logging level through CLI argument? Java通过 CLI 参数设置日志记录级别?爪哇
【发布时间】:2013-10-31 10:34:49
【问题描述】:

快速提问,

查看这些静态分配程序日志记录级别的示例

http://www.onjava.com/pub/a/onjava/2002/06/19/log.html?page=2

http://www.vogella.com/articles/Logging/article.html

如何在调用 Java 应用程序时通过参数动态设置日志记录级别

例如

java -jar myprogram.jar FINE

意思是代替这段代码

 logger.setLevel(Level.INFO);

我可以有类似的东西

logger.setLevel(args[0]);

在研究文档时,似乎没有办法用字符串设置日志级别。

http://docs.oracle.com/javase/6/docs/api/java/util/logging/Level.html

【问题讨论】:

    标签: java logging command-line-arguments


    【解决方案1】:

    您可以使用内置方法Level.parse(String),它将级别名称字符串解析为Level

    参数字符串可以由级别名称或整数组成 价值。

    例如:

    • “严重”
    • “信息”
    • “1000”

    【讨论】:

    • 需要注意用户的输入,但谢谢 :)
    • @serupticious 用户输入验证是强制性的,无论你如何实现它。顺便说一句,当您使用未映射到已知Level 的整数时,您将获得新的级别。您也许可以利用这一点。
    【解决方案2】:

    您可以创建一个 String 和 Level 的 Map 并参考:

    logger.setLevel(logmap.get(args[0]));
    

    【讨论】:

      【解决方案3】:

      您可以使用map 来存储Level 映射:

      Map<String, Level> levelmap = new HashMap<String, Level>();
      levelmap.put("info", Level.INFO);
      

      然后使用这个映射来设置日志级别:

      org.apache.log4j.Logger rootLogger = org.apache.log4j.Logger.getRootLogger();
      String level = arg[0];
      rootLogger.setLevel(levelmap.get(level));
      

      【讨论】:

      • 他好像没有使用 Log4j。
      【解决方案4】:

      Level 类是参考:

          public static final Level INFO = new Level("INFO", 800, defaultBundle);
      

      你可以从像"INFO"这样的字符串映射到像Level.INFO这样的常量......

      【讨论】:

        猜你喜欢
        • 2016-11-27
        • 2023-03-23
        • 2021-04-06
        • 2011-07-26
        • 1970-01-01
        • 2016-03-14
        • 2017-07-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多