【问题标题】:spring-boot - turn off console loggingspring-boot - 关闭控制台日志记录
【发布时间】:2016-09-07 06:03:40
【问题描述】:

想要配置 spring-boot (1.3.5) 应用程序以仅将日志输出发送到文件 -- 关闭控制台。

根据文档,这看起来很简单: howto-logging.html -- 部分 § 72.1.1 为仅文件输出配置 logback

但我无法让它工作——无论我尝试什么,它仍然将both记录到文件控制台。 谷歌搜索了几个小时,但找不到任何实际可行的建议。

任何线索可能是什么问题?

编辑:请不要将此标记为“重复”-我已全部阅读-建议的解决方案均无效在这里。

【问题讨论】:

  • 很高兴知道您的 POM 是如何配置的。

标签: java spring spring-boot logback slf4j


【解决方案1】:

这对我有用。

logging:
  pattern:
    console=:
  level
    root=OFF

【讨论】:

    【解决方案2】:

    在 application.properties 中设置 logging.pattern.console=(值留空)对我有用。

    【讨论】:

    • @prashanth-g 这只是为控制台中的每个日志行写入“false”!
    【解决方案3】:

    终于 --- 我找到了错误... 这是一个多模块构建,结果在一个子模块中,还有一个 logback.xml,显然优先于 logback-spring.xml我正在摆弄。当我从构建中排除另一个文件时,它终于按预期工作了。呼……

    【讨论】:

      【解决方案4】:

      设置完成后,以下是我遵循的步骤:

      使用这个 pom 文件创建一个演示 Spring Boot web 项目:

      <?xml version="1.0" encoding="UTF-8"?>
      <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
          <modelVersion>4.0.0</modelVersion>
      
          <groupId>com.example</groupId>
          <artifactId>demo2</artifactId>
          <version>0.0.1-SNAPSHOT</version>
          <packaging>jar</packaging>
      
          <name>demo2</name>
          <description>Demo project for Spring Boot</description>
      
          <parent>
              <groupId>org.springframework.boot</groupId>
              <artifactId>spring-boot-starter-parent</artifactId>
              <version>1.3.5.RELEASE</version>
              <relativePath /> <!-- lookup parent from repository -->
          </parent>
      
          <properties>
              <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
              <java.version>1.8</java.version>
          </properties>
      
          <dependencies>
              <dependency>
                  <groupId>org.springframework.boot</groupId>
                  <artifactId>spring-boot-starter-web</artifactId>
              </dependency>
          </dependencies>
      
          <build>
              <plugins>
                  <plugin>
                      <groupId>org.springframework.boot</groupId>
                      <artifactId>spring-boot-maven-plugin</artifactId>
                  </plugin>
              </plugins>
          </build>
      
      </project>
      

      正如in the docs 所说,日志记录启动器不是必需的,因为它已经包含在网络启动器中。让我们创建一个带有一些 slf4j 日志记录的 @Service(这根本没有必要):

      @Service
      public class MyService {
      
          private Logger logger = LoggerFactory.getLogger(MyService.class);
      
          public MyService() {
              logger.info("Created!");
          }
      
      }
      

      然后,我们创建一个 logback-spring.xml 文件,只配置文件 appender 而不是控制台的那个,正如文档所建议的那样。将其保存在 src/main/resources 文件夹中,Maven 将其放在类路径的根目录中:

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

      当项目启动时,初始日志会显示在控制台中,但不会再显示输出,因为它会被重定向到 target/spring.log 文件。

      【讨论】:

        【解决方案5】:

        只需在您的类路径根目录中添加 logback.xml 并包含以下内容:

        <?xml version="1.0" encoding="UTF-8" ?>
        <configuration>
            <appender name="FILE_APPENDER" class="ch.qos.logback.core.FileAppender">
                <file>myApp.log</file>
                <encoder>
                    <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
                </encoder>
            </appender>
        
            <root level="INFO">
                <appender-ref ref="FILE_APPENDER" />
            </root>
        </configuration>
        

        这会将所有日志写入myApp.log 文件。结帐Spring Boot documentation 以获得更详细的讨论。

        【讨论】:

        • 正如我所写,我确定已经阅读了该死的文档,但它只是拒绝工作! :) --- 无论如何,我意识到我必须为此设置一个演示/poc,并将推送到 github,如果我能演示它---我会回来......