【问题标题】:Wrapping SLF4J with a "verbose" option用“详细”选项包装 SLF4J
【发布时间】:2015-09-17 09:08:27
【问题描述】:

我已经构建了一个使用 SLF4J(simple 绑定)进行日志记录的 Java 命令行工具。在其代码库中,我有许多不同的INFOTRACEWARNERROR 语句。通常,当用户运行此工具时,我希望它只记录INFO 及以上(如:INFOWARNERROR)。但是,我希望用户能够在命令行中提供--verbose(或-v)选项,并同时记录TRACE 消息。

重申一下,正常的命令行调用:

java -jar mytool.jar --fizz "30" --buzz "true"

但在“详细模式”:

java -jar mytool.jar --fizz "30" --buzz "true" --verbose

知道我可以像这样从命令行配置 SLF4J 设置:

java -jar -Dorg.slf4j.simpleLogger.defaultLogLevel "trace" mytool.jar --fizz "30" --buzz "true"

但这不是用户友好的,而且它还“泄露”了 SLF4J 是最终用户的底层日志系统这一事实。并不是说我担心安全性,它只是感觉 像一个不太优雅的配置解决方案。恕我直言,该工具的最终用户不必知道任何有关该工具的实现细节即可运行它,尤其是 TRACE 日志级别的含义或代表。

有什么想法吗?

【问题讨论】:

    标签: java slf4j


    【解决方案1】:

    您如何检查--verbose 选项是否存在并执行 System.setProperty("org.slf4j.simpleLogger.defaultLogLevel", "trace");?

    【讨论】:

    • 感谢@Kayaman (+1) - 我在 SLF4J API 中看到记录器上有 isXYZEnabled() 方法。您是否知道任何相应的设置器(例如,setTraceEnabled(true) 等?或者这些都与您刚刚在代码示例中提供的系统属性无关?再次感谢!
    • 不,他们没有二传手。它们用于检查是否启用了特定级别,以防需要为日志记录做一些繁重的工作(例如,如果您构建一个大字符串进行调试,但不想构建字符串以防级别不可用) t 启用)。
    • 这不适用于 slf4j simpleLogger。因为在 simpleLogger 初始化后,日志级别就不能再改变了。见:stackoverflow.com/a/16887899/972759
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-12
    • 1970-01-01
    • 1970-01-01
    • 2012-01-01
    相关资源
    最近更新 更多