Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 防止Spring引导将日志打印到控制台_Java_Spring_Spring Boot - Fatal编程技术网

Java 防止Spring引导将日志打印到控制台

Java 防止Spring引导将日志打印到控制台,java,spring,spring-boot,Java,Spring,Spring Boot,我正在为我的应用程序使用SpringBoot,并且使用默认的SpringBoot日志记录 在我的application.properties中,我添加了logging.file的文件路径 logging.file= ${logger_path} 我的pom.xml包含 <logger_path>/tmp/app.log</logger_path> /tmp/app.log 启动应用程序时,它会将日志消息打印到/tmp/app.log文件

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

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

        logging.file= ${logger_path}
我的
pom.xml
包含

       <logger_path>/tmp/app.log</logger_path>
/tmp/app.log
启动应用程序时,它会将日志消息打印到
/tmp/app.log
文件中,但问题是它也会在控制台上打印日志消息。当我指定了一个
日志文件时,我真的不明白为什么它要在控制台上打印(,尽管它正在将它们打印到指定的文件中)


是否有任何配置可防止spring boot将日志消息打印到控制台

Spring boot附带内置的
logback
logger,默认情况下配置为打印到控制台

您需要覆盖
logback
配置(在类路径上提供您自己的
logback.xml
)。 第66.1节对此进行了描述

如何禁用回写日志读取-

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

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

.
.

注意:请记住,这里的一般想法是,来自spring boot的logback配置是最小的。其目的是您提供自己的logback配置,并完全覆盖现有的logback配置—例如,仅配置日志文件附加器即可提供自己的logback配置—这应该是您的常规方法。

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

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

类似的讨论也可以找到

我的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”条目。

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


包括
文件appender.xml
和非
控制台appender
,并在
logback spring.xml
中进行以下配置:

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


但我指定了
日志记录.file
对吗?它不应该停止打印到控制台吗?不。在spring boot中签出logback base.xml-在github上查找源代码-您将看到定义了两个日志附加器-文件和控制台。您提供的路径将传递到文件appender-您仍然必须关闭console-appender。文档的相关部分是“如果您想在需要设置的控制台输出之外写入日志文件…”此解决方案不适用于我:(我必须获取base.xml的所有内容并重新定义根记录器,以便在控制台上没有任何内容。最新的1.3.1版本和最新的1.3.1版本在这里测试,如何使用application.properties实现这一点?