Skip to content

Conversation

@PicturePark1101
Copy link
Contributor

@PicturePark1101 PicturePark1101 commented Jun 28, 2025

작업내용

sql도 대시보드로 확인할 수 있도록 설정 추가 및 로그 포맷팅

상세설명_ & 캡쳐

  • sql 로그 확인할 수 있도록 각각 환경 파일들에 아래 코드 추가했습니다.
    logback-{profile}.xml
    <logger name="org.hibernate.SQL" level="DEBUG" additivity="false">
        <appender-ref ref="SQL_FILE"/>
        <appender-ref ref="SQL_CONSOLE"/>
    </logger>

    <logger name="org.hibernate.orm.jdbc.bind" level="TRACE" additivity="false">
        <appender-ref ref="SQL_FILE"/>
        <appender-ref ref="SQL_CONSOLE"/>
    </logger>
  • yml에 아래 설정 추가 예정
  level:
    org.hibernate.SQL: DEBUG
    org.hibernate.orm.jdbc.bind: TRACE
  • promtail 설정 파일 완료 - 추후 배포 시 prod 서버에도 필요
  • home디렉토리/logs 아래 sql 디렉토리 생성완료(docker promtail 컨테이너에 마운트 위해 필요한 부분, 로그 파일 흐름 : 주인장 컨테이너 --> 홈 디렉토리 --> 프롬테일 컨테이너 ) 컨테이너끼리 파일 공유가 불가해 이렇게 구성

로그 포맷

sql - 쿼리, 바인딩 파라미터 함께 뜨도록

[2025-06-28 18:55:44.885] [DEBUG] [http-nio-8080-exec-2] [o.h.SQL] [request_id=8518dff2-011f-48c7-8140-5726a4166ad0] [user_id=1] 

    select
        pp1_0.purchased_pencil_id,
        pp1_0.app_account_token,
        pp1_0.delivery_status,
        pp1_0.member_id,
        pp1_0.play_time,
        pp1_0.price,
        pp1_0.purchase_quantity,
        pp1_0.purchased_at,
        pp1_0.remain_quantity,
        pp1_0.retry_count,
        pp1_0.title,
        pp1_0.transaction_id,
        pp1_0.transaction_status,
        pp1_0.updated_at 
    from
        purchased_pencil pp1_0 
    where
        pp1_0.member_id=? 
        and pp1_0.delivery_status=0 
    order by
        pp1_0.purchased_at desc

[2025-06-28 18:55:44.886] [TRACE] [http-nio-8080-exec-2] [o.h.o.j.bind] [request_id=8518dff2-011f-48c7-8140-5726a4166ad0] [user_id=1] 
binding parameter (1:BIGINT) <- [1]

api 파일 로그

[2025-06-28 18:55:44.889] [INFO ] [http-nio-8080-exec-2] [u.t.j.m.ApiLogPrinter] [request_id=8518dff2-011f-48c7-8140-5726a4166ad0] [user_id=1] 
Request :  [method] GET [uri] /api/v2/pencil/purchased
[headers] user-agent=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36, accept=*/*, host=localhost:8080
[requestBody]  

[2025-06-28 18:55:44.889] [INFO ] [http-nio-8080-exec-2] [u.t.j.m.ApiLogPrinter] [request_id=8518dff2-011f-48c7-8140-5726a4166ad0] [user_id=1] 
Response :  [status] 200 [responseBody] 성공입니다. 

JWT 관련

  • 아래처럼 로그에서 사용자의 user_id를 추적하고 있습니다. 해당 과정은 MDC를 통해 구현하고 있습니다. MDC는 스레드 단위로 key값을 저장하고, get하여 데이터를 사용할 수 있는 라이브러리입니다.

logback-appender.xml

 <property name="FILE_LOG_PATTERN"
              value="%n[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%-5level] [%thread] [%logger{1}] [request_id=%X{request_id}] [user_id=%X{user_id}] %n%msg%n"/>
  • 이를 위해 jwt 로직에서 user_id를 MDC에 넣는 로직을 사용하고 있습니다.
  • 토큰을 검증하는 과정에서 검증 성공 시 로그인한 유저의 ID를 MDC에 넣는 로직을 사용하고 있습니다. 참고 부탁드립니다.

JwtService.java

    public Authentication getAuthentication(String token) {
        System.out.println(this.getMemberIdFromJwtToken(token));

        UserDetails userDetails =   userDetailService.loadUserByUsername(this.getMemberIdFromJwtToken(token).toString());
        
       registerUserId(String.valueOf(this.getMemberIdFromJwtToken(token))); // 이 부분 
        
      return new UsernamePasswordAuthenticationToken(userDetails, token, userDetails.getAuthorities());
    }

LoggerProvider.java

  public static void registerUserId(String userId) {
    MDC.put(USER_ID, userId);
  }

@PicturePark1101 PicturePark1101 requested a review from essaysir June 28, 2025 09:47
@PicturePark1101 PicturePark1101 self-assigned this Jun 28, 2025
@PicturePark1101 PicturePark1101 added ✨ feature 기능 추가 진이 작업했습니다. 👊🏻 PULL REQUEST pr날릴때 labels Jun 28, 2025
@PicturePark1101 PicturePark1101 merged commit 6a5fa9b into dev Jun 28, 2025
1 check passed
@essaysir essaysir deleted the feat/#425 branch September 10, 2025 13:58
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

✨ feature 기능 추가 진이 작업했습니다. 👊🏻 PULL REQUEST pr날릴때

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants