Spring Boot忽略来自外部application.properties的日志记录级别

问题描述:

我正在运行打包在Tomcat war文件中的Spring Boot(version 1.5.2.RELEASE)应用程序。在我的上下文文件(conf/Catalina/localhost/ROOT.xml)我指定的路径外部属性文件是这样的:Spring Boot忽略来自外部application.properties的日志记录级别

<?xml version="1.0" encoding="UTF-8"?> 
<Context> 
    <Environment name="spring.config.location" value="file:/opt/shared/home/.airlines-data/" type="java.lang.String"/> 
</Context> 

路径/opt/shared/home/.airlines-data/里面我有一个application.properties文件与休耕行:

logging.level.root=WARN 
logging.level.org.hibernate=ERROR 
logging.level.org.springframework.web=WARN 
spring.jpa.properties.hibernate.show_sql=false 
spring.jpa.show-sql=false 
logging.file=/opt/shared/home/.airlines-data/Errors.log 

的文件正确读取。该属性logging.file=/opt/shared/home/.airlines-data/Errors.log也正确加载,如果我将其值更改为别的东西,一切按预期工作。不幸的是,Spring Boot忽略了所有的日志级别设置。它记录从INFO级别和以上的所有内容。另外Hibernate将所有查询记录到日志文件中。这使得日志文件在很短的时间内变得非常大。有没有其他方法可以将日志记录级别更改为WARN或ERROR,并使用外部配置禁用Hibernate SQL日志记录?我正在使用Spring Boot提供的标准日志记录设置。下面是我的依赖关系:

dependencies { 
    compile('org.springframework.boot:spring-boot-starter-jdbc') 
    compile('org.springframework.boot:spring-boot-starter-jooq') 
    compile('org.springframework.boot:spring-boot-starter-data-jpa') 
    compile('org.liquibase:liquibase-core') 
    compile('org.springframework.boot:spring-boot-starter-security') 
    compile('org.springframework.boot:spring-boot-starter-thymeleaf') 
    compile('org.springframework.boot:spring-boot-starter-web') 
    compile('org.springframework.boot:spring-boot-starter-mail') 
    compile("org.springframework:spring-messaging") 
    compile('org.apache.commons:commons-lang3:3.4') 
    compile('commons-io:commons-io:2.4') 
    compile('commons-beanutils:commons-beanutils:1.9.2') 
    compile('com.samaxes.filter:cachefilter:2.3.1') 
    compile('com.monitorjbl:xlsx-streamer:0.2.12') 
    compile('org.apache.commons:commons-csv:1.2') 
    compile('org.imgscalr:imgscalr-lib:4.2') 
    compile('xerces:xercesImpl:2.11.0') 
    compile('com.fasterxml.jackson.datatype:jackson-datatype-hibernate4:2.6.4') 
    compile('org.thymeleaf.extras:thymeleaf-extras-springsecurity4:2.1.2.RELEASE') 
    compile('org.jodd:jodd-mail:3.7.1') 
    providedRuntime('org.springframework.boot:spring-boot-starter-tomcat') 
    testCompile('org.springframework.boot:spring-boot-starter-test') 
} 

我的error.log文件填满真的很快,并包含类似的很多线路:

2017-02-17 18:45:13.338 DEBUG 5168 --- [localhost-startStop-1] o.s.boot.SpringApplication    : Loading source class pl.eb2b.AirlinesApplication,class org.springframework.boot.context.web.ErrorPageFilter 
2017-02-17 18:45:13.851 DEBUG 5168 --- [localhost-startStop-1] 
2017-02-17 18:45:13.851 DEBUG 5168 --- [localhost-startStop-1] o.s.b.c.c.ConfigFileApplicationListener : Loaded config file 'file:/opt/shared/home/.airlines-data/application.properties' 
2017-02-17 18:45:13.852 DEBUG 5168 --- [localhost-startStop-1] o.s.b.c.c.ConfigFileApplicationListener : Loaded config file 'classpath:/application.properties' 
2017-02-18 00:21:34.997 DEBUG 9026 --- [http-nio-8080-exec-8] o.s.b.c.web.OrderedRequestContextFilter : Bound request context to thread: [email protected] 
2017-02-18 00:21:35.000 DEBUG 9026 --- [http-nio-8080-exec-8] o.s.b.c.web.OrderedRequestContextFilter : Cleared thread-bound request context: [email protected] 
2017-02-20 13:15:09.526 DEBUG 11701 --- [http-nio-8080-exec-4] org.hibernate.SQL      : select count(*) as y0_ from cars_car_contract this_ 

我也曾尝试把的logback-spring.xml文件中我类路径:

<?xml version="1.0" encoding="UTF-8"?> 
<configuration> 
    <include resource="org/springframework/boot/logging/logback/base.xml"/> 
    <root level="WARN"> 
     <appender-ref ref="CONSOLE" /> 
     <appender-ref ref="FILE" /> 
    </root> 
    <logger name="org.hibernate" level="ERROR" additivity="false"> 
     <appender-ref ref="CONSOLE"/> 
     <appender-ref ref="FILE"/> 
    </logger> 
</configuration> 

它在我的本地机器上工作,但在服务器上被忽略。

更新2017年4月7日:

我发现在catalina.out的日志中包含已打印到控制台一切一些附加信息(也许这将是有益的):

07-Apr-2017 06:12:48.736 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_BASE:   /opt/repo/versions/8.5.3 
07-Apr-2017 06:12:48.736 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_HOME:   /opt/repo/versions/8.5.3 
07-Apr-2017 06:12:48.736 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.util.logging.config.file=/opt/repo/versions/8.5.3/conf/logging.properties 
07-Apr-2017 06:12:48.736 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager 
07-Apr-2017 06:12:48.736 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -DReceiverIp= 
07-Apr-2017 06:12:48.737 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -DMagicPort= 
07-Apr-2017 06:12:48.737 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djvm=jelastic 
07-Apr-2017 06:12:48.737 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.awt.headless=true 
07-Apr-2017 06:12:48.737 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.net.preferIPv4Stack=true 
07-Apr-2017 06:12:48.737 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -DjvmRid= 
07-Apr-2017 06:12:48.737 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Xms32M 
07-Apr-2017 06:12:48.737 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Xmn30M 
07-Apr-2017 06:12:48.737 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Xmx512M 
07-Apr-2017 06:12:48.737 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Xminf0.1 
07-Apr-2017 06:12:48.738 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Xmaxf0.3 
07-Apr-2017 06:12:48.738 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -XX:+UseG1GC 
07-Apr-2017 06:12:48.738 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -XX:+UseCompressedOops 
07-Apr-2017 06:12:48.738 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -XX:MinHeapFreeRatio=15 
07-Apr-2017 06:12:48.738 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -XX:MaxHeapFreeRatio=30 
07-Apr-2017 06:12:48.738 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djdk.tls.ephemeralDHKeySize=2048 
07-Apr-2017 06:12:48.738 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcatalina.base=/opt/repo/versions/8.5.3 
07-Apr-2017 06:12:48.738 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcatalina.home=/opt/repo/versions/8.5.3 
07-Apr-2017 06:12:48.738 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.io.tmpdir=/opt/repo/versions/8.5.3/temp 

由于我的服务器是基于Jelastic的云服务器,因此使用这些参数自动配置它。不知道它是否有什么要做,但参数-Djava.util.logging.config.file=/opt/repo/versions/8.5.3/conf/logging.properties看起来像它与日志记录有关。以下是该文件的内容:

handlers = 1catalina.org.apache.juli.AsyncFileHandler, 2localhost.org.apache.juli.AsyncFileHandler, 3manager.org.apache.juli.AsyncFileHandler, 4host-manager.org.apache.juli.AsyncFileHandler, java.util.logging.ConsoleHandler 

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

1catalina.org.apache.juli.AsyncFileHandler.level = FINE 
1catalina.org.apache.juli.AsyncFileHandler.directory = ${catalina.base}/logs 
1catalina.org.apache.juli.AsyncFileHandler.prefix = catalina. 

2localhost.org.apache.juli.AsyncFileHandler.level = FINE 
2localhost.org.apache.juli.AsyncFileHandler.directory = ${catalina.base}/logs 
2localhost.org.apache.juli.AsyncFileHandler.prefix = localhost. 

3manager.org.apache.juli.AsyncFileHandler.level = FINE 
3manager.org.apache.juli.AsyncFileHandler.directory = ${catalina.base}/logs 
3manager.org.apache.juli.AsyncFileHandler.prefix = manager. 

4host-manager.org.apache.juli.AsyncFileHandler.level = FINE 
4host-manager.org.apache.juli.AsyncFileHandler.directory = ${catalina.base}/logs 
4host-manager.org.apache.juli.AsyncFileHandler.prefix = host-manager. 

java.util.logging.ConsoleHandler.level = FINE 
java.util.logging.ConsoleHandler.formatter = org.apache.juli.OneLineFormatter 


org.apache.catalina.core.ContainerBase.[Catalina].[localhost].level = WARNING 
org.apache.catalina.core.ContainerBase.[Catalina].[localhost].handlers = 2localhost.org.apache.juli.AsyncFileHandler 

org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/manager].level = INFO 
org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/manager].handlers = 3manager.org.apache.juli.AsyncFileHandler 

org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/host-manager].level = INFO 
org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/host-manager].handlers = 4host-manager.org.apache.juli.AsyncFileHandler 
+0

哪个记录您使用的消失?是什么让你认为它忽略了所有的水平?请提供您正在使用的任何记录器的配置,如log4j,slf4j等。 –

+0

我使用默认的Spring Boot配置,因此记录器应该是Logback。除了来自application.properties的那些行之外,我不使用任何记录器配置。我更新了日志文件中几条示例行的问题。今天的日志已经有1.5MB的大小,所有的条目都来自DEBUG级别。另外,当我尝试在本地机器上使用此配置(Spring Boot作为嵌入Tomcat的jar文件运行时),它按预期工作并隐藏所有这些日志消息。当Spring Boot作为Tomcat内部的war文件运行时,只会在生产服务器上发生此问题。 –

+0

您指定的输出显示已使用自定义模式。因此请检查您的生产服务器的上下文路径并搜索资源路径。必须有一些logback xml/groovy文件或log4j properties/xml文件。或者最糟糕的情况下,任何配置类都会根据服务器环境或配置文件管理设置日志级别。 –

有些文章(12),我们能够找到说以下内容:

默认的日志记录在春季启动

春天引导参考支持文件说:

默认情况下,如果您使用“Starter POM”,Logback将用于 日志记录。还包括适当的Logback路由,以确保使用Java Util日志记录,Commons日志记录,Log4J 或SLF4J的依赖库都能正常工作。

因此,您可以在应用程序中调整SpringBoot的日志级别。属性文件,最有可能通过这条路径:改变完成

cat /opt/tomcat/webapps/ROOT/WEB-INF/classes/application.properties 
logging.level.*=OFF 
logging.level.org.springframework.web=WARN 
logging.level.org.springframework.boot=OFF 
logging.level.org.hibernate.SQL=OFF 

后,DEBUG消息应该从catalina.out的