Notice
Recent Posts
Recent Comments
관리 메뉴

Developer Gonie

[logback] 동일한 로그가 의도치않게 2번 연속 찍히는 문제해결 본문

개인 공부/logback

[logback] 동일한 로그가 의도치않게 2번 연속 찍히는 문제해결

이대곤 2023. 9. 22. 10:31

문제상황

com.kt.smcp.core.apigateway.service, com.kt.smcp.core.apigateway.relay

위 두 패키지 내에 존재하는 클래스에서 로그를 찍으면 동일한 로그가 의도치않게 2번 연속 찍히는 문제가 발생함

문제를 발생시킨 코드 및 원인

문제의 원인은 logger 가 root의 속성을 상속받게 되어있는데 

이미 STDOUT 관련된게 존재하는 상태에서 root의 STDOUT 관련 속성을 상속받다보니 생긴 문제이다.

	<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
		<encoder>
			<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{20}.%M\(%line\) - %msg%n
			</pattern>
		</encoder>
	</appender>
    
	<logger name="com.kt.smcp.core.apigateway.service">
		<level value="INFO" />
		<appender-ref ref="STDOUT" />    <!-- 문제발생의 원인 -->
	</logger>
	<logger name="com.kt.smcp.core.apigateway.relay">
		<level value="TRACE" />
		<appender-ref ref="STDOUT" />    <!-- 문제발생의 원인 -->
	</logger>

	<root level="INFO">
		<appender-ref ref="STDOUT" />
		<appender-ref ref="SERVICE_LOG" />	
	</root>

해결책1

* additivity="false" 속성을 추가해줌으로써 root 의 속성을 상속받지 않게 하는 방법

	<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
		<encoder>
			<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{20}.%M\(%line\) - %msg%n
			</pattern>
		</encoder>
	</appender>
    
	<logger name="com.kt.smcp.core.apigateway.service" additivity="false">
		<level value="INFO" />
		<appender-ref ref="STDOUT" />
	</logger>
	<logger name="com.kt.smcp.core.apigateway.relay" additivity="false">
		<level value="TRACE" />
		<appender-ref ref="STDOUT" />
	</logger>

	<root level="INFO">
		<appender-ref ref="STDOUT" />
		<appender-ref ref="SERVICE_LOG" />	
	</root>

해결책2

어차피 상속받는걸 남겨둘 필요가 없으므로 각각의 logger 에서 STDOUT 관련 속성을 제거하는 방법

	<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
		<encoder>
			<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{20}.%M\(%line\) - %msg%n
			</pattern>
		</encoder>
	</appender>
    
	<logger name="com.kt.smcp.core.apigateway.service">
		<level value="INFO" />
	</logger>
	<logger name="com.kt.smcp.core.apigateway.relay">
		<level value="TRACE" />
	</logger>

	<root level="INFO">
		<appender-ref ref="STDOUT" />
		<appender-ref ref="SERVICE_LOG" />	
	</root>

 

참고 링크:

https://thinkwarelab.wordpress.com/2016/11/18/java%EC%97%90%EC%84%9C-logback%EC%9D%84-%EC%9D%B4%EC%9A%A9%ED%95%9C-%EB%A1%9C%EA%B9%85logging-%EC%82%AC%EC%9A%A9%EB%B2%95/

Comments