로그백 설정을 통해서 프로파일별로 로그를 관리할 수 있다.
팀원들과 상의 후 로그를 어떤식으로 남길 지 결정.
- local: 모든 로그를 콘솔로만 남긴다.
- test: 모든 로그를 콘솔로만 남긴다.
- prod:
DB,
INFO
-ERROR
레벨의 로그를 전부 파일로 관리한다.ERROR
레벨은 우리에게 알람이 올 수 있도록 슬랙 또는 AWS Cloud Watch 를 사용해 보기로 했다.
file-db.xml
<included> <appender name="FILE_DB" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${DB_LOG_FILE}</file> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>DEBUG</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> <encoder> <pattern>${FILE_LOG_PATTERN}</pattern> </encoder> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>${DB_LOG_RECORD_FILE}</fileNamePattern> <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> <maxFileSize>${MAX_FILE_SIZE}</maxFileSize> </timeBasedFileNamingAndTriggeringPolicy> <maxHistory>${MAX_HISTORY}</maxHistory> </rollingPolicy> </appender> <logger name="org.hibernate.SQL" additivity="false"> <level value = "DEBUG" /> <appender-ref ref="FILE_DB" /> </logger> <logger name="org.hibernate.type.descriptor.sql.BasicBinder" additivity="false"> <level value = "TRACE" /> <appender-ref ref="FILE_DB" /> </logger> <logger name="com.zaxxer.hikari" additivity="false"> <level value = "DEBUG" /> <appender-ref ref="FILE_DB" /> </logger> </included>
- db 로그를 파일로 남기기 위한 appender
- sql, sql 파라미터 바인딩 값, db 커넥션 정보를 저장한다.
file-info, file-error
<included> <appender name="FILE_ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${ERROR_LOG_FILE}</file> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>ERROR</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> <encoder> <pattern>${FILE_LOG_PATTERN}</pattern> </encoder> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>${ERROR_LOG_RECORD_FILE}</fileNamePattern> <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> <maxFileSize>${MAX_FILE_SIZE}</maxFileSize> </timeBasedFileNamingAndTriggeringPolicy> <maxHistory>${MAX_HISTORY}</maxHistory> </rollingPolicy> </appender> </included>
- 세 파일 모두 똑같은 형식으로 로깅 레벨만 다르다.
slack.xml
<included> <property resource="logback-slack.yml" /> <appender name="SLACK" class="com.github.maricn.logback.SlackAppender"> <webhookUri>${WEBHOOK_URI}</webhookUri> <layout class="ch.qos.logback.classic.PatternLayout"> <Pattern>${SLACK_LOG_PATTERN}</Pattern> </layout> <username>${CHANNEL}</username> <iconEmoji>:${EMOJI}:</iconEmoji> <colorCoding>true</colorCoding> </appender> <appender name="ASYNC_SLACK" class="ch.qos.logback.classic.AsyncAppender"> <appender-ref ref="SLACK"/> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>ERROR</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> </appender> </included>
- 알림이 바로바로 올 수 있도록 비동기 설정을 추가하였다.

logback-spring.xml
<?xml version="1.0" encoding="UTF-8"?> <configuration> <include resource="logback/logback-properties.xml" /> <include resource="logback/logback-console.xml" /> <include resource="logback/logback-slack.xml" /> <springProfile name="prod"> <include resource="logback/logback-file-db.xml" /> <include resource="logback/logback-file-info.xml" /> <include resource="logback/logback-file-warn.xml" /> <include resource="logback/logback-file-error.xml" /> <root level="INFO"> <appender-ref ref="FILE_INFO" /> <appender-ref ref="FILE_WARN" /> <appender-ref ref="FILE_ERROR" /> <appender-ref ref="ASYNC_SLACK" /> </root> </springProfile> <springProfile name="local"> <logger name="org.hibernate.SQL" level="DEBUG" /> <root level="INFO"> <appender-ref ref="CONSOLE" /> </root> </springProfile> <springProfile name="test"> <logger name="org.hibernate.type.descriptor.sql.BasicBinder" level="TRACE" /> <root level="INFO"> <appender-ref ref="CONSOLE"/> </root> </springProfile> </configuration>
- 전체적인 logback 설정 xml
- 운영 환경에서
DB,
INFO
-ERROR
레벨의 로그를 파일로 저장한다. 에러 레벨에는 슬랙 추가.
- 로컬 환경에서 개발을할 때 sql 을 볼 수 있도록 org.hibernate.SQL 설정을 추가하였다.
- 테스트 환경에서 파라미터 바인딩 값을 볼 수 있으면 좋을 것 같아서 BasicBinder 설정을 추가하였다.
include 를 사용하여서 메인 설정 xml 파일은 확실히 정리가된 느낌이 든다. 하지만 하위의 logback 설정 파일이 너무 많이 생겼다. 팀원분들과 이야기 후 파일이 많아도 이렇게 유지할지 아니면 파일을 줄이고 로그 설정을 그냥 한 곳에서 관리할 지 결정이 필요.