如何在运行时更改slf4j级别?

Eri*_* B. 15 java log4j slf4j

我使用SLF4j作为我的日志框架,由log4j支持.我的问题是我正在寻找一种方法来在运行时更改记录器的日志记录级别.

我知道slf4j不允许直接通过自己的API,因此,我必须直接访问日志记录提供程序.就个人而言,我发现这是slf4j的一个巨大缺陷.所以现在我的问题是如何通过slf4j以编程方式确定我正在使用哪个提供程序?使用slf4j的最大目的是让您成为提供者不可知的 - 您可以轻松地在您喜欢的日志记录系统之间切换,而无需重新编码.但是现在,如果我必须直接调用log4j,我就失去了这种能力.

至少,我希望能够确定我是否使用log4j作为提供程序,如果是,则允许用户切换日志级别.

如果我这样做 LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME),结果是一个实例org.slf4j.impl.Log4jLoggerAdapter而不是偶数org.apache.log4j.Logger(正如我希望/期望的那样).

有没有办法找到这个?

谢谢,埃里克

art*_*tol 13

SLF4J被设计为的抽象,而不是应用程序(当然,您可以并且仍然应该在您自己的应用程序的日志记录调用中使用SLF4J,以保持一致性).在您自己的应用程序中,您选择了底层记录器框架,因此可以在特定于logging-config的部分中访问log4j API.

没有办法让图书馆改变日志配置,恕我直言,所以它不适合在SLF4J API上.

  • 很公平,如果SLF4J仅用于图书馆.但是,在我看来,库中的一些如此灵活的东西也应该可以在你的应用程序中使用.我可以插入任何日志框架的单个API的概念非常棒.此外,您的应用程序通常会在某些时候被重构到库中.必须重新编码对log4j的任何引用才能成为slf4j没有意义.如果SL4j只是为图书馆设计的(我没有在slf4j网站上阅读),我发现这是短视的. (3认同)
  • 对不起,没说清楚:你绝对应该使用SLF4J进行应用程序的日志记录调用.但是在代码中处理更改日志配置的小部分中,只需将内容转换为Log4J类.如果您决定切换日志记录实现,则无论如何都必须重写该位. (3认同)