【问题标题】: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 向用户展示此功能将是一个挑战。
理论上,也可以根据某些条件将给定的事件记录在不同的级别。但是,您这样做可能会夺走用户的控制权。