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 docker/dev/docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@ services:
- TZ=Asia/Seoul
networks:
- server-network
volumes:
- /home/ubuntu/logs:/app/logs
redis:
image: redis:latest
ports:
Expand Down
4 changes: 3 additions & 1 deletion docker/prod/docker-compose.yml
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
services:
backend:
image: yugyeong390/photi-server:1.1.1
image: yugyeong390/photi-server:1.1.2
env_file:
- .env
ports:
- "8080:8080"
volumes:
- /home/ubuntu/logs:/app/logs
environment:
- TZ=Asia/Seoul
networks:
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package com.photi.server.common.log

import org.slf4j.MDC
import org.springframework.core.task.TaskDecorator

class LoggingTaskDecorator : TaskDecorator {

override fun decorate(task: Runnable): Runnable {
val callerThreadContext = MDC.getCopyOfContextMap()

return Runnable {
callerThreadContext?.let {
MDC.setContextMap(it)
}
task.run()
}
}
}
31 changes: 31 additions & 0 deletions src/main/kotlin/com/photi/server/common/log/MDCLoggingFilter.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package com.photi.server.common.log

import jakarta.servlet.Filter
import jakarta.servlet.FilterChain
import jakarta.servlet.ServletRequest
import jakarta.servlet.ServletResponse
import org.slf4j.MDC
import org.springframework.core.Ordered
import org.springframework.core.annotation.Order
import org.springframework.stereotype.Component
import java.util.*

@Component
@Order(Ordered.HIGHEST_PRECEDENCE)
class MDCLoggingFilter : Filter {

override fun doFilter(
request: ServletRequest,
response: ServletResponse,
filterChain: FilterChain,
) {
val uuid = UUID.randomUUID()
MDC.put(REQUEST_ID, uuid.toString())
filterChain.doFilter(request, response)
MDC.clear()
}

companion object {
const val REQUEST_ID = "request_id"
}
}
19 changes: 13 additions & 6 deletions src/main/kotlin/com/photi/server/config/AsyncConfig.kt
Original file line number Diff line number Diff line change
@@ -1,24 +1,31 @@
package com.photi.server.config

import com.photi.server.common.exception.CustomAsyncUncaughtExceptionHandler
import com.photi.server.common.log.LoggingTaskDecorator
import org.springframework.aop.interceptor.AsyncUncaughtExceptionHandler
import org.springframework.context.annotation.Configuration
import org.springframework.scheduling.annotation.AsyncConfigurer
import org.springframework.scheduling.annotation.EnableAsync
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor
import java.util.concurrent.Executor
import java.util.concurrent.ThreadPoolExecutor

@EnableAsync
@Configuration
class AsyncConfig : AsyncConfigurer {

override fun getAsyncExecutor(): Executor? {
override fun getAsyncExecutor(): ThreadPoolTaskExecutor {
return ThreadPoolTaskExecutor().apply {
corePoolSize = 3
maxPoolSize = 10
queueCapacity = 500
corePoolSize = 10
queueCapacity = 50
maxPoolSize = 30
keepAliveSeconds = 60
setThreadNamePrefix("Executor-")
initialize()
setTaskDecorator(LoggingTaskDecorator())
setRejectedExecutionHandler(ThreadPoolExecutor.CallerRunsPolicy())
setWaitForTasksToCompleteOnShutdown(true)
setAwaitTerminationSeconds(20)
setAcceptTasksAfterContextClose(false)
setAllowCoreThreadTimeOut(false)
}
}

Expand Down
47 changes: 47 additions & 0 deletions src/main/resources/logback-spring.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
<?xml version="1.0" encoding="UTF-8"?>
<configuration>

<springProperty name="LOG_PATH" source="logging.file.path" defaultValue="logs"/>

<property name="LOG_PATTERN"
value="[%X{request_id:-startup}] [%d{yyyy-MM-dd HH:mm:ss}:%-4relative] %green([%thread]) %highlight(%-5level) %boldWhite([%C.%M:%yellow(%L)]) - %msg %ex{5}%n"/>

<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>${LOG_PATTERN}</pattern>
</encoder>
</appender>

<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<encoder>
<pattern>${LOG_PATTERN}</pattern>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${LOG_PATH}/%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<maxHistory>1</maxHistory>
<totalSizeCap>200MB</totalSizeCap>
<maxFileSize>10MB</maxFileSize>
</rollingPolicy>
</appender>

<logger name="feign.Logger" level="DEBUG"/>

<springProfile name="local">
<root level="INFO">
<appender-ref ref="CONSOLE"/>
</root>
</springProfile>

<springProfile name="dev">
<root level="INFO">
<appender-ref ref="FILE"/>
</root>
</springProfile>

<springProfile name="prod">
<root level="INFO">
<appender-ref ref="FILE"/>
</root>
</springProfile>

</configuration>
19 changes: 0 additions & 19 deletions src/main/resources/logback/dev-logback.xml

This file was deleted.

65 changes: 0 additions & 65 deletions src/main/resources/logback/prod-logback.xml

This file was deleted.