当前位置: 首页 > 知识库问答 >
问题:

无法使用SLF4J禁用quartz scheduler日志记录

冀耀
2023-03-14

在将quartz scheduler添加到项目中后,Tomcat的服务器日志会被垃圾邮件发送,并显示以下消息:

[信息][talledLocalContainer]12:15:06.319[DefaultQuartzScheduler\u QuartzSchedulerThread]调试o.quartz。果心QuartzSchedulerThread-批量获取0个触发器

我正在尝试禁用该日志消息,该消息大约每25秒重复一次。我已经阅读了同一问题的许多其他答案,例如:

  • 禁用石英记录
  • 停止石英调试日志记录log4j
  • 在Java中禁用Log4J输出

...建议的方法都不起作用。

我在pom中声明了以下依赖项。xml:

    <dependency>
        <groupId>org.quartz-scheduler</groupId>
        <artifactId>quartz</artifactId>
        <version>2.2.1</version>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-log4j12</artifactId>
        <version>1.7.5</version>
    </dependency>

添加了下面的log4j。“我的项目”的属性设置:

log4j.rootLogger=OFF
log4j.logger.quartz=OFF
log4j.logger.o.quartz=OFF
log4j.logger.org.quartz=OFF

...还有下面的simplelogger。属性:

org.slf4j.simpleLogger.defaultLogLevel=error

除了尝试在其中一个链接答案上建议的编程解决方案外,该解决方案应禁用所有日志记录,大致如下所示:

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

这似乎禁用了运行时来自quartz的日志消息之外的所有功能。

除了修改quartz源代码以删除它之外,还有什么方法可以摆脱quartz的日志消息吗?

共有1个答案

栾和风
2023-03-14

上面的日志条目看起来不像Log4J。我认为这是ACL或JUL。当您使用Slf4j到Log4J时,您还需要将这些框架重定向到Slf4j。还可以将这些依赖项添加到项目中:

<!--Redirect Apache Commons Logging to Slf4J -->
<dependency>
 <groupId>org.slf4j</groupId>
 <artifactId>jcl-over-slf4j</artifactId>
 <version>1.7.5</version>
</dependency>
<!--Redirect Java Util Logging to Slf4J -->
<dependency>
 <groupId>org.slf4j</groupId>
 <artifactId>jul-to-slf4j</artifactId>
 <version>1.7.5</version>
</dependency>

阅读本文档页面,了解如何将Jul重定向到Slf4J。确保排除任何现有的公共日志记录。项目中的jar文件,通过Maven。

(来自Slf4J文档页面)

如果所有其他方法都失败,请尝试以下代码:

//see if we can find the offending logger through slf4j's LoggerFactory
org.slf4j.Logger logger = 
    LoggerFactory.getLogger(Class.forName("org.quartz.core.QuartzSchedulerThread"));
if (logger != null && logger instanceof ch.qos.logback.classic.Logger) {
    //the slf4j Logger interface doesn't expose any configuration API's, but 
    //we can cast to a class that does; so cast it and disable the logger
    ((ch.qos.logback.classic.Logger)logger).setLevel(
        ch.qos.logback.classic.Level.OFF);
}
 类似资料:
  • 这也许是一个很简单的问题。如何禁用Hikari-CP调试日志?在我的日志文件我有很多这样的消息 在我的日志4jconfig中。xml: 有人能告诉我记录器配置有什么问题吗? 谢谢!

  • 我在具有以下logback.xml文件的类路径中有slf4j和logback jar(该文件以前已经成功使用过)。但是,DOCX4J3.0仍然将日志记录信息打印到标准输出。我正在使用NetBeans7.4构建基于docx4j的应用程序。我想将日志级别更改为错误,并将其发送到日志文件中。不知道我错过了什么。任何帮助都是非常感谢的。

  • 在我的Java应用程序中,我使用SLF4J+Logback进行日志记录。我在开发环境中使用调试级日志记录,在生产环境中使用错误级日志记录。但是有一些消息我无论如何都想要记录下来,无论日志级别如何(类似于,但使用的是logger)。 有什么切实可行的方法可以实现这一点吗?我可以使用error或更低的级别,但我想做的是给出一些信息,所以在语义上是错误的,它不是错误。 我可以在我的中为我的类定义另一个记

  • 我有一个项目,其中日志方面应用于方法的进入和退出。 要禁用日志,我有下面的语句,但我仍然在日志中看到方法entry、exit(带有跟踪的LogLevel) 但是,当我将loglevel更改为critical(如下所示)时,不会记录方法的进入/退出。 不应该是日志级别。无抑制进入/退出跟踪?

  • 问题内容: 我已经将一个Web应用程序部署到服务器上。我的应用程序使用和。但是,并非所有日志记录消息都已写入文件。 在我的课堂上,我有: 我的文件在本地计算机上运行良好,并且已正确部署。 我看到正在写入的应用程序生成的错误消息没有写入我的。由于输出模式的格式与我的模式不同,因此看起来的日志消息来自其他日志框架。我在中看到的日志记录如下: 我的log4j模式是这样的: 一些日志记录出现在我的文件日志