[PJU] Log4j 2.x - Logging Framework (4)
앞서 자바 어플리케이션에서 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"?> <!-- log4j 서블릿 필터를 적용할 요청 종류를 지정한다. 이 중 ASYNC는 서블릿 3.0 이상에서만 사용 가능하다 --> <!-- 원하는 url 맵핑을 해주면 된다. 아래 예제는 모든 URL의 모든 형태의 요청에 대해 Log4j 서블릿 필터를 적용한 것이다. --> <!-- 생략 가능하다. 별도로 설정하지 않으면 기본 서블릿컨텍스트 이름을 사용한다 --> <context-param> <!-- log4j2의 설정 파일 위치를 지정한다. --> |
web.xml을 작성하고 난 후 log4j2.xml 파일을 작성해야 한다. 필자의 경우 WEB-INF 하위에 conf 디렉토리를 만들고 설정 파일 이름은 log4j2.xml로 하였다. 이 위치 정보는 앞서 작성한 web.xml의 log4jConfiguration 값과 일치해야 한다.
<소스2> log4j2.xml
<?xml version="1.0" encoding="UTF-8"?> |
log4j2.xml 은 앞서 사용한 자바 어플리케이션용 log4j2 설정과 동일하게 사용하였다. log4j2 설정 파일을 정의하는 방법에 대해서는 다음 포스팅에서 자세히 설명하겠다.
그리고 이를 호출하기 위해 간단한 JSP 파일을 다음과 같이 작성하였다.
<소스3> test.jsp
<%@ page contentType="text/html" %> |
위의 예제는 너무나 간단한 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. 책에 지면 관계상 넣지 않은 부분, 추가 기능 설명이 필요한 부분을 중심으로 기술하였다.
================================================================================