[SPRING] 봄 부팅, logback 및 logging.config 속성
SPRING봄 부팅, logback 및 logging.config 속성
로그백 라이브러리가있는 스프링 부트 프로젝트에서 로깅을 구현하고 있습니다. 내 스프링 프로파일 ( 'spring.pofiles.active'속성)에 따라 다른 로깅 구성 파일을로드하려고합니다. logback-dev.xml, logback-inte.xml 및 logback-prod.xml의 세 파일이 있습니다. 나는 봄 부팅 버전 1.2.2를 사용하고있다. 릴리스.
스프링 부트 문서 (여기)에서 읽으십시오. 그것은 말한다 :
그래서 내 application.properties 파일에 'logging.config'속성을 설정하려고했습니다 :
logging.config=classpath:/logback-${spring.profiles.active}.xml
하지만 내 응용 프로그램을 시작하면 내 logback- {profile} .xml이로드되지 않습니다 ...
로깅은 스프링 부트를 사용하는 모든 프로젝트에서 발생하는 공통적 인 문제라고 생각합니다. 나는 올바른 방향으로 가고 있는지 알고 싶습니다. 왜냐하면 나는 다른 해결책도 있지만 잘 모르겠지만 (logback.xml 파일이나 명령 줄 속성의 Janino와 조건부 구문 분석) 찾기가 쉽지 않기 때문입니다.
해결법
-
==============================
1.솔루션을 찾았는데 왜 spring이 application.properties 파일에 정의 된 'logging.config'속성에 신경을 쓰지 않는지 이해했습니다.
솔루션을 찾았는데 왜 spring이 application.properties 파일에 정의 된 'logging.config'속성에 신경을 쓰지 않는지 이해했습니다.
해결책 및 설명 :
로깅을 초기화 할 때 스프링 부트는 클래스 경로 또는 환경 변수 만 찾습니다 (http://docs.spring.io/spring-boot/docs/0.5.0.M3/api/org/springframework/boot/context/initializer/LoggingApplicationContextInitializer 참조). .html).
내가 찾은 가장 좋은 해결책은 스프링 프로파일에 따라 올바른 로깅 설정 파일을 포함 할 상위 logback.xml 파일을 포함시키는 것입니다.
logback.xml :
<configuration> <include resource="logback-${spring.profiles.active}.xml"/> </configuration>
logback- [profile] .xml (이 경우 logback-dev.xml) :
<included> <!-- put your appenders --> <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> <!-- encoders are assigned the type ch.qos.logback.classic.encoder.PatternLayoutEncoder by default --> <encoder> <pattern>%d{ISO8601} %p %t %c{0}.%M - %m%n</pattern> <charset>utf8</charset> </encoder> </appender> <!-- put your loggers here --> <logger name="org.springframework.web" additivity="false" level="INFO"> <appender-ref ref="CONSOLE" /> </logger> <!-- put your root here --> <root level="warn"> <appender-ref ref="CONSOLE" /> </root> </included>
노트 : 'spring.profiles.active'는 앱을 시작할 때 명령 줄 인수에 설정해야합니다. E.G 속성의 경우 : -Dspring.profiles.active = dev
참고 문헌 :
수정 (여러 활성 프로필) : 여러 파일을 피하기 위해 Janino 종속성 (여기에서 설정)이 필요한 조건부 처리를 사용할 수 있습니다 (조건부 문서 참조). 이 방법을 사용하면 여러 활성 프로필을 동시에 확인할 수도 있습니다. E.G (나는이 솔루션을 테스트하지 않았고 작동하지 않는다면 주석 달기) :
<configuration> <if condition='"${spring.profiles.active}".contains("profile1")'> <then> <!-- do whatever you want for profile1 --> </then> </if> <if condition='"${spring.profiles.active}".contains("profile2")'> <then> <!-- do whatever you want for profile2 --> </then> </if> <!-- common config --> </configuration>
조건부 처리의 다른 예는 javasenior 응답을 참조하십시오.
-
==============================
2.여러 프로파일을 처리 할 수있는 또 다른 접근법은 각 환경에 대해 별도의 특성 파일을 작성하는 것입니다.
여러 프로파일을 처리 할 수있는 또 다른 접근법은 각 환경에 대해 별도의 특성 파일을 작성하는 것입니다.
application-prod.properties
logging.config=classpath:logback-prod.xml
application-dev.properties
logging.config=classpath:logback-dev.xml
application-local.properties
logging.config=classpath:logback-local.xml
깨어 있으라.
조심하지 않으면 예기치 않게 어딘가에서 로깅을 끝낼 수 있습니다.
-Dspring.profiles.active=local,dev //will use logback-dev.xml -Dspring.profiles.active=dev,local //will use logback-local.xml
-
==============================
3.각 프로파일에 대해 별도의 logback xml을 추가하거나 IF 조건을 추가하는 대신 쉬운 조건 처리를 위해 다음과 같이 제안합니다 (xml의 차이가 적은 경우).
각 프로파일에 대해 별도의 logback xml을 추가하거나 IF 조건을 추가하는 대신 쉬운 조건 처리를 위해 다음과 같이 제안합니다 (xml의 차이가 적은 경우).
<springProfile name="dev"> <logger name="org.sample" level="DEBUG" /> </springProfile> <springProfile name="prod"> <logger name="org.sample" level="TRACE" /> </springProfile>
-
==============================
4.로그백을 사용한 조건부 처리는 많은 로그백 파일이없는 솔루션입니다. 다음은 스프링 프로파일을 사용하는 링크 및 샘플 로그백 구성입니다.
로그백을 사용한 조건부 처리는 많은 로그백 파일이없는 솔루션입니다. 다음은 스프링 프로파일을 사용하는 링크 및 샘플 로그백 구성입니다.
<configuration> <property name="LOG_LEVEL" value="INFO"/> <if condition='"product".equals("${spring.profiles.active}")'> <then> <property name="LOG_LEVEL" value="INFO"/> </then> <else> <property name="LOG_LEVEL" value="ERROR"/> </else> </if> . . appender, logger tags etc. . . <root level="${LOG_LEVEL}"> <appender-ref ref="STDOUT"/> </root> </configuration>
또한, 이것을 pom.xml에 추가해야 할 수도 있습니다.
<dependency> <groupId>org.codehaus.janino</groupId> <artifactId>janino</artifactId> <version>3.0.6</version> </dependency>
-
==============================
5.Spring은 Logback XML 파일 내부의 다음 태그
를 지원합니다.이 태그는 여기에서 설명합니다. 이것은 Spring 속성 파일에서 변수를 쉽게 추가 할 수 있다는 것을 의미합니다.이 변수 값이 Spring에 의한 환경 변수 / 시스템 변수로부터도 해결됩니다. Spring은 Logback XML 파일 내부의 다음 태그
를 지원합니다.이 태그는 여기에서 설명합니다. 이것은 Spring 속성 파일에서 변수를 쉽게 추가 할 수 있다는 것을 의미합니다.이 변수 값이 Spring에 의한 환경 변수 / 시스템 변수로부터도 해결됩니다. -
==============================
6.서로 다른 프로필에 대해 서로 다른 logback.xml을 지정할 수 있으며 다음 세 단계 만 수행 할 수 있습니다.
서로 다른 프로필에 대해 서로 다른 logback.xml을 지정할 수 있으며 다음 세 단계 만 수행 할 수 있습니다.
1, application.properties 또는 application.yml에 활성화 된 프로파일 지정 :
spring.profiles.active: test
2, 구성에 따라 다른 구성을 포함하도록 구성 로그백 :
<!DOCTYPE configuration> <configuration scan="true" scanPeriod="30 seconds"> <springProperty scope="context" name="profile" source="spring.profiles.active"/> <include resource="logback.${profile}.xml"/> </configuration>
3, 구성 파일 logback.test.xml 작성 :
<?xml version="1.0" encoding="UTF-8"?> <included> <include resource="org/springframework/boot/logging/logback/base.xml"/> <root level="INFO"/> </included>
그것은 매우 간단합니다. 다른 일을 할 필요가 없습니다.
from https://stackoverflow.com/questions/29429073/spring-boot-logback-and-logging-config-property by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] Spring MVC는 어떻게 여러 사용자를 다루는가? (0) | 2018.12.28 |
---|---|
[SPRING] JasperReports를 Spring MVC와 함께 사용하는 방법? (0) | 2018.12.28 |
[SPRING] 여러 메소드 인수에 @Cacheable 키 (0) | 2018.12.28 |
[SPRING] 스프링 프레임 워크의 여러 컨테이너 정보 (0) | 2018.12.28 |
[SPRING] Spring 객체는 쓰레드에 안전합니까? (0) | 2018.12.28 |