HomeAboutMeBlogGuest
© 2025 Sejin Cha. All rights reserved.
Built with Next.js, deployed on Vercel
♥️
2기 최종 프로젝트 팀별 공간
/
👩‍👩‍👦‍👦
[팀01] 김팽박이
/
🌝
What we learn
/
👀
Logback (1)
👀

Logback (1)


[Spring] Logback으로 Slack에 Error log 남기는 법
이번 글에서는 Spring LogBack을 사용해서 Slack 채널에 로그를 보내는 법에 대해서 정리할 것입니다. 먼저 로그를 보내고자 하는 채널의 WebhookUrl 을 받아오겠습니다. Slack에서 해당 로그가 찍히도록 할 채널을 만들고 들어가겠습니다. 그러면 위와 같이 오른쪽 위에 느낌표 같은 표시가 존재합니다. 그리고 앱 추가 를 누르겠습니다. 그리고 Incoming WebHooks를 검색해보면 위와 같이 뜰 것입니다.
[Spring] Logback으로 Slack에 Error log 남기는 법
https://devlog-wjdrbs96.tistory.com/327
[Spring] Logback으로 Slack에 Error log 남기는 법
Logback 으로 쉽고 편리하게 로그 관리를 해볼까요? ⚙️
Spring Boot 를 통해 프로젝트를 개발할 때, 로깅을 적용하려는 초심자분들을 위한 글입니다. 로깅이란 시스템이 동작할 때 시스템의 상태 및 동작 정보를 시간 경과에 따라 기록하는 것을 의미한다. 로깅을 통해 개발자는 개발 과정 혹은 개발 후에 발생할 수 있는 예상치 못한 애플리케이션의 문제를 진달할 수 있고, 다양한 정보를 수집할 수 있다.
Logback 으로 쉽고 편리하게 로그 관리를 해볼까요? ⚙️
https://tecoble.techcourse.co.kr/post/2021-08-07-logback-tutorial/
Logback 으로 쉽고 편리하게 로그 관리를 해볼까요? ⚙️
Logback include 사용하여 가독성 높이기
필자는 일단 이 글을 쓰면서도 이 include를 사용하여 가독성을 높이는게 더 나은 방법일까? 라는 의문을 계속 가지고 있다. 답은 어느정도 정해져있다. 내가 관리를 할때 파일을 여러개로 쪼개서 가독성을 높이는것이 좋으면 쪼개는거고 아니면 하나의 파일에 다 때려박아도 무관하다. spring의 application-context를 관리하는것과 비슷한 맥락이라고 보면 된다.
Logback include 사용하여 가독성 높이기
https://oingdaddy.tistory.com/256
Logback include 사용하여 가독성 높이기
Sentry를 스프링부트 프로젝트에 적용하기
react.js에 Sentry를 적용하려고 찾아보던 중에 스프링부트도 대응언어에 포함되어있어서 테스트해 보았습니다. 버전 Spring Boot 2.4.1 Sentry sentry-spring-boot-starter 4.3.0 Sentry에 프로젝트 추가 및 설정 Sentry에 로그인 후 프로젝트를 생성합니다. Client Keys (DSN)메뉴에 있는 DSN키를 복사해둡니다. build.gradle.kts에 의존관계를 추가합니다. build.gradle.kts implementation("io.sentry:sentry-spring-boot-starter:4.3.0") application.properties에 DSN (Data Source Name)을 설정합니다. application.properties # DSN설정 sentry.dsn=https://xxxxxxxxxxxxxxxxxxxxxxxxxxx@xxxxxx.ingest.sentry.io/xxxxx # 에러 추척 설정 sentry.
Sentry를 스프링부트 프로젝트에 적용하기
https://bokyung.dev/2021/04/15/sentry-springboot/
Sentry를 스프링부트 프로젝트에 적용하기

로그백 설정을 통해서 프로파일별로 로그를 관리할 수 있다.

 

팀원들과 상의 후 로그를 어떤식으로 남길 지 결정.

  • 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>
  • 알림이 바로바로 올 수 있도록 비동기 설정을 추가하였다.
notion image
 
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 설정 파일이 너무 많이 생겼다. 팀원분들과 이야기 후 파일이 많아도 이렇게 유지할지 아니면 파일을 줄이고 로그 설정을 그냥 한 곳에서 관리할 지 결정이 필요.