log4j2 사용 시
log4j2.xml에 아래 예제 같이 monitorInterval="초" 속성을 추가하고 WAS를 shutdown 할 시
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN" monitorInterval="5">
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout
pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
</Console>
</Appenders>
<Loggers>
<Root level="debug">
<AppenderRef ref="Console" />
</Root>
</Loggers>
</Configuration>
"appears to have started a thread named [Log4j2-TF-4-Scheduled-<숫자>] but has failed to stop it. This is very likely to create a memory leak."
이러한 메시지가 콘솔에 찍히는 거에 대한 해결방안을 알아본다.
web.xml에 아래 2가지 방법 중 하나를 추가하면 memory leak 현상을 피할 수 있다.
<해결방안1>
<context-param>
<param-name>isLog4jAutoInitializationDisabled</param-name>
<param-value>true</param-value>
</context-param>
<!-- listener 태그 중 가장 먼저 선언되어 있어야 함 -->
<listener>
<listener-class>org.apache.logging.log4j.web.Log4jServletContextListener</listener-class>
</listener>
<해결방안2>
<filter>
<filter-name>log4jServletFilter</filter-name>
<filter-class>org.apache.logging.log4j.web.Log4jServletFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>log4jServletFilter</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
<dispatcher>INCLUDE</dispatcher>
<dispatcher>ERROR</dispatcher>
<dispatcher>ASYNC</dispatcher><!-- Servlet 3.0 w/ disabled auto-initialization only; not supported in 2.5 -->
</filter-mapping>
<!-- listener 태그 중 가장 먼저 선언되어 있어야 함 -->
<listener>
<listener-class>org.apache.logging.log4j.web.Log4jServletContextListener</listener-class>
</listener>
참고사이트에선 servlet 3.0과 servlet 2.5 설정을 나눠놨는데 잘 안되서 위의 방식으로 해결했다.
참고사이트: https://logging.apache.org/log4j/2.x/manual/webapp.html
끝.
'Java, JSP' 카테고리의 다른 글
Java에서 서로 다른 두 List 간 Join 방법 (0) | 2017.05.18 |
---|---|
메이븐 로컬저장소에 직접 등록 명령어 (0) | 2016.12.14 |
ThreadLocal(스레드로컬) (0) | 2016.08.16 |
Apahce poi 엑셀 읽기(파싱) (0) | 2016.07.31 |
Java ServerSocket Multithereading 예제 (0) | 2016.04.25 |
댓글