2018. 2. 21. 16:40ㆍframework/etc framework
* Log4j 1에 대해서 가볍게 정리한 문서입니다.
* Log4j 2는 일부 내용이 변경되었을 수 있습니다.
* 요약 *
Log4j 정의
|
Log4j 정의
Log4j : Log for Java
로그문의 출력을 다양한 대상으로 할 수 있도록 도와주는 도구(오픈소스)
Log4j 특징
- log4j는 속도에 최적화
- log4j는 이름있는 로그 계층에 기반
- log4j는 fail-stop이지만 신뢰성은 없음
- log4j는 thread-safe(멀티스레드 환경에서 사용해도 안전하다:역주).
- log4j는 융통성이 풍부
- 설정 파일은 property 파일과 XML 형식으로 실행 중 수정 적용 가능
- log4j는 처음부터 자바의 예외를 처리하기 위해 디자인
- log4j는 출력을 파일, 콘솔, java.io.OutputStream, java.io.Writer, TCP를 사용하는 원격서버, 원격 Unix Syslog 데몬, - 원격 JMS 구독자, 윈도우NT EventLog로 보낼 수 있고, 심지어는 e-mail로 보낼 수도 있음
- log4j는 다음 6단계의 장애레벨을 사용. < TRACE(추가), DEBUG, INFO, WARN, ERROR, FATAL >
- 로그 출력의 형식은 Layout 클래스를 확장함으로써 쉽게 바꿀 수 있음
- 로그가 출력될 대상과 출력 방법은 Appender 인터페이스로 할 수 있음
- log4j는 로거 하나에 다수의, 출력을 담당하는 appender를 할당할 수 있음
- log4j는 국제화를 지원
Log4j 구조
Logger(Category) |
로깅 메세지를 Appender에 전달 |
Appender |
로그의 출력위치를 결정(파일, 콘솔, DB 등) |
Layout |
Appender가 어디에 출력할 것인지 결정했다면 어떤 형식으로 출력할 것이지 출력 layout을 결정 |
Log4j 레벨
FATAL |
아주 심각한 에러가 발생한 상태. 시스템적으로 심각한 문제가 발생해서 어플리케이션작동이 불가능할 경우가 해당하는데, 일반적으로는 어플리케이션에서는 사용할 일이 없음 |
ERROR |
요청을 처리하는 중 문제가 발생한 상태를 나타냄 |
WARN |
처리 가능한 문제이지만, 향후 시스템 에러의 원인이 될 수 있는 경고성 메시지를 나타냄 |
INFO |
로그인, 상태변경과 같은 정보성 메시지를 나타냄 |
DEBUG |
개발시 디버그 용도로 사용한 메시지를 나타냄 |
TRACE |
log4j1.2.12에서 신규 추가된 레벨로서, DEBUG 레벨이 너무 광범위한 것을 해결하기 위해서 좀 더 상세한 상태를 나타냄 |
FATAL > ERROR > WARN > INFO > DEBUG > TRACE |
Log4j Pattern Option
일반적으로 PatternLayout을 사용하는 것이 디버깅에 가장 적합함
* 붉은 색으로 표시된 항목은 실행속도에 영향이 있음
%p |
debug, info, warn, error, fatal 등의 priority 출력 |
%m |
로그내용 출력 |
%d |
로깅 이벤트가 발생한 시간을 출력 ex)포맷은 %d{HH:mm:ss} 같은 형태의 SimpleDateFormat |
%t |
로그이벤트가 발생된 쓰레드의 이름 출력 |
%F |
로깅이 발생한 프로그램 파일명 출력 |
%l |
로깅이 발생한 caller의 정보 출력 |
%L |
로깅이 발생한 caller의 라인수 출력 |
%M |
로깅이 발생한 method 이름 출력 |
% |
% 표시 출력 |
%n |
플랫폼 종속적인 개행문자 출력 |
%c |
카테고리 출력 ex)카테고리가 a.b.c 처럼 되어있다면 %c{2}는 b.c 출력 |
%C |
클래스명 출력 ex)클래스구조가 org.apache.xyz.SomeClass 처럼 되어있다면 %C{2}는 xyz.SomeClass 출력 |
%r |
어플리케이션 시작 이후 부터 로깅이 발생한 시점의 시간(milliseconds) 출력 |
%x |
로깅이 발생한 thread와 관련된 NDC(nested diagnostic context) 출력 |
%X |
로깅이 발생한 thread와 관련된 MDC(mapped diagnostic context) 출력 |
Log4j 주요 클래스
ConsoleAppender |
org.apache.log4j.ConsoleAppender
|
FileAppender |
org.apache.log4j.FileAppender
|
RollingFileAppender |
org.apache.log4j.rolling.RollingFileAppender
|
DailyRollingFileAppender |
org.apache.log4j.DailyRollingFileAppender
일정 기간 단위로 로그 파일을 생성하고 기록 |
JDBCAppender |
org.apache.log4j.jdbc.JDBCAppender
|
SMTPAppender |
로그 메시지를 이메일로 전송 |
NTEventAppender |
윈도우 시스템 이벤트 로그로 메시지 전송 |
EgovDBAppender |
org.apache.log4j.db.EgovDBAppender
Oracle 인 경우 (ojdbc-14.jar jdbc type 4 thin) getGeneratedKeys 를 실행할 때 문제가 발생하므로 useSupportsGetGeneratedKeys flag 에 따라 JDBC3.0 의 getGeneratedKeys 를 사용하지 않는 옵션으로 처리 가능한 EgovDBAppender 로 처리함(TEST DB : 10g r2 버전) |
EgovJDBCAppender |
egovframework.rte.fdl.logging.db.EgovJDBCAppender
Singleton을 구현하고 있으며, spring 의 dataSource bean 을 injection 할 수 있도록 Annotation Bean 으로도 설정되어 있어야 함. |
Log4j 설정
1. 라이브러리 추가
maven 사용 시 pom.xml 수정
1
2
3
4
5 |
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency> |
cs |
또는
사이트로 이동 후 라이브러리 다운로드
다운받은 라이브러리를 프로젝트의 WebContent > WEB_INF > lib 폴더에 복사
2. 설정파일 만들기
설정파일은 xml 또는 properties 로 설정 가능함(xml 권장)
파일 위치는 설정파일들이 있는 곳에 자유롭게 배치해도됨
설정파일 내용은 간단하게 콘솔에 로그를 출력하는 것만 작성함
log4j.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 |
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/xml/doc-files/log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<!-- 콘솔 로그 -->
<appender name="infoConsole" class="org.apache.log4j.ConsoleAppender">
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="[%5p] %d{hh\:mm s} (%F\:%L) %c{1}.%M \: %m%n" />
</layout>
</appender>
<!-- root 설정 -->
<root>
<level value="INFO" />
<appender-ref ref="infoConsole" />
</root>
</log4j:configuration> |
cs |
log4j.properties
1
2
3
4
5
6
7 |
####### Global logging configuration
log4j.rootLogger=INFO, stdout
####### stdout Appender
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=[%5p] %d{hh\:mm s} (%F\:%L) %c{1}.%M \: %m%n |
cs |
3. web.xml 수정
Log4j 의 설정파일을 Web Context Listener 를 통해 등록
1
2
3
4
5
6
7
8
9
10
11
12
13 |
<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>
classpath:project/config/log4j.xml
</param-value>
</context-param>
<!-- Log4j -->
<listener>
<listener-class>
org.springframework.web.util.Log4jConfigListener
</listener-class>
</listener> |
cs |
'framework > etc framework' 카테고리의 다른 글
log4j 특정 클래스 제외 / 클래스별 설정 (0) | 2017.07.04 |
---|---|
Sitemesh 설정, 사용방법, 옵션 등에 대한 정리 (jsp에서 테스트) (0) | 2016.12.22 |
Log4j의 개념, 설치, 사용법, Query Multi Line (쿼리를 여러줄로 가독성 있게 표현) 설정 방법 등 - 전자정부 - eGovFrame spring 기반 | etc framework (2) | 2016.01.05 |
SiteMesh 설정 - 전자정부 - eGovFrame spring 기반 | etc framework (6) | 2016.01.05 |
iBatis에서 MyBatis로 변경하는 과정 및 MyBatis설정 - eGovFrame spring 기반 (0) | 2016.01.05 |