본문 바로가기

IT/SpringBoot

스프링 부트 #4.3-4 프로필/로깅

반응형

 

4.3. 프로필

스프링 프로파일은 응용 프로그램 구성의 일부를 분리하고 특정 환경에서만 사용할 수 있도록 하는 방법을 제공합니다. 다음 예제와 같이 로드될 때 제한하도록 표시하거나 표시할 수 있습니다.@Component@Configuration@ConfigurationProperties@Profile

@Configuration(proxyBeanMethods = false)
@Profile("production")
public class ProductionConfiguration {

    // ...

}
  콩이 자동 스캐닝 대신에 등록된 경우, 부기가 있는 클래스에 부기 기를 지정해야 합니다. 스캔하는 경우 클래스 자체에 지정할 수 있습니다. @ConfigurationProperties@EnableConfigurationProperties@Profile@Configuration@EnableConfigurationProperties@ConfigurationProperties@Profile@ConfigurationProperties

속성을 사용하여 활성 상태인 프로파일을 지정할 수 있습니다. 이 장에서 앞에서 설명한 모든 방법으로 속성을 지정할 수 있습니다. 예를 들어 다음 예제와 같이 다음 예제에 포함할 수 있습니다.spring.profiles.activeEnvironmentapplication.properties

spring.profiles.active=dev,hsqldb

다음 스위치를 사용하여 명령줄에 지정할 수도 있습니다.--spring.profiles.active=dev,hsqldb

4.3.1. 활성 프로파일 추가

속성은 다른 속성과 동일한 주문 규칙을 따릅니다: 가장 높은 승리. 즉, 명령줄 스위치를 사용하여 활성 프로파일을 인에 지정한 다음 교체할 수 있습니다.spring.profiles.activePropertySourceapplication.properties

경우에 따라 프로파일별 속성을 교체하는 대신 활성 프로파일에 추가하는 것이 유용합니다. 이 속성은 무조건 활성 프로파일을 추가하는 데 사용할 수 있습니다. 진입점에는 추가 프로파일을 설정하기 위한 Java API(즉, 속성에서 활성화된 프로필 위에)도 있습니다. 스프링 응용 프로그램에서 방법을 참조하십시오.spring.profiles.includeSpringApplicationspring.profiles.activesetAdditionalProfiles()

예를 들어 스위치를 사용하여 다음 속성이 있는 응용 프로그램을 실행하는 경우 프로파일과 프로파일도 활성화됩니다.--spring.profiles.active=prodproddbprodmq

---
my.property: fromyamlfile
---
spring.profiles: prod
spring.profiles.include:
  - proddb
  - prodmq
  이 특정 문서가 구성에 포함되는 시기를 결정하기 위해 YAML 문서에서 속성을 정의할 수 있습니다. 자세한 내용은 환경에 따라 변경 구성을 참조하십시오. spring.profiles

4.3.2. 프로그래밍 방식으로 프로필 설정

응용 프로그램이 실행되기 전에 호출하여 활성 프로필을 프로그래밍 방식으로 설정할 수 있습니다. 스프링 인터페이스를 사용하여 프로파일을 활성화할 수도 있습니다.SpringApplication.setAdditionalProfiles(…​)ConfigurableEnvironment

4.3.3. 프로필별 구성 파일

프로필별 변형(또는)과 참조된 파일의 변형은 파일로 간주되고 로드됩니다. 자세한 내용은"프로필별 속성"을참조하십시오.application.propertiesapplication.yml@ConfigurationProperties

4.4. 로깅

Spring 부트은 모든 내부 로깅에 대해 공용 로깅을 사용하지만 기본 로그 구현을 열어 둡시킵니다. 기본 구성은 자바 유틸리티 로깅, Log4J2로그백에대해 제공됩니다. 각각의 경우 로거는 선택적 파일 출력을 사용할 수 있는 콘솔 출력을 사용하도록 미리 구성됩니다.

기본적으로 "스타터"를 사용하는 경우 로그백이 로깅에 사용됩니다. 자바 유틸리티 로깅, 공용 로깅, Log4J 또는 SLF4J를 사용하는 종속 라이브러리가 모두 올바르게 작동하는지 확인하기 위해 적절한 로그백 라우팅도 포함되어 있습니다.

  Java에 사용할 수 있는 로깅 프레임워크가 많이 있습니다. 위의 목록이 혼란스러워 보이는지 걱정하지 마십시오. 일반적으로 로깅 종속성을 변경할 필요가 없으며 스프링 부트 기본값은 잘 작동합니다.
  응용 프로그램을 서슬릿 컨테이너 또는 응용 프로그램 서버에 배포할 때 Java Util Log API를 통해 수행된 로깅이 응용 프로그램의 로그에 라우팅되지 않습니다. 이렇게 하면 컨테이너 또는 배포된 다른 응용 프로그램에서 수행되는 로깅이 응용 프로그램의 로그에 나타나지 않습니다.

4.4.1. 로그 형식

스프링 부트의 기본 로그 출력은 다음 예제와 유사합니다.

2019-03-05 10:57:51.112  INFO 45469 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet Engine: Apache Tomcat/7.0.52
2019-03-05 10:57:51.253  INFO 45469 --- [ost-startStop-1] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2019-03-05 10:57:51.253  INFO 45469 --- [ost-startStop-1] o.s.web.context.ContextLoader            : Root WebApplicationContext: initialization completed in 1358 ms
2019-03-05 10:57:51.698  INFO 45469 --- [ost-startStop-1] o.s.b.c.e.ServletRegistrationBean        : Mapping servlet: 'dispatcherServlet' to [/]
2019-03-05 10:57:51.702  INFO 45469 --- [ost-startStop-1] o.s.b.c.embedded.FilterRegistrationBean  : Mapping filter: 'hiddenHttpMethodFilter' to: [/*]

다음 항목은 출력입니다.

  • 날짜 및 시간: 밀리초 정밀도 및 쉽게 정렬할 수 있습니다.
  • 로그 레벨: , 또는 .ERRORWARNINFODEBUGTRACE
  • 프로세스 ID.
  • 실제 로그 메시지의 시작을 구별하는 분리기입니다.---
  • 스레드 이름: 사각형 괄호로 동봉됩니다(콘솔 출력에 대해 잘릴 수 있음).
  • 로거 이름: 일반적으로 원본 클래스 이름입니다(종종 축약됨).
  • 로그 메시지입니다.
  로그백에는 레벨이 없습니다. 매핑됩니다. FATALERROR

4.4.2. 콘솔 출력

기본 로그 구성은 기록될 때 콘솔에 메시지를 에코합니다. 기본적으로 -level, -level 및 -level 메시지가 기록됩니다. 플래그로 응용 프로그램을 시작하여 "디버그" 모드를 활성화할 수도 있습니다.ERRORWARNINFO--debug

$ java -jar myapp.jar --debug
  . debug=trueapplication.properties

디버그 모드를 사용하도록 설정하면 더 많은 정보를 출력하도록 코어 로거(임베디드 컨테이너, 최대 절전 모드 및 스프링 부트)를 선택하도록 구성됩니다. 디버그 모드를 사용하도록 설정해도 응용 프로그램이 모든 메시지를 레벨로 기록하도록 구성하지는 않습니다.DEBUG

또는 플래그(또는 사용자)로 응용 프로그램을 시작하여 "추적" 모드를 활성화할 수 있습니다. 이렇게 하면 코어 로거(임베디드 컨테이너, 최대 절전 모드 스키마 생성 및 전체 Spring 포트폴리오)에 대한 추적 로깅이 가능합니다.--tracetrace=trueapplication.properties

색상 코드 출력

터미널에서 ANSI를 지원하는 경우 색상 출력이 가독성을 돕기 위해 사용됩니다. 자동 검색을 재정의하기 위해 지원되는 값으로 설정할 수 있습니다.spring.output.ansi.enabled

색상 코딩은 변환 단어를 사용하여 구성됩니다. 가장 간단한 형태로 변환기는 다음 예제와 같이 로그 수준에 따라 출력을 색상으로 표시합니다.%clr

%clr(%5p)

다음 표에서는 로그 레벨매핑을 색상으로 매핑합니다.

수준

FATAL

빨간색

ERROR

빨간색

WARN

노란색

INFO

녹색

DEBUG

녹색

TRACE

녹색

또는 변환에 대한 옵션으로 제공하여 사용해야 하는 색상이나 스타일을 지정할 수 있습니다. 예를 들어 텍스트를 노란색으로 만들려면 다음 설정을 사용합니다.

%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){yellow}

다음 색상과 스타일이 지원됩니다.

  • blue
  • cyan
  • faint
  • green
  • magenta
  • red
  • yellow

4.4.3. 파일 출력

기본적으로 스프링 부트은 콘솔에만 로그되며 로그 파일을 작성하지 않습니다. 콘솔 출력 외에 로그 파일을 작성하려면 또는 속성(예: 내 경우)을 설정해야 합니다.logging.file.namelogging.file.pathapplication.properties

다음 표에서는 속성을 함께 사용할 수 있는 방법을 보여 주습니다.logging.*

Table 7. Logging properties
logging.file.name logging.file.path 예제 설명

(없음)

(없음)

 

콘솔만 로깅합니다.

특정 파일

(없음)

my.log

지정된 로그 파일에 씁니다. 이름은 정확한 위치이거나 현재 디렉터리에 상대적일 수 있습니다.

(없음)

특정 디렉터리

/var/log

지정된 디렉터리에 씁니다. 이름은 정확한 위치이거나 현재 디렉터리에 상대적일 수 있습니다.spring.log

로그 파일은 10MB에 도달할 때 회전하며 콘솔 출력과 마찬가지로 -level, -level 및 -level 메시지는 기본적으로 기록됩니다. 속성으로 크기 제한을 변경할 수 있습니다. 속성이 설정되지 않는 한 지난 7일 동안의 회전 로그 파일은 기본적으로 유지됩니다. 로그 아카이브의 총 크기는 로그 아카이브를 사용하여 제한할 수 있습니다. 로그 아카이브의 총 크기가 해당 임계값을 초과하면 백업이 삭제됩니다. 응용 프로그램 시작시 로그 아카이브 정리를 강제로 사용하려면 속성을 사용합니다.ERRORWARNINFOlogging.file.max-sizelogging.file.max-historylogging.file.total-size-caplogging.file.clean-history-on-start

  로깅 속성은 실제 로깅 인프라와 독립적입니다. 따라서 특정 구성 키(예: 로그백)는 스프링 부트에서 관리되지 않습니다. logback.configurationFile

4.4.4. 로그 레벨

지원되는 모든 로깅 시스템은 TRACE, DEBUG, INFO, 경고, 오류, 치명적 또는 OFF 중 하나인 위치를 사용하여 스프링(예: 스프링)에 로거 레벨을 설정할 수 있습니다. 로거를 사용하여 구성할 수 있습니다.Environmentapplication.propertieslogging.level.<logger-name>=<level>levelrootlogging.level.root

다음 예제에서는 다음의 잠재적 인 로깅 설정을 보여 주습니다.application.properties

logging.level.root=warn
logging.level.org.springframework.web=debug
logging.level.org.hibernate=error

환경 변수를 사용하여 로깅 수준을 설정할 수도 있습니다. 예를 들어.LOGGING_LEVEL_ORG_SPRINGFRAMEWORK_WEB=DEBUGorg.springframework.webDEBUG

  위의 방법은 패키지 수준 로깅에대해서만 작동합니다. 편안한 바인딩은 항상 환경 변수를 소문자로 변환하므로 이러한 방식으로 개별 클래스에 대한 로깅을 구성할 수 없습니다. 클래스에 대한 로깅을 구성해야 하는 경우 SPRING_APPLICATION_JSON 변수를 사용할 수 있습니다.

4.4.5. 로그 그룹

관련 로거를 동시에 구성할 수 있도록 함께 그룹화할 수 있는 것이 유용한 경우가 많습니다. 예를 들어 모든 Tomcat 관련 로거에 대한 로깅 수준을 일반적으로 변경할 수 있지만 최상위 패키지를 쉽게 기억할 수는 없습니다.

이를 위해 스프링 부트을 사용하면 스프링에서 로깅 그룹을 정의할 수 있습니다. 예를 들어 다음을 추가하여 "tomcat" 그룹을 정의하는 방법은 다음과 같습니다.Environmentapplication.properties

logging.group.tomcat=org.apache.catalina, org.apache.coyote, org.apache.tomcat

정의되면 한 줄로 그룹의 모든 로거에 대한 수준을 변경할 수 있습니다.

logging.level.tomcat=TRACE

스프링 부트에는 즉시 사용할 수 있는 다음 미리 정의된 로깅 그룹이 포함되어 있습니다.

이름

org.springframework.core.codec, , , , org.springframework.httporg.springframework.weborg.springframework.boot.actuate.endpoint.weborg.springframework.boot.web.servlet.ServletContextInitializerBeans

Sql

org.springframework.jdbc.core, , org.hibernate.SQLorg.jooq.tools.LoggerListener

4.4.6. 사용자 지정 로그 구성

다양한 로깅 시스템은 클래스패스에 적절한 라이브러리를 포함시킴으로써 활성화될 수 있으며, 클래스패스의 루트 또는 다음 Spring 속성에 의해 지정된 위치에 적합한 구성 파일을 제공함으로써 더욱 사용자 정의할 수 있다.Environmentlogging.config

스프링 부트을 강제로 시스템 속성을 사용하여 특정 로깅 시스템을 사용하도록 할 수 있습니다. 값은 구현의 정규화된 클래스 이름이어야 합니다. 또한 값을 사용하여 스프링 부트의 로깅 구성을 완전히 비활성화할 수도 있습니다.org.springframework.boot.logging.LoggingSystemLoggingSystemnone

  로깅이 생성되기 전에 초기화되므로 Spring 파일에서 로깅을 제어할 수 없습니다. 로깅 시스템을 변경하거나 완전히 비활성화하는 유일한 방법은 시스템 속성을 통해서입니다. ApplicationContext@PropertySources@Configuration

로깅 시스템에 따라 다음 파일이 로드됩니다.

로깅 시스템 사용자화

로그백

logback-spring.xml또는 logback-spring.groovylogback.xmllogback.groovy

Log4j2

log4j2-spring.xml 또는 log4j2.xml

JDK (자바 유틸리티 로깅)

logging.properties

  가능하면 로깅 구성에 변형을 사용하는 것이 좋습니다(예: 대신). 표준 구성 위치를 사용하는 경우 Spring은 로그 초기화를 완전히 제어할 수 없습니다. -springlogback-spring.xmllogback.xml
  '실행 가능한 항아리'에서 실행할 때 문제를 일으키는 Java Util 로깅에 알려진 클래스로딩 문제가 있습니다. 가능한 경우 '실행 가능한 항아리'에서 실행할 때 피하는 것이 좋습니다.

사용자 지정을 돕기 위해 다음 표에 설명된 대로 일부 다른 속성이 스프링에서 시스템 속성으로 전송됩니다.Environment

봄 환경 시스템 속성 코멘트

logging.exception-conversion-word

LOG_EXCEPTION_CONVERSION_WORD

예외로 기록할 때 사용되는 변환 단어입니다.

logging.file.clean-history-on-start

LOG_FILE_CLEAN_HISTORY_ON_START

시작 시 아카이브 로그 파일을 정리할지(LOG_FILE 활성화된 경우). (기본 로그백 설정으로만 지원됩니다.)

logging.file.name

LOG_FILE

정의된 경우 기본 로그 구성에 사용됩니다.

logging.file.max-size

LOG_FILE_MAX_SIZE

최대 로그 파일 크기(LOG_FILE 활성화된 경우). (기본 로그백 설정으로만 지원됩니다.)

logging.file.max-history

LOG_FILE_MAX_HISTORY

보관할 아카이브 로그 파일의 최대 수(LOG_FILE 활성화된 경우). (기본 로그백 설정으로만 지원됩니다.)

logging.file.path

LOG_PATH

정의된 경우 기본 로그 구성에 사용됩니다.

logging.file.total-size-cap

LOG_FILE_TOTAL_SIZE_CAP

보관할 로그 백업의 총 크기(LOG_FILE 활성화된 경우). (기본 로그백 설정으로만 지원됩니다.)

logging.pattern.console

CONSOLE_LOG_PATTERN

콘솔에서 사용할 로그 패턴(stdout)입니다. (기본 로그백 설정으로만 지원됩니다.)

logging.pattern.dateformat

LOG_DATEFORMAT_PATTERN

로그 날짜 형식의 부속기 패턴입니다. (기본 로그백 설정으로만 지원됩니다.)

logging.pattern.file

FILE_LOG_PATTERN

파일에 사용할 로그 패턴(활성화된 경우). (기본 로그백 설정으로만 지원됩니다.)LOG_FILE

logging.pattern.level

LOG_LEVEL_PATTERN

로그 수준(기본값)을 렌더링할 때 사용할 형식입니다. (기본 로그백 설정으로만 지원됩니다.)%5p

logging.pattern.rolling-file-name

ROLLING_FILE_NAME_PATTERN

롤오버 로그 파일 이름(기본값)에 대한 패턴입니다. (기본 로그백 설정으로만 지원됩니다.)${LOG_FILE}.%d{yyyy-MM-dd}.%i.gz

PID

PID

현재 프로세스 ID(가능하면 아직 OS 환경 변수로 정의되지 않은 경우 검색됨).

지원되는 모든 로깅 시스템은 구성 파일을 구문 분석할 때 시스템 속성을 참조할 수 있습니다. 예제에서는 기본 구성을 참조하십시오.spring-boot.jar

 

로깅 속성에서 자리 표시자를 사용하려면 기본 프레임워크의 구문이 아닌 Spring Boot의 구문이 아닌 스프링 부트의 구문을 사용해야 합니다. 특히 Logback을 사용하는 경우 속성 이름과 기본 값 사이의 구분 기호로 사용해야 하며 사용할 수 없습니다.::-

 

MDC 및 기타 임시 콘텐츠를 로그 라인에 추가하여 (또는 로그백)만 재정의할 수 있습니다. 예를 들어 사용하는 경우 기본 로그 형식에는 다음 예제와 같이 "사용자"에 대한 MDC 항목이 포함되어 있습니다.LOG_LEVEL_PATTERNlogging.pattern.levellogging.pattern.level=user:%X{user} %5p

2019-08-30 12:30:04.031 user:someone INFO 22174 --- [  nio-8080-exec-0] demo.Controller
Handling authenticated request

4.4.7. 로그백 확장

Spring Boot에는 고급 구성에 도움이 될 수 있는 로그백에 대한 여러 확장이 포함되어 있습니다. 구성 파일에서 이러한 확장을 사용할 수 있습니다.logback-spring.xml

  표준 구성 파일이 너무 일찍 로드되므로 확장 프로그램을 사용할 수 없습니다. 속성을 사용하거나 정의해야 합니다. logback.xmllogback-spring.xmllogging.config
  확장은 Logback의 구성 검색과함께 사용할 수 없습니다. 이렇게 하려고 하면 구성 파일을 변경하면 다음 중 하나가 기록되는 것과 유사한 오류가 발생합니다.
ERROR in ch.qos.logback.core.joran.spi.Interpreter@4:71 - no applicable action for [springProperty], current ElementPath is [[configuration][springProperty]]
ERROR in ch.qos.logback.core.joran.spi.Interpreter@4:71 - no applicable action for [springProfile], current ElementPath is [[configuration][springProfile]]
프로필별 구성

태그를 사용하면 활성 Spring 프로파일을 기반으로 구성 섹션을 선택적으로 포함하거나 제외할 수 있습니다. 프로파일 섹션은 요소 내의 모든 곳에서 지원됩니다. 특성을 사용하여 구성을 허용하는 프로파일을 지정합니다. 태그에는 간단한 프로필 이름(예:) 또는 프로필 식이 포함될 수 있습니다. 프로파일 식을 사용하면 예를 들어 보다 복잡한 프로파일 논리를 표현할 수 있습니다. 자세한 내용은 참조 가이드를 확인합니다. 다음 목록에는 세 가지 샘플 프로필이 표시됩니다.<springProfile><configuration>name<springProfile>stagingproduction & (eu-central | eu-west)

<springProfile name="staging">
    <!-- configuration to be enabled when the "staging" profile is active -->
</springProfile>

<springProfile name="dev | staging">
    <!-- configuration to be enabled when the "dev" or "staging" profiles are active -->
</springProfile>

<springProfile name="!production">
    <!-- configuration to be enabled when the "production" profile is not active -->
</springProfile>
환경 속성

태그를 사용하면 로그백 내에서 사용할 스프링의 속성을 노출할 수 있습니다. 이렇게 하면 Logback 구성의 파일에서 값에 액세스하려는 경우에 유용할 수 있습니다. 태그는 Logback의 표준 태그와 유사한 방식으로 작동합니다. 그러나 직접 지정하는 대신 속성(에서)을 지정합니다. 범위 이외의 다른 곳에 속성을 저장해야 하는 경우 특성을 사용할 수 있습니다. 대체 값이 필요한 경우(속성이 설정되지 않은 경우) 특성을 사용할 수 있습니다. 다음 예제에서는 Logback 내에서 사용할 속성을 노출하는 방법을 보여 줄 수 있습니다.<springProperty>Environmentapplication.properties<property>valuesourceEnvironmentlocalscopeEnvironmentdefaultValue

<springProperty scope="context" name="fluentHost" source="myapp.fluentd.host"
        defaultValue="localhost"/>
<appender name="FLUENT" class="ch.qos.logback.more.appenders.DataFluentAppender">
    <remoteHost>${fluentHost}</remoteHost>
    ...
</appender>
  케밥 케이스(예:)에 지정해야 합니다. 그러나 편안한 규칙을 사용하여 속성을 추가할 수 있습니다. sourcemy.property-nameEnvironment

 

Spring Boot Reference Documentation

Phillip Webb, Dave Syer, Josh Long, Stéphane Nicoll, Rob Winch, Andy Wilkinson, Marcel Overdijk, Christian Dupuis, Sébastien Deleuze, Michael Simons, Vedran Pavić, Jay Bryant, Madhura Bhave, Eddú Meléndez, Scott Frederick

2.3.1.RELEASE

Copyright © 2012-2020

Copies of this document may be made for your own use and for distribution to others, provided that you do not charge any fee for such copies and further provided that each copy contains this Copyright Notice, whether distributed in print or electronically.

출처 : https://docs.spring.io/spring-boot/docs/2.3.1.RELEASE/reference/htmlsingle/#boot-features-profiles

반응형