如何防止spring boot同时记录到指定文件和catalina.out

时间:2017-04-13 11:52:25

标签: tomcat spring-boot logback

我正在使用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=设置为空字符串,似乎可以解决问题 - 但这是否真的是正确的解决方案?

2 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分:0)

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

来自Olaf Kock的答案,我确定,也是有效的,请参阅Considerations for production usage段落 - 但我必须承认我没有让它工作 - 因此我无法测试它:(