防止Spring Boot将日志打印到控制台

16

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

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

        logging.file= ${logger_path}

pom.xml里包含以下内容

       <logger_path>/tmp/app.log</logger_path>
当我启动该应用程序时,它将日志消息打印到位于/tmp/app.log的文件中,但问题是它也在控制台上打印日志消息。尽管我已经指定了日志文件,但我真的不明白为什么会在控制台上打印(尽管它们也被打印到了指定的文件中)。
是否有任何配置可以防止Spring Boot将日志消息打印到控制台?

通过最新的1.3.1版本在这里回答 - Pratap A.K
1
通过最新的1.3.1版本在这里进行了测试在这里回答 - Pratap A.K
5个回答

17

Spring Boot已经内置了logback日志记录器,默认配置打印到控制台。

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

如何禁用logback日志记录请见这里 -

正如您所看到的,您需要提供值OFF,例如:

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

注意: 要记住这里的一般想法是spring-boot提供的logback配置是最小的。 这意味着您需要提供自己的logback配置并完全覆盖现有的配置 - 例如,只提供具有日志文件附加器配置的自己的logback配置 - 这应该是您的一般方法。


1
但是我指定了 logging.file,难道它不应该停止在控制台上打印吗? - Karthik
1
不要检出Spring Boot中的logback base.xml文件 - 在GitHub上查找源代码 - 您将看到定义了两个日志附加器 - 文件和控制台。您提供的路径将传递给文件附加器 - 您仍然需要关闭控制台附加器。 - hovanessyan
1
文档中相关部分为this,“如果您想要除了控制台输出之外还要写入日志文件,您需要设置...” - ci_
这个解决方案对我不起作用 :( 我不得不获取base.xml的所有内容并重新定义根记录器,以便在控制台上什么都没有。 - user2668735

7
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中实现此功能? - Ondřej Stašek

3
我尝试从logback.xml中删除控制台配置,但仍在记录控制台。所以我做的是,只删除了由springboot添加到日志配置中的appender。这样,我们就可以阻止springboot在控制台和独立的日志文件中记录日志。在应用程序特定的appender添加结束后,添加以下行。您的自定义appender不应与这些appender名称匹配。这对我有用。
// get instance of your log4j instance
Logger logger = LogManager.getRootLogger();
logger.removeAppender("CONSOLE"); // stops console logging
logger.removeAppender("LOGFILE"); // stops file logging

1

这里可以找到类似的讨论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”条目。


0

已测试最新的1.3.1版本,更新的版本中base.xml已更名为defaults.xml

这里回答


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接