Spring Boot, logback 및 logging.config 속성
로그백 라이브러리를 사용하여 Spring Boot 프로젝트에서 로깅을 구현하고 있습니다.스프링 프로파일(속성)에 따라 다른 로깅 설정 파일을 로드하고 싶다.spring.pofiles.active
) 3개의 파일이 있습니다.
- logback-dev.xml
- logback-inte.xml
- logback-module.xml
Spring Boot 버전 1.2.2를 사용하고 있습니다.풀어주다.
Spring Boot 매뉴얼을 참조해 주십시오.
다양한 로깅 시스템은 클래스 패스에 적절한 라이브러리를 포함하여 활성화할 수 있습니다.클래스 패스의 루트 또는 Spring Environment 속성 logging.config에서 지정된 위치에 적절한 구성 파일을 제공하여 더욱 커스터마이즈할 수 있습니다.(단, 로깅은 ApplicationContext가 생성되기 전에 초기화되므로 Spring @Configuration 파일의 @PropertySources에서 로깅을 제어할 수 없습니다.시스템 속성 및 기존 스프링 부트 외부 구성 파일은 정상적으로 작동합니다.)
그래서 세팅하려고 했는데logging.config
properties 파일 내의 properties:
logging.config=classpath:/logback-${spring.profiles.active}.xml
그러나 응용 프로그램을 시작할 때 logback-{profile.xml이 로드되지 않습니다.
로깅은 Spring Boot을 사용하는 모든 프로젝트에서 공통적으로 발생하는 문제라고 생각합니다.위의 접근법이 올바른 방향으로 가고 있습니까?
동작하는 다른 솔루션이 있습니다만, 그 솔루션(logback.xml 파일 또는 명령줄 속성에 Janino를 사용한 조건부 해석)은 그다지 우아하지 않습니다.
나는 해결책을 찾았고 왜 봄은 내 것을 사용하지 않는지 이해했다.logging.config
application.properties 파일에 정의된 속성.
해결책과 설명
로깅을 초기화할 때 Spring Boot은 클래스 경로 또는 환경 변수만 검색합니다.
사용한 솔루션은 스프링 프로파일에 따라 올바른 로깅 설정 파일이 포함된 부모 logback.xml 파일을 포함하는 것이었습니다.
logback.xml
<configuration>
<include resource="logback-${spring.profiles.active}.xml"/>
</configuration>
logback-dev.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
앱을 시작할 때 명령줄 인수로 설정해야 합니다.
JVM 속성의 예:-Dspring.profiles.active=dev
레퍼런스 매뉴얼
- http://docs.spring.io/spring-boot/docs/current/reference/html/howto-logging.html
- http://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-logging.html
- http://docs.spring.io/spring-boot/docs/0.5.0.M3/api/org/springframework/boot/context/initializer/LoggingApplicationContextInitializer.html
편집(복수의 액티브프로파일)
복수의 파일을 회피하려면 , Janino 의존성이 필요한 조건부 처리를 사용할 수 있습니다(여기서 셋업).조건부 문서를 참조해 주세요.
이 방법을 사용하면 동시에 여러 활성 프로파일을 확인할 수도 있습니다.예(이 솔루션은 테스트하지 않았으므로, 동작하지 않는 경우는 코멘트를 주세요).
<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 answer 를 참조해 주세요.
여러 프로파일을 처리할 수 있는 또 다른 방법은 각 환경에 대해 개별 속성 파일을 생성하는 것입니다.
application-module.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
각 프로파일에 대해 별도의 logback xmls를 추가하거나 IF 조건을 갖는 대신 다음(xmls의 차이가 적은 경우)을 제안합니다.여기에 있는 간단한 조건부 처리를 위한 Documentation 링크를 참조하십시오.
<springProfile name="dev">
<logger name="org.sample" level="DEBUG" />
</springProfile>
<springProfile name="prod">
<logger name="org.sample" level="TRACE" />
</springProfile>
로그백을 사용한 조건부 처리는 많은 로그백파일이 없는 솔루션이 됩니다.다음으로 스프링 프로파일을 사용한 링크와 로그백 설정 예를 나타냅니다.
<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>
태그가 .<springProperty/>
Logback XML 파일 내에서 이 태그는 여기서 설명합니다.즉, 스프링 속성 파일에서 변수를 쉽게 추가할 수 있으며, 이 변수 값도 스프링까지 환경/시스템 변수에서 해결됩니다.
다른 프로파일에 대해 다른 logback.xml을 지정할 수 있습니다.단, 다음의 3단계입니다.
행동 합니다.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>
아주 간단해, 다른 건 할 필요 없어.
언급URL : https://stackoverflow.com/questions/29429073/spring-boot-logback-and-logging-config-property
'programing' 카테고리의 다른 글
jq를 사용하여 JSON의 2개 필드를 구성합니다. (0) | 2023.04.03 |
---|---|
Java JSON 시리얼화 - 베스트 프랙티스 (0) | 2023.04.03 |
Uglify를 통한 웹 팩 최적화JS 플러그인으로 인해 런타임 오류가 발생함 (0) | 2023.04.03 |
리액트와 함께 장고를 형성하다JS (0) | 2023.04.03 |
페이지를 갱신하지 않고 웹 사이트의 CSS를 갱신하다 (0) | 2023.04.03 |