복붙노트

[SPRING] -Dlogback.configurationFile = spring-boot를 실행할 때 logback.xml이 무시됩니다.

SPRING

-Dlogback.configurationFile = spring-boot를 실행할 때 logback.xml이 무시됩니다.

로깅을 위해 구성된 로그백과 src / test / resources에 logback.xml 파일이있는 spring-boot 1.0.RC1 응용 프로그램이 있습니다. 우리가 maven에서 spring-boot를 실행할 때 로그백 파일이 보이고 존중되는 것 같습니다. (스프링 부트 로고 다음에 필요한 로깅 형식입니다)

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 ch.qos.logback.classic.joran.JoranConfigurator@4ffdcca5 - 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 / resources에 갇혀있는 rogue 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 ch.qos.logback.classic.joran.JoranConfigurator@54c1f582 - 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./>

봄 부팅 시작 후 로깅 형식은 첫 번째 출력과 다릅니다. 그러나, Log-back (Spring-Boot가 시작되기 이전)은 처음과 마찬가지로 src / test / resources의 logback.xml을보고합니다.

관심을 끌기 위해 우리의 logback.xml (src / java / resources와 src / test / resources 모두에 있음)은 다음과 같습니다.

<?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 app와 함께 번들 될 때 (예 : src / java / resources) 볼 수 있지만 사용하는 것처럼 보이지만 (그러나 잘못되었을 수도 있음) 로그백의 최선의 노력에도 불구하고 무시됩니다.

이것을 고치는 것에 관해서는, 우리는 뒤죽박죽이다. 우리는 spring-boot jar에 어딘가에 우선 순위를 두거나 logback을 끄거나 logback에 방금 들었던 것을 무시하고 다른 기본값을 사용하도록 지시하는 뭔가가 있다고 추측합니다.

또는 우리는 바보 같지만 그것을 볼 수 없습니다. 모든 도움을 기꺼이 받아 들였습니다.

해결법

  1. ==============================

    1.기본 전략에서는 classpath에 logback.xml (또는 다른 표준 파일 이름 중 하나)이없는 경우 기본값에 만족해야한다고 가정합니다 (자세한 내용은 LogbackLoggingSystem 참조). Spring Boot는 일반적인 로깅 시스템을위한 외부 설정 스위치를 통합하려고 시도하기 때문에 logging.config (logback.configurationFile에 대해 알지 못함)를 조사합니다. 대신 (예 : logging.config = file : ./ src / test / resources / logback.xml)이를 사용하거나 설정 파일이 클래스 경로에 있는지 확인할 수 있습니다.

    기본 전략에서는 classpath에 logback.xml (또는 다른 표준 파일 이름 중 하나)이없는 경우 기본값에 만족해야한다고 가정합니다 (자세한 내용은 LogbackLoggingSystem 참조). Spring Boot는 일반적인 로깅 시스템을위한 외부 설정 스위치를 통합하려고 시도하기 때문에 logging.config (logback.configurationFile에 대해 알지 못함)를 조사합니다. 대신 (예 : logging.config = file : ./ src / test / resources / logback.xml)이를 사용하거나 설정 파일이 클래스 경로에 있는지 확인할 수 있습니다.

  2. ==============================

    2.나는이 게시물이 약간 오래된 것을 알고 있지만 application.properties에 다음 내용을 추가하는 것은 Dave Syer의 대답을 기반으로 한 빠른 해결 방법입니다.

    나는이 게시물이 약간 오래된 것을 알고 있지만 application.properties에 다음 내용을 추가하는 것은 Dave Syer의 대답을 기반으로 한 빠른 해결 방법입니다.

    logging.config=${logback.configurationFile}
    
  3. ==============================

    3.Spring Boot 문서에 따르면 다음과 같이 실행할 수 있습니다.

    Spring Boot 문서에 따르면 다음과 같이 실행할 수 있습니다.

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

    또한 Spring Boot는 다른 로그 전략의 속성 이름을 통합하려고 시도합니다. 결과적으로 JVM 매개 변수 인 Dlogback.configurationFile은 스프링 부트에 사용되지 않습니다.

  4. ==============================

    4.application.properties 파일에 로그백 파일 경로를 추가하십시오. 예제 테스트 폴더에는 아래와 같이 app.jar과 config 폴더가 있습니다. 테스트 | - app.jar | - 설정 | --- application.properties | --- logback.xml 그런 다음 logging.config : config \\ logback.xml을 추가하십시오. 그런 다음 시도해보십시오.

    application.properties 파일에 로그백 파일 경로를 추가하십시오. 예제 테스트 폴더에는 아래와 같이 app.jar과 config 폴더가 있습니다. 테스트 | - app.jar | - 설정 | --- application.properties | --- logback.xml 그런 다음 logging.config : config \\ logback.xml을 추가하십시오. 그런 다음 시도해보십시오.

  5. ==============================

    5.별로 옳지 않습니다. logback.configurationFile은 Spring (즉, env var replacement 또는 so)에 의해 관리되지 않지만 logback은 여전히 ​​그것을 가져옵니다. 적어도 그것은 문서와 나의 실제 경험에 대한 나의 이해입니다.

    별로 옳지 않습니다. logback.configurationFile은 Spring (즉, env var replacement 또는 so)에 의해 관리되지 않지만 logback은 여전히 ​​그것을 가져옵니다. 적어도 그것은 문서와 나의 실제 경험에 대한 나의 이해입니다.

  6. ==============================

    6.config 디렉토리에 스프링 로그백 구성이 있다고 가정하면 아래 명령은 응용 프로그램 내부에있는 기존 파일을 덮어 씀으로써 외부 파일을 추가합니다.

    config 디렉토리에 스프링 로그백 구성이 있다고 가정하면 아래 명령은 응용 프로그램 내부에있는 기존 파일을 덮어 씀으로써 외부 파일을 추가합니다.

  7. ==============================

    7.Spring과 관련이 있다면, 나는 항상 Spring Guide / Reference 노트를 먼저 읽고 뛰어 다니기 전에 선호한다.

    Spring과 관련이 있다면, 나는 항상 Spring Guide / Reference 노트를 먼저 읽고 뛰어 다니기 전에 선호한다.

    누구든지 Logback (Spring Boot Context)과 관련하여 필요한 것은 - 여기 있습니다.

  8. from https://stackoverflow.com/questions/21723324/dlogback-configurationfile-logback-xml-ignored-when-running-spring-boot by cc-by-sa and MIT license