【问题标题】:Spring Boot: How to disable Tomcat startup logging?Spring Boot:如何禁用 Tomcat 启动日志记录?
【发布时间】:2019-06-03 06:14:01
【问题描述】:

我正在使用带有 Logback 的 Spring Boot 2.0.x。在我的应用程序启动时(使用嵌入式 tomcat),我看到几条 INFORMATION 日志消息(写入标准错误),这些消息显然直接来自嵌入式 tomcat。

与我所有的日志记录相比,这些消息似乎不是由 Logback 写入的。消息内容如下:

Jan 08, 2019 3:13:00 PM org.apache.coyote.AbstractProtocol init
INFORMATION: Initializing ProtocolHandler ["http-nio-8080"]
Jan 08, 2019 3:13:00 PM org.apache.catalina.core.StandardService startInternal
INFORMATION: Starting service [Tomcat]
Jan 08, 2019 3:13:00 PM org.apache.catalina.core.StandardEngine startInternal
INFORMATION: Starting Servlet Engine: Apache Tomcat/8.5.34
Jan 08, 2019 3:13:01 PM org.apache.catalina.core.ApplicationContext log
INFORMATION: Initializing Spring embedded WebApplicationContext

我对这些都不感兴趣,这只是噪音。我如何摆脱这些日志?我尝试了各种解决方案,但到目前为止都没有奏效。

【问题讨论】:

标签: java spring-boot tomcat logging


【解决方案1】:

好的,我花了大约 5 个小时才弄明白:

  • Tomcat 使用JULIjava.util.logging 的派生词
  • JULI 本身与java.util.logging 兼容,所以你可以同样的方式配置它
  • 启动时,嵌入式 tomcat 不会关心您的任何日志记录设置(至少它不适合我)

结果是:在我启动我的 spring-embedded tomcat 之前,我必须这样做:

java.util.logging.Logger.getLogger("org.apache").setLevel(java.util.logging.Level.WARNING);

这将指示java.util.logging(由 JULI 实现)仅将警告传播到控制台。这消除了 tomcat 的所有启动噪音,并且所有其他日志记录将由您选择的日志记录框架执行(在我的情况下为 logback),因此这根本不会影响您的标准日志记录。

【讨论】:

  • 你把这行代码放在哪里了?在主应用程序类中?
  • 在 Java main 方法中,在 (!) 启动 Spring Boot 应用程序之前。
【解决方案2】:

在 SpringBootApplication 这样启动之前,可以通过将 java.util.logging 格式化程序系统属性设置为空字符串来省略 Apache juli 日志

System.setProperty("java.util.logging.SimpleFormatter.format", "");

【讨论】:

    【解决方案3】:

    您可以在application.properties中设置以下内容:

    logging.group.tomcat=org.apache.catalina, org.apache.coyote, org.apache.tomcat logging.level.tomcat=OFF

    由于嵌入式 Tomcat 使用 JUL,这会将有关 Tomcat 相关类的 JUL 日志记录级别设置为OFF

    【讨论】:

    • 我认为应该将其设置为OFF 以禁用所有消息? TRACE 会显示一切,我认为是小错误。
    • 据我所知,嵌入式 Tomcat 使用 JULI,它是 JUL 的某种分支。我刚刚尝试了您的解决方案,不幸的是它不起作用 - 日志仍然出现在我的控制台上......
    【解决方案4】:

    查看控制台中出现的 Loggername(如果是 Log4j(2))。

    然后,复制名称并将其添加到您的 application.properties 文件中的 logging.level. .

    在下面的屏幕截图中,如果我取消注释 DispatcherServlet 行,日志记录就会消失:

    【讨论】:

      【解决方案5】:

      一种不太显眼的方法是将 JUL 配置属性文件指定为系统属性(参见 JUL JavaDocHow to set up java logging using a properties file? (java.util.logging)),并根据需要降低日志级别。

      所以添加这样一个系统属性:-Djava.util.logging.config.file=logging.properties

      并在该文件中使用这样的配置:

      .level=WARNING
      handlers=java.util.logging.ConsoleHandler
      java.util.logging.ConsoleHandler.level=WARNING
      

      使用WARNING 将使所有Tomcat 启动日志静音,但仍会显示任何问题。确保文件位置正确,我发现 JUL 只是完全静默,如果找不到,则不会给出任何提示。

      另一种方法是将 JUL 日志重新路由到 log4J 或 Logback,参见。

      【讨论】:

        猜你喜欢
        • 2019-08-30
        • 1970-01-01
        • 2015-06-24
        • 2015-02-08
        • 2022-06-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多