참고 블로그
개발 환경(dev)에서는 INFO 로그 레벨로 콘솔로 출력하도록, 배포 환경(prod)에서는 ERROR 로그만 따로 볼 수 있도록 별도의 파일로 저장되고 슬랙으로 알림이 오도록 설정하였습니다.
1. SLF4J(Simple Logging Facade For Java)
2. 로그 설정
<?xml version="1.0" encoding="UTF-8"?> <configuration> <property name="LOG_DIR" value="./logs"/> <property name="LOG_PATH_NAME" value="${LOG_DIR}/data/"/> <property name="ERROR_LOG_PATH_NAME" value="${LOG_DIR}/error/"/> <property name="LOG_PATTERN_CONSOLE" value="%d{yyyy-MM-dd HH:mm:ss}:%-3relative][%thread] %highlight([ %-5level]) | %cyan(%logger{35}) - %msg%n"/> <property name="LOG_PATTERN_FILE" value="[%d{yyyy-MM-dd HH:mm:ss}:%-3relative][%thread] %-5level %logger{35} - %msg%n"/> <property name="MAX_HISTORY" value="7"/> <!-- 콘솔 출력 --> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>${LOG_PATTERN_CONSOLE}</pattern> </encoder> </appender> <!-- 파일로 저장--> <appender name="DATA" class="ch.qos.logback.core.rolling.RollingFileAppender"> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>${LOG_PATH_NAME}data_%d{yyyyMMdd}.log</fileNamePattern> <maxHistory>${MAX_HISTORY}</maxHistory> </rollingPolicy> <encoder> <pattern>${LOG_PATTERN_FILE}</pattern> </encoder> </appender> <!-- 에러의 경우는 별도 파일 저장 --> <appender name="ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender"> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>ERROR</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>${ERROR_LOG_PATH_NAME}error_%d{yyyyMMdd}.log</fileNamePattern> <maxHistory>${MAX_HISTORY}</maxHistory> </rollingPolicy> <encoder> <pattern>${LOG_PATTERN_FILE}</pattern> </encoder> </appender> <!-- profile 에 따라 slack 에 전송 --> <springProfile name="prod"> <property resource="application-dev.yml" /> <appender name="SLACK_ERROR" class="com.github.maricn.logback.SlackAppender"> <webhookUri>${webhook-uri}</webhookUri> <channel>#${channel}</channel> <layout class="ch.qos.logback.classic.PatternLayout"> <pattern>${LOG_PATTERN_FILE}</pattern> </layout> <username>${username}</username> <iconEmoji>:${emoji}:</iconEmoji> <colorCoding>true</colorCoding> </appender> <appender name="ASYNC_SLACK_ERROR" class="ch.qos.logback.classic.AsyncAppender"> <appender-ref ref="SLACK_ERROR"/> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>ERROR</level> </filter> </appender> </springProfile> <!-- logger 설정 --> <springProfile name="prod"> <logger name="com.prgrms.needit" level="INFO" additivity="false"> <appender-ref ref="DATA"/> </logger> <logger name="com.prgrms.needit" level="ERROR" additivity="false"> <appender-ref ref="ERROR"/> <appender-ref ref="ASYNC_SLACK_ERROR"/> </logger> </springProfile> <!-- 위의 logger 에 해당하지 않으면(dev 개발 환경) 기본 설정 --> <root level="INFO"> <appender-ref ref="STDOUT"/> </root> </configuration>
3. 에러 로그 슬랙으로 남기기


application-prod.yml 에 슬랙 설정 추가
... webhook-uri: ${WEBHOOK_URI} channel: need-it-error-log username: ERROR LOG emoji: rotating_light ...

![[팀12] 기부니🧡](https://www.notion.so/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2F4d3c7111-b629-432b-8af2-5dad455cb1f7%2Fneed-it-dark.png?table=block&id=f41327b8-ca6b-4ec6-9487-af702393c922&cache=v2)
![[Springboot] 슬랙으로 로그 남기기(Logback)](https://www.notion.so/image/https%3A%2F%2Fmedia.vlpt.us%2Fimages%2Fhaerong22%2Fpost%2F0e728ae6-c210-45f8-8a03-f9967ae49d0c%2Fsla.png%3Fw%3D768?table=block&id=eead6d7f-9fd1-49ce-9de5-75979506c021&cache=v2)