Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[FEAT] 서버 에러 로그 Discord 연결 - #226 #293

Merged
merged 13 commits into from
Oct 3, 2024
Merged

Conversation

gardening-y
Copy link
Contributor

@gardening-y gardening-y commented Oct 2, 2024

🔥Pull requests

⛳️ 작업한 브랜치

👷 작업한 내용

서버 에러 로그를 Discord에 연동했습니다.

우선 로깅 시스템에서 로그 레코드에 정보를 추가로 입력하여 로그를 더욱 의미있고 편히 사용할 수 있게 해주며, 쓰레드 로컬을 사용해 쓰레드마다 고유의 값을 저장할 수 있기 때문에 멀티쓰레드 환경에서 편리한 MDC를 활용해서 Filter를 구현했습니다.

또한, Requst -> 필터 -> 디스패처 서블릿 -> 인터셉터 -> 컨트롤러 값 의 과정에서 Interceptor에서 getInputStream() 을 호출하여 Http Body를 읽으면서 소비하였기 때문에
Controller의 Http Body가 비어있기 때문에 한 번 읽고 사라지는 HttpBody가 아닌 getInputStream()에서 요청 Http Body를 복사하여 값을 저장하고 반환하는 RequestBodyWrapper를 구현하고, 이를 RequestWrappingFilter를 통해 필터를 등록해줬습니다.

이때, 어떤 에러든 정보를 받기 위해서는 구현한 RequestWrappingFilter, MDCFilter를 필터가 맨 앞단에 있어야 한다 생각되어 순서에 0,1번째로 등록해주고, 로컬이 아닌 환경에서만 실행될 수 있도록 MDCFilterConfig를 통해 구현했습니다. 또한, 서블릿에서 다른 서블릿으로 dispatch될 경우 동일한 Filter가 여러 번 거치는 것을 막기 위해 Filter를 상속받는 것이 아닌 OncePerRequestFilter를 상속받아서 구현했습니다.

Logback에서 Appender를 추가해주기 위해서 AppenderBase를 상속받아 DiscordLogAppender를 구현해줬습니다. (Logback 프레임워크에서 로그 이벤트를 특정 대상으로 보내는 기능을 구현할 수 있는 기본 클래스인 AppenderBase와 Logback에서 발생한 로그 이벤트를 표현하는 인터페이스이며, 로그 메시지, 로그 레벨(예: INFO, ERROR), 스레드 정보, MDC 값, 예외 스택 트레이스 등 로그와 관련된 모든 정보를 담고 있는 객체인 ILoggingEvent를 활용해주기 위함입니다.)
Discord 웹후크 주소에 POST메서드를 통해 "content"로 로그 메세지를 전송해줬으며 2000자 이상은 전송이 되지 않기 때문에 2000자를 식별하는 로직도 추가로 구했습니다.
따라서, 최종적으로 User의 정보와 Exception 상세 내용을 두번 전송할 수 있도록 구현했습니다.

Logback기능을 활용하기 위해 logback-spring.xml을 설정해서 DiscordAppender을 연동해줬습니다.

image

🚨 참고 사항

MDC Filter

📟 관련 이슈

@gardening-y gardening-y self-assigned this Oct 2, 2024
@gardening-y gardening-y merged commit 5a78679 into develop Oct 3, 2024
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

[FEAT] 서버 에러 로그 Discord 연결
1 participant