java - 禁用外部库上的日志记录框架

标签 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?

最佳答案

过了很长一段时间,我意识到 SLF4J 也被另一个库使用,该库最终记录了我的消息。

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

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

对于 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"));

对于 SLF4J

为什么是第一个

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

无法编译,我最后也没弄清楚

关于java - 禁用外部库上的日志记录框架,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42690933/

相关文章:

java - 如何为 100 个类创建一个记录器

java - 无法使用 IdeEventQueue 错误构建应用程序

java - 在迭代 map 时使用反射

java - 从 AEM (CQ5) 到 Log4j 服务器的日志管道

java - 在 log4j 中使用系统属性或变量

java - PatternLayout (log4j) 的 C、F、L、l 和 M 到底有多慢?

java - 带时间的日志文件名不能正常工作

java - 如何使用 spring Rest api 从 hibernate 中的两个表中获取数据并以单个对象返回到 url

java - 方法 renderJSON(Map<String,String>) 未定义

java - 查询在 java 中创建单独的线程?