final Logger logger = LoggerFactory.getLogger(LoggerListener.class);
// These five statements will log.
logger.error("error");
logger.warn("warn");
logger.info("info");
logger.debug("debug");
logger.trace("trace");
final ch.qos.logback.classic.Logger logger2 = (ch.qos.logback.classic.Logger) logger2;
@Nullable
final Level nullablePrevLevel = logger2.getLevel();
final Level level = Level.INFO;
logger2.setLevel(level);
logger.info("Change log level: [{}]->[{}]", nullablePrevLevel, level);
// These three statements will log.
logger.error("error");
logger.warn("warn");
logger.info("info");
// These two statements will not log.
logger.debug("debug");
logger.trace("trace");
5条答案
按热度按时间qyuhtwio1#
无法在slf4j中动态更改日志级别,但slf4j的某些后端支持它,包括log4j。
这个解决方案对我很有效:
(来源:http://prateep.info/2015/12/12/Dynamically-change-log-level-in-SLF4j-Log4J-with-Standalone-Java-Class/)
这个解决方案的缺点是它直接使用后端,而在使用slf4j时不应该这样做,因为slf4j的目的是提供一个与您正在使用的特定后端无关的抽象。
toe950272#
考虑Logback http://logback.qos.ch/-“流行的log4j项目的后继者,从log4j离开的地方开始”。如果指示这样做,logback-classic将扫描其配置文件中的更改,并在配置文件更改时自动重新配置自己。此外,您可以使用JMX控制Logback的日志级别。
9ceoxa923#
对于SLF4J,此代码将演示如何以编程方式(在运行时)控制记录器级别。
此答案假设您使用的是Logback Classic:
假定默认SLF4J配置:
ergxz8rk4#
我曾经用log4j做过一次。我唯一能弄清楚如何做的方法是在Logger对象上调用getAllAppenders。然后,循环遍历appenders。如果它们扩展了AppenderSkeleton类(应该),它们将具有setThreshold方法。使用新的Level作为参数调用此方法。对记录器的后续调用应该使用新的Level。这将在内存中设置级别,而不是在log4j配置文件中。您可能也希望这样做,除非当管理员通过前端更改级别时,它会自动更改。如果可以选择这样做,您可能需要考虑遵循Evgeniy Dorofeev的建议,使用logback。这听起来会更容易。
bis0qfac5#
从
slf4j
版本1.7.26
开始,我可以更改日志记录级别。下面是源文件夹中的
logback.xml
。如果是spring Boot 应用程序,您可能希望将其放在resources文件夹中。logback-ext.xml
文件保存在任何外部位置。scanPeriod
以毫秒为单位。如果此操作失败,请尝试使用include resource
而不是logback.xml
中的include file
。我可以更改日志记录级别、日志记录模式、附加/分离新的附加器以及添加/删除附加器。
这些是
pom.xml
中的依赖项干杯干杯干杯