Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions src/main/kotlin/com/moa/common/auth/AuthMemberResolver.kt
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import com.moa.common.exception.UnauthorizedException
import com.moa.repository.*
import io.jsonwebtoken.ExpiredJwtException
import jakarta.servlet.http.HttpServletRequest
import org.slf4j.MDC
import org.springframework.core.MethodParameter
import org.springframework.stereotype.Component
import org.springframework.web.bind.support.WebDataBinderFactory
Expand Down Expand Up @@ -37,6 +38,7 @@ class AuthMemberResolver(
binderFactory: WebDataBinderFactory?,
): AuthMemberInfo {
val memberId = resolveMemberId()
MDC.put("memberId", memberId.toString())
validateOnboardingCompleted(memberId)
return AuthMemberInfo(id = memberId)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import com.moa.common.exception.ErrorCode
import com.moa.common.exception.UnauthorizedException
import io.jsonwebtoken.ExpiredJwtException
import jakarta.servlet.http.HttpServletRequest
import org.slf4j.MDC
import org.springframework.core.MethodParameter
import org.springframework.stereotype.Component
import org.springframework.web.bind.support.WebDataBinderFactory
Expand Down Expand Up @@ -37,6 +38,7 @@ class OnboardingAuthMemberResolver(
val memberId = jwtTokenProvider.getUserIdFromToken(token)
?: throw UnauthorizedException()

MDC.put("memberId", memberId.toString())
return AuthMemberInfo(id = memberId)
} catch (ex: ExpiredJwtException) {
throw UnauthorizedException(ErrorCode.EXPIRED_TOKEN)
Expand Down
13 changes: 11 additions & 2 deletions src/main/kotlin/com/moa/common/exception/GlobalExceptionHandler.kt
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package com.moa.common.exception

import com.moa.common.response.ApiResponse
import com.moa.common.response.FieldError
import jakarta.servlet.http.HttpServletRequest
import org.slf4j.LoggerFactory
import org.springframework.http.HttpHeaders
import org.springframework.http.HttpStatus
Expand All @@ -26,14 +27,22 @@ class GlobalExceptionHandler : ResponseEntityExceptionHandler() {
}

@ExceptionHandler(UnauthorizedException::class)
fun handleUnauthorizedException(ex: UnauthorizedException): ResponseEntity<ApiResponse<Unit>> {
fun handleUnauthorizedException(
ex: UnauthorizedException,
request: HttpServletRequest,
): ResponseEntity<ApiResponse<Unit>> {
log.warn("Unauthorized: {} {} - {}", request.method, request.requestURI, ex.errorCode)
return ResponseEntity
.status(HttpStatus.UNAUTHORIZED)
.body(ApiResponse.error(ex.errorCode))
}

@ExceptionHandler(ForbiddenException::class)
fun handleForbiddenException(ex: ForbiddenException): ResponseEntity<ApiResponse<Unit>> {
fun handleForbiddenException(
ex: ForbiddenException,
request: HttpServletRequest,
): ResponseEntity<ApiResponse<Unit>> {
log.warn("Forbidden: {} {} - {}", request.method, request.requestURI, ex.errorCode)
return ResponseEntity
.status(HttpStatus.FORBIDDEN)
.body(ApiResponse.error(ex.errorCode))
Expand Down
38 changes: 38 additions & 0 deletions src/main/kotlin/com/moa/common/filter/MdcLoggingFilter.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
package com.moa.common.filter

import jakarta.servlet.FilterChain
import jakarta.servlet.http.HttpServletRequest
import jakarta.servlet.http.HttpServletResponse
import org.slf4j.LoggerFactory
import org.slf4j.MDC
import org.springframework.core.Ordered
import org.springframework.core.annotation.Order
import org.springframework.stereotype.Component
import org.springframework.web.filter.OncePerRequestFilter
import java.util.UUID

@Component
@Order(Ordered.HIGHEST_PRECEDENCE)
class MdcLoggingFilter : OncePerRequestFilter() {

private val log = LoggerFactory.getLogger(javaClass)

override fun doFilterInternal(
request: HttpServletRequest,
response: HttpServletResponse,
filterChain: FilterChain,
) {
MDC.put("requestId", UUID.randomUUID().toString().take(8))

val start = System.currentTimeMillis()
log.info("→ {} {}", request.method, request.requestURI)

try {
filterChain.doFilter(request, response)
} finally {
val duration = System.currentTimeMillis() - start
log.info("← {} {} {} {}ms", request.method, request.requestURI, response.status, duration)
MDC.clear()
}
}
}
5 changes: 5 additions & 0 deletions src/main/kotlin/com/moa/service/FcmService.kt
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,11 @@ class FcmService(
.setBody(data["body"])
.build()
)
.setAndroidConfig(
AndroidConfig.builder()
.setPriority(AndroidConfig.Priority.HIGH)
.build()
)
.putAllData(data)
.build()

Expand Down
1 change: 0 additions & 1 deletion src/main/resources/application-local.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ spring:
properties:
hibernate:
format_sql: true
show_sql: true
defer-datasource-initialization: true
h2:
console:
Expand Down
22 changes: 22 additions & 0 deletions src/main/resources/logback-spring.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
<configuration>
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{HH:mm:ss.SSS} %-5level [%X{requestId:-?}] [member:%X{memberId:-?}] %logger{30} - %msg%n</pattern>
</encoder>
</appender>

<springProfile name="local">
<root level="INFO">
<appender-ref ref="CONSOLE"/>
</root>
<logger name="com.moa" level="DEBUG"/>
<logger name="org.hibernate.SQL" level="DEBUG"/>
</springProfile>

<springProfile name="prod">
<root level="WARN">
<appender-ref ref="CONSOLE"/>
</root>
<logger name="com.moa" level="INFO"/>
</springProfile>
</configuration>
Loading