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

Java 如何在运行时更改slf4j级别?,java,log4j,slf4j,Java,Log4j,Slf4j,我已经使用SLF4j作为日志框架,由log4j支持。我的问题是,我正在寻找一种在运行时更改记录器日志记录级别的方法 我知道slf4j不允许直接通过自己的API进行此操作,因此,我必须直接访问日志提供程序。就我个人而言,我发现这是slf4j的一个巨大缺陷。所以现在我的问题是,如何通过slf4j以编程方式确定我使用的是哪种提供者?使用slf4j的最大目的是让您成为供应商无关者—您可以轻松地在您最喜欢的日志系统之间切换,而无需重新编码任何内容。但是现在,如果我必须直接呼叫log4j,我就失去了这种能力

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

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

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

如果我使用
LoggerFactory.getLogger(Logger.ROOT\u Logger\u NAME)
,结果是
org.slf4j.impl.Log4jLoggerAdapter
的一个实例,而不是
org.apache.log4j.Logger
(正如我希望/预期的那样)

有没有办法找到答案

谢谢,
Eric

SLF4J是为库而不是应用程序设计的抽象(当然,为了保持一致性,您可以也应该在自己的应用程序的日志调用中使用SLF4J)。在您自己的应用程序中,您可以选择底层记录器框架,因此可以在日志配置特定部分中访问log4japi


一个库不应该改变日志配置IMHO,所以它不适合放在SLF4J API上。

请参阅:谢谢。我不知道为什么我在最初的搜索中遗漏了这一点。如果SLF4J仅用于图书馆,那就足够了。然而,在我看来,库中如此灵活的东西也应该可以在应用程序中使用。拥有一个可以插入任何日志框架的单一API的概念非常棒。此外,应用程序的一部分往往会在某个时候被重构到库中。必须将对log4j的任何引用重新编码为slf4j是没有意义的。如果SL4j是专为图书馆设计的(我在slf4j网站上没有读到),我觉得这是短视的。对不起,我没有明确说明:你绝对应该使用slf4j进行应用程序的日志调用。但是在代码中涉及更改日志配置的一小部分中,只需将内容转换为Log4J类。如果您决定切换日志实现,那么无论如何都必须重写该位。同意。只是试着做一般性的事情。我想这是不可行的。这甚至不是强制转换的问题-我必须直接使用Log4j类进行调用(即:使用Log4j.Logger而不是slf4j.LoggerFactory来检索记录器)