반응형

이전 포스팅에서 HTTP별로 Trace Id를 부여하고, 각 HTTP 요청과 응답에 대해 콘솔 로그를 출력하는 부분을 다뤘다. 이번 포스팅에서는 Spring Active Profile에 따라 콘솔로그를 출력할지, AWS CloudWatch로 로그를 전송할 지 설정하는 부분을 안내한다.
만약 Active Profile이 dev, prod라면 AWS의 CloudWatch로 보내고, 그 외의 경우 콘솔로그를 출력하도록 한다. (AWS IAM 사용자에게 CloudWatch 정책 권한을 넣어두자.)

AWS CloudWatch에 적재된 로그 일부를 캡쳐

build.gradle 의존성 추가

dependencies {
    ...
    implementation 'ca.pjer:logback-awslogs-appender:1.4.0' //logback to aws cloudwatch
    ...
}

AWS 권한 설정

@Configuration
public class AmazonConfiguration {
    private final Logger log = LoggerFactory.getLogger(AmazonConfiguration.class);

//    @Value("${AWS_ACCESS_KEY}")
    private String accessKey = "AWS_액세스키";
//    @Value("${AWS_SECRET_KEY}")
    private String secretKey = "AWS_시크릿키";

    private AWSCredentials awsCredentials;

    @PostConstruct
    public void init() {
        awsCredentials = new BasicAWSCredentials(accessKey, secretKey);
    }

    @Bean
    public AWSCredentialsProvider awsCredentialsProvider() {
        return new AWSStaticCredentialsProvider(awsCredentials);
    }
}

Logback 설정파일 수정

한글로 기재된 부분은 각자 프로젝트에 맞게 적절한 네이밍을 하도록 하자.

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <springProfile name="!(dev | prod)">
        <root level="debug">
            <appender name="CONSOLE_LOG" class="ch.qos.logback.core.ConsoleAppender">
                <encoder>
                    <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %magenta([traceId=%X{traceId}]) %highlight(%-5level) %logger{36}.%M - %msg%n</pattern>
                </encoder>
            </appender>
        </root>
    </springProfile>

    <springProfile name="dev | prod">
        <root level="info">
            <appender name="CLOUDWATCH_LOG" class="ca.pjer.logback.AwsLogsAppender">
                <layout>
                    <pattern>[traceId=%X{traceId}] %-5level %logger{36}.%M - %msg%n</pattern>
                </layout>
                <logGroupName>로그그룹명을 기재</logGroupName>
                <logStreamUuidPrefix>프리픽스(Optional)</logStreamUuidPrefix>
                <logRegion>ap-northeast-2</logRegion>
                <maxBatchLogEvents>50</maxBatchLogEvents>
                <maxFlushTimeMillis>30000</maxFlushTimeMillis>
                <maxBlockTimeMillis>5000</maxBlockTimeMillis>
                <retentionTimeDays>0</retentionTimeDays>
            </appender>
        </root>
    </springProfile>

</configuration>

전체 샘플 코드는 Github에서 확인할 수 있다.
https://github.com/HyunAh-iia/spring-logging

 

GitHub - HyunAh-iia/spring-logging: Spring Boot Logging HTTP with Trace Id Using Logback and AWS CloudWatch

Spring Boot Logging HTTP with Trace Id Using Logback and AWS CloudWatch - GitHub - HyunAh-iia/spring-logging: Spring Boot Logging HTTP with Trace Id Using Logback and AWS CloudWatch

github.com

 

반응형