로그백 설정하기
로그백 아키텍처는 세 가지 클래스로 구성되는데 Logger, Appender, Layout으로 구성됩니다.
- Logger : 로그 메시지의 컨텍스트이다. 애플리케이션이 로그 메시지를 생성하기 위해 상호 작용하는 클래스입니다.
- Appender : 최종 목적지에 로그 메시지를 배치합니다.→ Logger는 하나 이상의 Appender를 가질 수 있습니다.
- Layout : 출력할 메시지를 준비합니다.
⇒ 로그백은 메시지 서식 지정을 위한 사용자 정의 클래스 생성과 기존 클래스에 대한 강력한 구성 옵션을 지원합니다.
public class Example { private static final Logger logger = LoggerFactory.getLogger(Example.class); public static void main(String[] args) { logger.info("Example log from {}", Example.class.getSimpleName()); } }
위처럼 Logger를 통해서 간단하고 로그 메시지를 생성할 수 있습니다.
<?xml version="1.0" encoding="UTF-8" ?> <configuration scan="true"> <conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter" /> <springProperty name="AWS_ACCESS_KEY" source="cloud.aws.credentials.accessKey"/> <springProperty name="AWS_SECRET_KEY" source="cloud.aws.credentials.secretKey"/> <property name="LOG_PATTERN" value="%clr(%d{yyyyMMdd HH:mm:ss.SSS}){magenta} %clr([%thread]){blue} %clr(%-5level){} %clr([%logger{0}:%line]){cyan} : %msg %n"/> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>${LOG_PATTERN}</pattern> </encoder> </appender> <appender name="AWS_LOG" class="ca.pjer.logback.AwsLogsAppender"> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>INFO</level> </filter> <layout> <pattern>[%thread] [%date] [%level] [%file:%line] - %msg%n</pattern> </layout> <logGroupName>InterMark</logGroupName> <logStreamUuidPrefix>InterMark-</logStreamUuidPrefix> <logRegion>ap-northeast-2</logRegion> <maxBatchLogEvents>50</maxBatchLogEvents> <maxFlushTimeMillis>30000</maxFlushTimeMillis> <maxBlockTimeMillis>5000</maxBlockTimeMillis> <retentionTimeDays>0</retentionTimeDays> <accessKeyId>${AWS_ACCESS_KEY}</accessKeyId> <secretAccessKey>${AWS_SECRET_KEY}</secretAccessKey> </appender> <root level="debug"> <appender-ref ref="STDOUT"/> <appender-ref ref="AWS_LOG"/> </root> </configuration>
위와 같이 logback-spring.xml을 설정할 수 있는데
패턴을 선언해서 로그가 어떻게 찍힐지 정하고 appender를 통해 어디에 출력할 지를 정의하여 설정된 로그 수준 이상의 로그들이 찍히도록 만듭니다.
<appender name="AWS_LOG" class="ca.pjer.logback.AwsLogsAppender"> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>ERROR</level> </filter> <layout> <pattern>[%thread] [%date] [%level] [%file:%line] - %msg%n</pattern> </layout> <logGroupName>InterMark</logGroupName> <logStreamUuidPrefix>InterMark-</logStreamUuidPrefix> <logRegion>ap-northeast-2</logRegion> <maxBatchLogEvents>50</maxBatchLogEvents> <maxFlushTimeMillis>30000</maxFlushTimeMillis> <maxBlockTimeMillis>5000</maxBlockTimeMillis> <retentionTimeDays>0</retentionTimeDays> <accessKeyId>${AWS_ACCESS_KEY}</accessKeyId> <secretAccessKey>${AWS_SECRET_KEY}</secretAccessKey> </appender>
해당 appender를 이용하여 클라우드 와치로 로그 데이터를 쌓을 수 있는데 filter를 설정해서 어떤 로그 수준 이상의 로그들만 보낼 수 있게 거를 수 있습니다.
layout을 통해 로그가 어떻게 찍힐지 정의합니다.
- logGroupName : 어떤 로그 그룹으로 보낼지를 정함.
- logStreamUuidPrefix : 로그 그룹에 생기는 이벤트의 prefix name으로 어떤 이름을 붙일지 정하고 그 뒤로 uuid가 생성됨.
- logRegion : 클라우드 와치 AWS Region
- maxBatchLogEvents : 배치의 최대 이벤트 갯수를 설정하는 것이며 1 ~ 10000 사이 값만 설정이 가능하다. 이벤트 대기열에 갯수가 50개가 되면 AWS Cloud Watch로 로그가 전송됨.
- maxFlushTimeMillis : 마지막 플러시가 발생된 이후 지정된 시간이 지나면 AWS Cloud Watch로 로그가 전송됨. 0일 경우 로그를 동기로 전송하고 0보다 큰 값일 경우 비동기로 로그가 전송됨.
- maxBlockTimeMillis : 로그가 전송되는 동안 코드가 계속 실행되는 것을 차단하고 값을 0으로 세팅하면 전송중에 발생된느 모든 로그를 버림.
- retentionTimeDays: 로그그룹의 보존기간을 얘기함. 0으로 세팅 시 무기한.
클라우드 워치 세팅
- 클라우드 와치를 검색해서 해당 서비스로 들어감.
- 왼쪽 메뉴에 로그 하단의 로그 그룹으로 들어감.
- 오른쪽 상단에
로그그룹 생성
을 클릭함.
- 이름만 적고 로그 그룹 생성.
- 해당 로그 그룹을 찾아서 들어감. 기본에는 로그 스트림에 아무것도 없을 것 → 로그 이벤트가 발생하지 않아서
- 애플리케이션을 실행했다가 terminate하고 다시 실행할 때마다 스트림이 새롭게 생김. prefix name에 uuid가 붙은 형태.
- 로그 이벤트를 발생 시키면 위와 같이 스트림이 생기고 그 세부 정보 확인 시 아래와 같이 이벤트들이 출력되는 것을 확인.
Uploaded by
N2T