2014-02-12 66 views
30

我们有一个spring-boot 1.0.RC1应用程序,在src/test/resources中配置logback配置的logback和logback.xml文件。当我们从maven运行spring-boot时,logback文件似乎被看到并受到尊重。 (这就是我们的弹簧开机logo后需要日志记录格式)-Dlogback.configurationFile =在运行Spring-Boot时忽略logback.xml

D:\Users\myName\My Projects\Work\my-co\my-app\src\my-app\my-app-camel>mvn clean spring-boot:run -Dlogback.statusListenerClass=ch.qos.logback.core.status.OnConsoleStatusListener -Dlogback.configurationFile=src/test/resources/logback.xml 

<snip/> 

[INFO] --- spring-boot-maven-plugin:0.5.0.M7:run (default-cli) @ my-app-camel --- 
06:41:56,011 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Found resource [src/test/resources/logback.xml] at [file:/D:/Users/myName/My%20Projects/Work/my-co/my-app/src/my-app/my-app-camel/src/test/resources/logback.xml] 
06:41:56,150 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - debug attribute not set 
06:41:56,170 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - Setting ReconfigureOnChangeFilter scanning period to 5 seconds 
06:41:56,171 |-INFO in ReconfigureOnChangeFilter{invocationCounter=0} - Will scan for changes in [[D:\Users\myName\My Projects\Work\my-co\my-app\src\my-app\my-app-camel\src\test\resources\logback.xml]] every 5 seconds. 
06:41:56,172 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - Adding ReconfigureOnChangeFilter as a turbo filter 
06:41:56,223 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - About to instantiate appender of type [ch.qos.logback.core.ConsoleAppender] 
06:41:56,233 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - Naming appender as [STDOUT] 
06:41:56,276 |-INFO in ch.qos.logback.core.joran.action.NestedComplexPropertyIA - Assuming default type [ch.qos.logback.classic.encoder.PatternLayoutEncoder] for [encoder] property 
06:41:56,389 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - About to instantiate appender of type [me.moocar.logbackgelf.GelfAppender] 
06:41:56,398 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - Naming appender as [GELF] 
06:41:56,567 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [com.my-co.my-app.] to DEBUG 
06:41:56,568 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting additivity of logger [com.my-co.my-app.] to false 
06:41:56,569 |-INFO in ch.qos.logback.core.joran.action.AppenderRefAction - Attaching appender named [STDOUT] to Logger[com.my-co.my-app.] 
06:41:56,571 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [org.] to DEBUG 
06:41:56,572 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting additivity of logger [org.] to false 
06:41:56,572 |-INFO in ch.qos.logback.core.joran.action.AppenderRefAction - Attaching appender named [STDOUT] to Logger[org.] 
06:41:56,573 |-INFO in ch.qos.logback.classic.joran.action.RootLoggerAction - Setting level of ROOT logger to INFO 
06:41:56,574 |-INFO in ch.qos.logback.core.joran.action.AppenderRefAction - Attaching appender named [STDOUT] to Logger[ROOT] 
06:41:56,574 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - End of configuration. 
06:41:56,578 |-INFO in [email protected] - Registering current configuration as safe fallback point 

    . ____   _   __ _ _ 
/\\/___'_ __ _ _(_)_ __ __ _ \ \ \ \ 
(()\___ | '_ | '_| | '_ \/ _` | \ \ \ \ 
\\/ ___)| |_)| | | | | || (_| | )))) 
    ' |____| .__|_| |_|_| |_\__, |//// 
=========|_|==============|___/=/_/_/_/ 
:: Spring Boot ::   (v1.0.0.RC1) 

06:41:57.436 [com.my-co.my-app.Application.main()] INFO com.my-co.my-app.Application - Starting Application on MY-LAPTOP-HOSTNAME with PID 7812 (started by myName) 
06:41:57.952 [com.my-co.my-app.Application.main()] INFO o.s.b.f.xml.XmlBeanDefinitionReader - Loading XML bean definitions from class path resource [META-INF/spring/camel-server.xml] 

<etc./> 

然而,当我们删除其潜入的src/JAVA /资源,并与其他一切不变,重新运行一个流氓logback.xml文件(确保我们清理删除一个在目标太):

D:\Users\myName\My Projects\Work\my-co\my-app\src\my-app\my-app-camel>mvn clean spring-boot:run -Dlogback.statusListenerClass=ch.qos.logback.core.status.OnConsoleStatusListener -Dlogback.configurationFile=src/test/resources/logback.xml 

<snip/> 

[INFO] 
[INFO] <<< spring-boot-maven-plugin:1.0.0.RC1:run (default-cli) @ my-app-camel <<< 
[INFO] 
[INFO] --- spring-boot-maven-plugin:1.0.0.RC1:run (default-cli) @ my-app-camel --- 
06:53:59,598 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Found resource [src/test/resources/logback.xml] at [file:/D:/Users/myName/My%20Projects/Work/my-co/my-app/src/my-app/my-app-camel/src/test/resources/logback.xml] 
06:53:59,736 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - debug attribute not set 
06:53:59,755 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - Setting ReconfigureOnChangeFilter scanning period to 5 seconds 
06:53:59,756 |-INFO in ReconfigureOnChangeFilter{invocationCounter=0} - Will scan for changes in [[D:\Users\myName\My Projects\Work\my-co\my-app\src\my-app\my-app-camel\src\test\resources\logback.xml]] every 5 seconds. 
06:53:59,757 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - Adding ReconfigureOnChangeFilter as a turbo filter 
06:53:59,806 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - About to instantiate appender of type [ch.qos.logback.core.ConsoleAppender] 
06:53:59,817 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - Naming appender as [STDOUT] 
06:53:59,858 |-INFO in ch.qos.logback.core.joran.action.NestedComplexPropertyIA - Assuming default type [ch.qos.logback.classic.encoder.PatternLayoutEncoder] for [encoder] property 
06:53:59,971 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - About to instantiate appender of type [me.moocar.logbackgelf.GelfAppender] 
06:53:59,980 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - Naming appender as [GELF] 
06:54:00,144 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [com.my-co.my-app.] to DEBUG 
06:54:00,144 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting additivity of logger [com.my-co.my-app.] to false 
06:54:00,145 |-INFO in ch.qos.logback.core.joran.action.AppenderRefAction - Attaching appender named [STDOUT] to Logger[com.my-co.my-app.] 
06:54:00,148 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [org.] to DEBUG 
06:54:00,148 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting additivity of logger [org.] to false 
06:54:00,149 |-INFO in ch.qos.logback.core.joran.action.AppenderRefAction - Attaching appender named [STDOUT] to Logger[org.] 
06:54:00,150 |-INFO in ch.qos.logback.classic.joran.action.RootLoggerAction - Setting level of ROOT logger to DEBUG 
06:54:00,150 |-INFO in ch.qos.logback.core.joran.action.AppenderRefAction - Attaching appender named [STDOUT] to Logger[ROOT] 
06:54:00,151 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - End of configuration. 
06:54:00,154 |-INFO in [email protected] - Registering current configuration as safe fallback point 

    . ____   _   __ _ _ 
/\\/___'_ __ _ _(_)_ __ __ _ \ \ \ \ 
(()\___ | '_ | '_| | '_ \/ _` | \ \ \ \ 
\\/ ___)| |_)| | | | | || (_| | )))) 
    ' |____| .__|_| |_|_| |_\__, |//// 
=========|_|==============|___/=/_/_/_/ 
:: Spring Boot ::   (v1.0.0.RC1) 

2014-02-12 06:54:01.023 INFO 5240 --- [lication.main()] com.my-co.my-app.Application   : Starting Application on MY-LAPTOP-HOSTNAME with PID 5240 (started by myName) 
2014-02-12 06:54:01.564 INFO 5240 --- [lication.main()] o.s.b.f.xml.XmlBeanDefinitionReader  : Loading XML bean definitions from class path resource [META-INF/spring/camel-server.xml] 

<etc./> 

你会发现,春天启动后的日志记录格式是开始从第一输出不同。然而,logback(在Spring-Boot开始之前)报告它在src/test/resources中看到了logback.xml,就像它第一次一样。

对于兴趣,我们logback.xml(这是在双方的src/JAVA /资源和src /测试/资源如下:

<?xml version="1.0" encoding="UTF-8"?> 
<configuration scan="true" scanPeriod="5 seconds"> 

    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> 
     <encoder> 
      <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{40} - %msg%n</pattern> 
     </encoder> 
    </appender> 

    <appender name="GELF" class="me.moocar.logbackgelf.GelfAppender"> 
     <facility>logback-gelf-test</facility> 
     <graylog2ServerHost>XXX.XXX.XXX.XXX</graylog2ServerHost> 
     <graylog2ServerPort>NNNNN</graylog2ServerPort> 
     <useLoggerName>true</useLoggerName> 
     <useThreadName>true</useThreadName> 
     <useMarker>true</useMarker> 
     <graylog2ServerVersion>0.9.6</graylog2ServerVersion> 
     <chunkThreshold>1000</chunkThreshold> 
     <messagePattern>%m%rEx</messagePattern> 
     <shortMessagePattern>%.-100(%m%rEx)</shortMessagePattern> 
     <additionalField>ipAddress:_ip_address</additionalField> 
     <additionalField>requestId:_request_id</additionalField> 
     <staticAdditionalField>_node_name:www013</staticAdditionalField> 
     <includeFullMDC>true</includeFullMDC> 
    </appender> 

    <logger name="com.my-co.my-app." level="DEBUG" additivity="false"> 
     <appender-ref ref="STDOUT" /> 
    </logger> 

    <logger name="org." level="DEBUG" additivity="false"> 
     <appender-ref ref="STDOUT" /> 
    </logger> 

    <root level="INFO"> 
     <appender-ref ref="STDOUT" /> 
     <!--<appender-ref ref="GELF" />--> 
    </root> 

</configuration> 

因此,在总结,似乎(虽然我可能是错的)当一个logback.xml与我的spring-boot应用程序捆绑在一起时,它可以被看到并被使用(即在src/java/resources中),但是当我们不捆绑时,尽管logback尽了最大的努力,但是它被忽略了。

至于解决这个问题,我们被难住了,我们猜测在我们的spring-boot jar中有某些东西在某种程度上被优先考虑,或者关闭了logback,或者进入并告诉logback忽略刚刚被告知的内容并使用其他默认值。

另外,我们正在愚蠢,但看不到它。感谢所有的帮助。

+0

你可以发布你的春季启动依赖?你添加了执行器吗? –

回答

49

默认策略假定如果您在类路径中没有logback.xml(或其他标准文件名),那么您必须满意默认设置(有关详细信息,请参见LogbackLoggingSystem)。 Spring Boot试图统一用于常见日志记录系统的外部配置开关,因此它在logging.config(它不知道logback.configurationFile)中查找。您可以使用它(即logging.config=file:./src/test/resources/logback.xml),或者确保您的配置文件位于类路径中。

+0

干杯@Dave。我现在试试看,回复你。 –

+2

谢谢@Dave。这工作。干杯 –

+1

@Dave:我刚刚从Google来到这里:系统属性'logback.configurationFile'适用于我,但不适用'logging.config'(logback v1.1.2) – xav

18

我知道这个帖子是有点老,但加入以下application.properties是基于戴夫Syer的回答一个快速的解决方法:

logging.config=${logback.configurationFile} 
11

Spring Boot documentation,你可以像这样运行:

java -jar app.jar --logging.config=./src/test/resources/logback.xml 

此外,Spring Boot试图统一不同日志startegies的属性名称。因此,JVM参数Dlogback.configurationFile is not used for Spring Boot

+0

this奇迹般有效!谢谢 –

相关问题