Skip to content

Commit 85deeb4

Browse files
committed
✨ feat: 로깅 처리
1 parent 4dd6469 commit 85deeb4

3 files changed

Lines changed: 78 additions & 5 deletions

File tree

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
package refresh.acci.global.config;
2+
3+
import jakarta.servlet.http.HttpServletRequest;
4+
import lombok.extern.slf4j.Slf4j;
5+
import org.aspectj.lang.ProceedingJoinPoint;
6+
import org.aspectj.lang.annotation.Around;
7+
import org.aspectj.lang.annotation.Aspect;
8+
import org.aspectj.lang.annotation.Pointcut;
9+
import org.springframework.security.core.Authentication;
10+
import org.springframework.security.core.context.SecurityContextHolder;
11+
import org.springframework.stereotype.Component;
12+
import org.springframework.web.context.request.RequestContextHolder;
13+
import org.springframework.web.context.request.ServletRequestAttributes;
14+
import refresh.acci.domain.user.model.User;
15+
16+
@Slf4j
17+
@Aspect
18+
@Component
19+
public class LoggingConfig {
20+
21+
@Pointcut("within(@org.springframework.web.bind.annotation.RestController *)")
22+
public void loggingPointcut() {}
23+
24+
@Around("loggingPointcut()")
25+
public Object logApiRequest(ProceedingJoinPoint joinPoint) throws Throwable {
26+
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
27+
28+
String userId = getCurrentUserId(request);
29+
String method = request.getMethod();
30+
String uri = request.getRequestURI();
31+
long start = System.currentTimeMillis();
32+
33+
try {
34+
return joinPoint.proceed();
35+
} finally {
36+
long duration = System.currentTimeMillis() - start;
37+
log.info("user={} {} {} {}ms", userId, method, uri, duration);
38+
}
39+
}
40+
41+
private String getCurrentUserId(HttpServletRequest request) {
42+
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
43+
44+
if (authentication == null || authentication.getPrincipal() instanceof String) {
45+
return request.getHeader("X-Forwarded-For");
46+
} else {
47+
if(authentication.getPrincipal() instanceof User user) {
48+
return String.valueOf(user.getId());
49+
}
50+
}
51+
return "anonymous";
52+
}
53+
}

src/main/resources/application-prod.yml

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,4 @@ spring:
1919
time_zone: Asia/Seoul
2020

2121
server:
22-
port: 8080
23-
24-
logging:
25-
file:
26-
path: /acci/logs
22+
port: 8080
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
<configuration>
2+
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
3+
<encoder>
4+
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
5+
</encoder>
6+
</appender>
7+
8+
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
9+
<file>acci/logs/acci.log</file>
10+
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
11+
<fileNamePattern>acci/logs/acci.log.%d{yyyy-MM-dd}.log</fileNamePattern>
12+
<maxHistory>30</maxHistory>
13+
<totalSizeCap>3GB</totalSizeCap>
14+
</rollingPolicy>
15+
<encoder>
16+
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
17+
</encoder>
18+
</appender>
19+
20+
<root level="INFO">
21+
<appender-ref ref="CONSOLE"/>
22+
<appender-ref ref="FILE"/>
23+
</root>
24+
</configuration>

0 commit comments

Comments
 (0)