Spring에서 CloudWatch로 log를 전송할 수 있도록 도와주는 라이브러리를 추가해줍니다.
implementation "ca.pjer:logback-awslogs-appender:1.6.0"
그리고 CloudWatch에서 log를 저장할 로그 그룹을 생성해 줍니다.
IAM 사용자 권한도 추가해줍니다.
IAM 사용자에 CloudWatchFullAccess를 추가해줍니다
이제 스프링 프로젝트로 넘어가서 logback-spring.xml 파일을 작성해줍니다.
logback-spring.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds">
<springProperty name="AWS_ACCESS_KEY" source="cloud.aws.credentials.access-key"/>
<springProperty name="AWS_SECRET_KEY" source="cloud.aws.credentials.secret-key"/>
<appender name="AWS_CLOUD_WATCH_LOG" class="ca.pjer.logback.AwsLogsAppender">
<layout>
<pattern>[%thread] [%date] [%level] [%file:%line] - %msg%n</pattern>
</layout>
<logGroupName>DorunLog</logGroupName>
<logStreamUuidPrefix>DorunLog</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="info">
<appender-ref ref="AWS_CLOUD_WATCH_LOG" />
</root>
</configuration>
logGroupName: CloudWatch log Group Name
logStreamUuidPrefix: 로그들의 이름이 겹치지않게 uuid를 권장하고 있습니다.
logRegion: CloudWatch AWS Region
maxBatchLogEvents: 한 번에 전송할 로그 이벤트의 최대 개수를 지정합니다.
maxFlushTimeMillis: 로그 이벤트를 전송하기 전에 최대로 대기할 시간을 밀리초 단위로 지정합니다.
maxBlockTimeMillis: 전송할 로그 이벤트가 없는 경우 최대 대기할 시간을 밀리초 단위로 지정합니다.
retentionTimeDays: 로그그룹의 보존기간을 얘기합니다. 0으로 세팅하면 보존기간은 무기한으로 보존됩니다.
accessKeyId: AWS IAM Access Key (위에서 SpringProperty로 yml에서 읽어온 것 사용하기)
secretAccessKey: AWS IAM Secret Key (위에서 SpringProperty로 yml에서 읽어온 것 사용하기)
이제 서버를 실행시키고 로그가 제대로 찍히나 확인해보자.
로그가 제대로 찍히고 있다는 것을 확인할 수 있었다.