【问题标题】:Prevent Spring Boot from printing logs to console防止 Spring Boot 将日志打印到控制台
【发布时间】:2015-08-11 06:58:43
【问题描述】:

我正在为我的应用程序使用 Spring Boot,并且我正在使用默认的 Spring Boot 日志记录。

在我的application.properties 中,我添加了logging.file 的文件路径,

        logging.file= ${logger_path}

我的pom.xml 包含

       <logger_path>/tmp/app.log</logger_path>

当我启动应用程序时,它会将日志消息打印到/tmp/app.log 的文件中,但问题是它还会在控制台上打印日志消息。当我指定log file 时,我真的不明白为什么它会在控制台上打印(虽然它正在将它们打印到指定的文件)。

是否有任何配置可以防止 Spring Boot 将日志消息打印到控制台?

【问题讨论】:

标签: java spring spring-boot


【解决方案1】:

Spring boot 自带 logback logger,默认配置为打印到控制台。

您需要覆盖logback 配置(在类路径中提供您自己的logback.xml)。 这在here - - 第 66.1 节中描述

如何禁用 logback 日志读取 here -

如您所见,您必须提供值 OFF...类似于:

<configuration>
  <include resource="base.xml" />
   .
   .
  <property name="root.level.console" value="OFF" />
</configuration>

注意:请记住,这里的一般想法是来自 spring-boot 的 logback 配置是最小的。目的是您提供自己的 logback 配置并完全覆盖现有配置 - 例如提供您自己的 logback 配置,仅配置 log file-appender - 这应该是您的一般方法。

【讨论】:

  • 但我指定了logging.file 对吗?它不应该停止将其打印到控制台吗?
  • 没有。在 spring-boot 中签出 logback base.xml - 在 github 上查找源代码 - 您将看到定义的两个日志附加程序 - 文件和控制台。您提供的路径将传递给文件附加程序 - 您仍然必须关闭控制台附加程序。
  • 文档的相关部分是this“如果你想写日志文件除了到你需要设置的控制台输出...”
  • 这个解决方案对我不起作用 :( 我必须获取 base.xml 的所有内容并重新定义根记录器才能在控制台上没有任何内容。
【解决方案2】:

logback-spring.xml 中使用以下配置包含file-appender.xml 而不是console-appender

<?xml version="1.0" encoding="UTF-8"?>
    <configuration>
        <include resource="org/springframework/boot/logging/logback/defaults.xml" />
        <property name="LOG_FILE" value="${LOG_FILE:-${LOG_PATH:-${LOG_TEMP:-${java.io.tmpdir:-/tmp}}/}spring.log}"/>
        <include resource="org/springframework/boot/logging/logback/file-appender.xml" />
        <root level="INFO">
            <appender-ref ref="FILE" />
        </root>
    </configuration>

您还需要将logging.file 添加到您的application.properties

这符合 Spring Boot 文档中提到的内容 - http://docs.spring.io/spring-boot/docs/current/reference/html/howto-logging.html

【讨论】:

  • 以及如何使用 application.properties 来实现这一点?
【解决方案3】:

我尝试从 logback.xml 中删除控制台配置。但是,它仍在登录控制台。所以我所做的是,我只是删除了 springboot 在日志配置中添加的 appender。因此,我们可以在控制台中停止 springboot 日志记录并分离日志文件。在添加应用程序特定附加程序的末尾添加以下行。您的自定义附加程序不应与这些附加程序名称中的任何一个匹配。它对我有用。

// get instance of your log4j instance
Logger logger = LogManager.getRootLogger();
logger.removeAppender("CONSOLE"); // stops console logging
logger.removeAppender("LOGFILE"); // stops file logging

【讨论】:

    【解决方案4】:

    可以找到类似的讨论here

    我的 logback.xml 看起来像这样:

    <?xml version="1.0" encoding="UTF-8"?>
    <configuration>
      <include resource="org/springframework/boot/logging/logback/defaults.xml" />
      <include resource="org/springframework/boot/logging/logback/file-appender.xml" />
    
      <root level="INFO">
        <appender-ref ref="FILE" />
      </root>
    </configuration>
    

    以防万一您仍然遇到问题:我已经阅读了许多关于该主题的讨论,但它对我根本不起作用。不幸的是,当我第一次创建文件 logback.xml 时,我犯了一个非常愚蠢的错误:在文件名的开头添加了一个空格。因此该文件从未使用过。因此,只需再查看文件名,将文件添加到“src/main/resources”中并从属性文件中删除所有“logging.config”条目。

    【讨论】:

      【解决方案5】:

      使用最新的 1.3.1 版本进行测试,更新版本的 base.xml 已重命名为 defaults.xml

      Answer here

      【讨论】:

        猜你喜欢
        • 2019-12-15
        • 2016-04-28
        • 2016-03-22
        • 2020-01-04
        • 1970-01-01
        • 1970-01-01
        • 2015-10-28
        • 1970-01-01
        • 2023-04-01
        相关资源
        最近更新 更多