>> IT/Practical 자바 유틸리티

[PJU] Log4j 2.x - Logging Framework (4)

mostadmired 2016. 10. 27. 21:21

앞서 자바 어플리케이션에서 log4j2를 사용하는 방법에 대해서 간단히 알아봤다. 아마도 많은 자바 개발자들이 웹어플리케이션 개발 쪽에 관심이 있을 것이다. 그래서 별도의 자바 어플리케이션을 작성해서 사용하는 경우는 많이 없을 듯하다.

여기서는 자바 웹 어플리케이션에서 log4j2를 사용하는 방법에 대해서 알아보겠다.

테스트한 환경은 다음과 같다.


1. eclipse mars.2 (4.5.2)

2. tomcat 8.0


이 포스팅에서는 MAVEN 혹은 Gradle 등을 사용하지 않았다.

그럼 log4j2를 테스트 하기 위해 작업할 순서는 다음과 같다.


1. eclipse에서 dynamic web project 생성

2. log4j2 라이브러리를 WEB-INF/lilb에 복사

3. web.xml 파일 반영

4. log4j2.xml 파일 작성

5. 테스트용 JSP 혹은 서블릿 작성


먼저 eclipse에서 dynamic web project를 생성하면 다음 그림과 같은 프로젝트 구조가 생긴다.



다음 할 일은 log4j2의 라이브러리를 반영하는 것이다. (MAVEN, Gradle 등은 이용하지 않았다. 원하는 경우 각자 적용하길 바란다.)

lib 디렉토리에 저장해야 할 라이브러리는 다음 4가지 이다. 이 중에서 log4j-taglib-2.7.jar 의 경우 JSP 에서 태그라이브러리 형태로 로깅을 할 수 있게 해주는데 필요 없을 경우 복사 하지 않아도 된다.


log4j-api-2.7.jar

log4j-core-2.7.jar

log4j-taglib-2.7.jar (option)

log4j-web-2.7.jar


복사 완료 후 web.xml 파일에 log4j를 사용하겠다는 것을 알려야 한다. 여기서 서블릿 버전에 때라 방법이 2가지 있다. 톰캣 8.0의 경우 서블릿 3.1을 지원하는 관계로 좀 더 손쉽게 적용할 수 있고 서블릿 2.5 스펙만을 사용할 수 있다면 추가적인 작업이 필요하다.

여기서는 우선 서블릿 2.5 버전 기준으로 정리하겠다.


<소스1> web.xml


<?xml version="1.0" encoding="utf-8"?>
<web-app>
    <listener>
        <listener-class>org.apache.logging.log4j.web.Log4jServletContextListener</listener-class>
    </listener>
 
    <filter>
        <filter-name>log4jServletFilter</filter-name>
        <filter-class>org.apache.logging.log4j.web.Log4jServletFilter</filter-class>
    </filter>
   

    <!-- log4j 서블릿 필터를 적용할 요청 종류를 지정한다. 이 중 ASYNC는 서블릿 3.0 이상에서만 사용 가능하다 -->

    <!-- 원하는 url 맵핑을 해주면 된다. 아래 예제는 모든 URL의 모든 형태의 요청에 대해 Log4j 서블릿 필터를 적용한 것이다. -->
    <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>
    </filter-mapping>


    <!-- 생략 가능하다. 별도로 설정하지 않으면 기본 서블릿컨텍스트 이름을 사용한다 -->

    <context-param>
        <param-name>log4jContextName</param-name>
        <param-value>myApplication</param-value>
    </context-param>

   

    <!-- log4j2의 설정 파일 위치를 지정한다. -->     
    <context-param>
        <param-name>log4jConfiguration</param-name>
        <param-value>/WEB-INF/conf/log4j2.xml</param-value>
    </context-param>

</web-app>



web.xml을 작성하고 난 후 log4j2.xml 파일을 작성해야 한다. 필자의 경우 WEB-INF 하위에 conf 디렉토리를 만들고 설정 파일 이름은 log4j2.xml로 하였다. 이 위치 정보는 앞서 작성한 web.xml의 log4jConfiguration 값과 일치해야 한다.


<소스2> log4j2.xml


<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
  <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="trace">
      <AppenderRef ref="Console"/>
    </Root>
  </Loggers>
</Configuration>



log4j2.xml 은 앞서 사용한 자바 어플리케이션용 log4j2 설정과 동일하게 사용하였다. log4j2 설정 파일을 정의하는 방법에 대해서는 다음 포스팅에서 자세히 설명하겠다.


그리고 이를 호출하기 위해 간단한 JSP 파일을 다음과 같이 작성하였다.



<소스3> test.jsp


<%@ page contentType="text/html" %>
<%@ page import="org.apache.logging.log4j.*" %>
<%@ page import="org.apache.logging.log4j.web.*" %>
<%!
    private final Logger logger = LogManager.getRootLogger();
%>
<%
    logger.trace("Entering application.");
    logger.info("Input Message : {}", "Hello Log4j2");
    logger.trace("Exiting application.");
%>



위의 예제는 너무나 간단한 JSP 이며 앞선 포스팅에서 사용하나 자바 어플리케이션을 그대로 jsp로 변경한 것이다.


이제 위의 웹 어플리케이션을 톰캣에 배포 한 후 test.jsp를 호출하면 다음과 같이 콘솔 화면에 로그가 남는 것을 볼 수 있다.


21:21:02.281 [http-nio-8080-exec-2] TRACE  - Entering application.
21:21:02.296 [http-nio-8080-exec-2] INFO   - Input Message : Hello Log4j2
21:21:02.296 [http-nio-8080-exec-2] TRACE  - Exiting application.


여기서 사용한 예제는 이클립스 프로젝트 형태로 export 해서 본 포스팅에 첨부하였다.


== 참고 ==========================================================================

1. Practical 자바 유틸리티, 인사이트 장윤기 (2016) 책의 내용을 보완하기 위한 용도로 작성한 문서이다.

2. 책에 지면 관계상 넣지 않은 부분, 추가 기능 설명이 필요한 부분을 중심으로 기술하였다.

================================================================================

log4jweb.zip
1.51MB