我正在使用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=
设置为空字符串,似乎可以解决问题 - 但这是否真的是正确的解决方案?
答案 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段落 - 但我必须承认我没有让它工作 - 因此我无法测试它:(