如何防止 spring 引导登录到指定文件和 catalina.out

How to prevent spring boot from logging both into specified file and catalina.out

我正在 spring-boot 项目(版本 1.5.1)中工作并使用 logback。我的 application.properties 具有以下日志设置:

logging.level.=info
logging.level.org.acme.myapp=info
logging.file=${catalina.home}/logs/AppLogFile.log

当应用程序记录某些内容时,这将写入指定的 AppLogFile.log 以及 catalina.out:

==> AppLogFile.log <==
2017-04-13 13:37:33.102 DEBUG 4646 --- [http-nio-8080-exec-25] c.l.c.c.controller.IndexPage             : isAllowedToSeeContent: Homebase: MOCKBASE

==> catalina.out <==
2017-04-13 13:37:33.102 DEBUG 4646 --- [io-8080-exec-25] c.l.c.c.controller.IndexPage             : isAllowedToSeeContent: Homebase: MOCKBASE

==> AppLogFile.log <==
2017-04-13 13:37:33.108 DEBUG 4646 --- [http-nio-8080-exec-25] c.l.c.c.controller.MedlistService        : MedlistService::isControlDay 2017-04-13, true

==> catalina.out <==
2017-04-13 13:37:33.108 DEBUG 4646 --- [io-8080-exec-25] c.l.c.c.controller.MedlistService        : MedlistService::isControlDay 2017-04-13, true

这似乎是additivity的问题。是否真的有必要像此处提到的那样提供 logback.xml:howto-configure-logback-for-logging? 或者有更直接的方法吗?


更新:

即使我遵循 howto 的建议并将 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>
    <appender-ref ref="FILE" />
  </root>
</configuration>

我收到以下错误(全部):

17:50:01.267 [localhost-startStop-1] DEBUG org.springframework.jndi.JndiPropertySource - JNDI lookup for name [LOGGING_patternLevel] threw NamingException with message: Name [LOGGING_patternLevel] is not bound in this Context. Unable to find [LOGGING_patternLevel].. Returning null.
17:50:01.267 [localhost-startStop-1] DEBUG org.springframework.jndi.JndiTemplate - Looking up JNDI object with name [java:comp/env/LOGGING_patternlevel]

logging.pattern.console= 设置为空字符串,似乎可以解决问题 - 但这真的是正确的解决方案吗?

您的 tomcat 的 conf/logging.properties 是否包含以下行?

.handlers = 1catalina.org.apache.juli.AsyncFileHandler, java.util.logging.ConsoleHandler

这是默认包的一部分。从中删除 ConsoleHandler 条目。

由于目标 tomcat 不在我的控制之下并且我的应用程序不是服务器上唯一的应用程序,我决定通过将 logging.pattern.console= 设置为空来禁用控制台日志记录字符串.


Olaf Kock, I'm sure, is also valid, see the Considerations for production usage 段的答案 - 但我不得不承认我没能让它工作 - 因此我无法测试它:(