禁用外部库的日志框架

时间:2017-03-09 09:03:24

标签: java log4j

我有一个使用log4j的外部库,起初登录控制台很有用,但现在它试图在控制台上打印KB xml消息,而它只是不再可用了。

我尝试了在这个网站上发布的一些程序化解决方案,但无济于事,我从未使用过log4j,我发现我需要学习它才能禁用它,因为它是由库强加的。

我试过

LoggerContext ctx = (LoggerContext) LogManager.getContext();
        Configuration config = ctx.getConfiguration();
        Collection<LoggerConfig> loggers = config.getLoggers().values();
        for(LoggerConfig cfg: loggers) {
          cfg.setLevel(Level.OFF);
        }

List<Logger> loggers = Collections.<Logger>list(LogManager.getCurrentLoggers());
loggers.add(LogManager.getRootLogger());
for ( Logger logger : loggers ) {
    logger.setLevel(Level.OFF);
}

但是他们不会吵架

如何禁用log4j?

1 个答案:

答案 0 :(得分:0)

很长一段时间后,我意识到另一个图书馆也使用了SLF4J,最终记录了我的消息。

最后,以下内容可被视为补救措施,或至少是针对大多数不需要的日志的临时解决方案

List<Logger> loggers = Collections.<Logger>list(LogManager.getCurrentLoggers());
loggers.add(LogManager.getRootLogger());
for ( Logger logger : loggers ) {
    logger.setLevel(Level.OFF);
}

for log4j(小心导入org.apache.logging.log4j.LogManager而不是java.util.logging.LogManager)

ch.qos.logback.classic.Logger rootLogger = (ch.qos.logback.classic.Logger)LoggerFactory.getLogger(ch.qos.logback.classic.Logger.ROOT_LOGGER_NAME);
        rootLogger.setLevel(Level.toLevel("off"));

for SLF4J

为什么第一个

LoggerContext ctx = (LoggerContext) LogManager.getContext();
        Configuration config = ctx.getConfiguration();
        Collection<LoggerConfig> loggers = config.getLoggers().values();
        for(LoggerConfig cfg: loggers) {
          cfg.setLevel(Level.OFF);
        }

无法编译我最终没想到