【问题标题】:Java conditional logging with the logging API使用日志记录 API 的 Java 条件日志记录
【发布时间】:2013-10-22 04:10:35
【问题描述】:

我知道我可以使用

Logger.setLevel(<level here>);

设置日志记录级别(关闭、打开等)。但是,我不确定如何根据用户指定的日志级别有条件地进行日志记录。

本质上,我有一个使用日志 API 的类。我希望赋予班级用户以他们喜欢的方式配置日志级别的权力。我已经看到使用 log4j 完成此操作,但没有使用日志记录 API。

对此有最佳实践吗?我应该有一些功能吗

setLogLevel()

用户可以将 Level.INFO 或其他什么传递给?还是有更好的办法?

谢谢!

【问题讨论】:

标签: java logging java.util.logging


【解决方案1】:

我不确定,如果正确理解这个问题,但你不应该从调用记录器的代码中设置日志记录级别。日志记录背后的想法是,开发人员在适当的级别记录所有消息。例如,DEBUG 级别的“开始计算 xyz”,INFO 级别的“新用户已设置到 DB”和 ERROR 级别的“Caught exception from ...”。只有当它具有相同或更高的日志记录级别时,记录器才会打印消息。日志级别应该根据环境设置,例如开发的调试和生产的信息,从应用程序外部。

如果消息的创建非常耗时,并且您不想创建日志消息,除非它真的被记录下来(查看此link),则条件日志记录非常有用。如果您想检查 java.util.logging 中的记录器是否实际记录在给定级别,您可以使用 this 方法。

【讨论】:

    【解决方案2】:

    但是,我不确定如何根据用户指定的日志级别有条件地进行日志记录。

    您的问题不清楚,但我认为您是在询问如何根据用户设置的日志级别记录内容。答案是您只需正常编写日志语句即可;例如

    logger.warning("Danger Will Robinson");
    ...
    anotherLogger.info("It's good to be alive");
    

    ... 并让用户使用日志记录配置指定要捕获的日志记录。一般来说,日志配置由运行时加载的配置文件指定,并且可以由用户更改。也可以通过编程方式创建或更改日志记录配置,尽管通过某种用户友好的 UI 向用户展示此功能将是一个挑战。

    理论上,也可以根据某些条件将给定的事件记录在不同的级别。但是,您这样做可能会夺走用户的控制权。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-17
      • 2011-08-13
      • 1970-01-01
      • 1970-01-01
      • 2014-10-27
      • 1970-01-01
      • 1970-01-01
      • 2019-07-26
      相关资源
      最近更新 更多