티스토리 뷰

생활코딩/Spring

스프링 배우기 - log4j

우봉이 2014. 3. 25. 10:49

Log4J를 사용하기 위해서 Jar파일을 필요로 한다.

<dependencies>
   <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>3.0.0.RELEASE</version>
      <scope>runtime</scope>
   </dependency>
   <dependency>
      <groupId>log4j</groupId>
      <artifactId>log4j</artifactId>
      <version>1.2.14</version>
      <scope>runtime</scope>
   </dependency>
</dependencies> 


Log4j Listener를 등록한다 ( web.xml )

<pre class="brush: xml;">
	<!-- log4J -->
	<context-param>
		<param-name>log4jConfigLocation</param-name>
		<param-value>classpath:log/log4j.xml</param-value>
	</context-param>

	<listener>
		<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
	</listener>
</pre>

Log4j 의 내용을 출력하는 Config 파일은 3가지 방법이 있다.

1. 자바 소스로 직접 기술하는 방법

2. Properties 파일을 작성하여 사용하는 방법

3. xml 파일로 작성하여 사용하는 방법


Xml 파일로 작성하는 Log4j 설정 방법은 아래와 같다.

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">

<log4j:configuration 
    xmlns:log4j="http://jakarta.apache.org/log4j/">
    
    <!-- 콘솔 로그 -->
	<appender name="console" class="org.apache.log4j.ConsoleAppender">
	     <layout class="org.apache.log4j.PatternLayout">
	          <param name="ConversionPattern" value="%d %p [%c{5}] %m [%X{userId}]%n" />
	     </layout>   
	</appender>
    
	<!-- 날짜별 로그 파일 생성 -->
	<appender name="rollingFile" class="org.apache.log4j.DailyRollingFileAppender">
		<param name="File" value="/LOG/all.log"/>
		<param name="Append" value="true"/>
		<!-- param name="MaxFileSize" value="100MB"/ -->
		<!-- param name="MaxBackupIndex" value="2"></param -->
		<param name="DatePattern" value="'.'yyyy-MM-dd"/> 
	    <layout class="org.apache.log4j.PatternLayout">
	        <param name="ConversionPattern" value="%d %p [%C{10}] %m [%X{userId}]%n" />
	    </layout>   
	</appender>
	
	<!-- 날짜별 로그 파일 생성 -->
	<appender name="springFile" class="org.apache.log4j.DailyRollingFileAppender">
		<param name="File" value="/LOG/spring.log"/>
		<param name="Append" value="true"/>
		<!-- param name="MaxFileSize" value="100MB"/ -->
		<!-- param name="MaxBackupIndex" value="2"></param -->
		<param name="DatePattern" value="'.'yyyy-MM-dd"/> 
	    <layout class="org.apache.log4j.PatternLayout">
	        <param name="ConversionPattern" value="%d %p [%C{10}] %m [%X{userId}]%n" />
	    </layout>   
	</appender>
	
	<!-- 날짜별 로그 파일 생성(에러만) -->
	<appender name="errFile" class="org.apache.log4j.DailyRollingFileAppender">
	    <param name="Threshold" value="ERROR"/>
		<param name="File" value="/LOG/error.log"/>
		<param name="Append" value="true"/>
		<!-- param name="MaxFileSize" value="100MB"/ -->
		<!-- param name="MaxBackupIndex" value="2"></param -->
		<param name="DatePattern" value="'.'yyyy-MM-dd"/> 
	    <layout class="org.apache.log4j.PatternLayout">
	        <param name="ConversionPattern" value="%d %5p [%C{1}] %m [%X{userId}]%n" />
	    </layout>   
	</appender>
	
	<!-- 특정 패키지 출력 설정 -->
    <logger name="org.apache.ibatis">
	    <level value="DEBUG"/>
	</logger>
    <logger name="org.springframework">
	    <level value="DEBUG"/>
	    <appender-ref ref="springFile" />
	</logger>
	<logger name="java.sql">
	    <level value="DEBUG"/>
	</logger>

	<!-- 기본 출력 설정 -->	
	<root>
		<level value="DEBUG" />
		<appender-ref ref="console" />
		<appender-ref ref="errFile"/>
		<appender-ref ref="rollingFile"/>
	</root> 
	
</log4j:configuration>

properties 파일로 설정하는 방법은 아래와 같다.

log4j.rootLogger=DEBUG, file, stdout

log4j.appender.file=org.apache.log4j.DailyRollingFileAppender
log4j.appender.file.File=/LOG/prop.log
log4j.appender.file.Append=true
log4j.appender.file.MaxFileSize=10MB
log4j.appender.file.MaxBackupIndex=1
log4j.appender.file.DatePattern='.'yyyy-MM-dd
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d %p [%C{10}] %m [%X{userId}]%n

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %p [%C{10}] %m [%X{userId}]%n

1. Logger

 - 특정 대상에 대한 로그 출력

 - appender-ref 를 통해 해당 appender 참조

 - 애플리케이션 별로 정의하고 로그 레벨과 Appender 지정

 - Level

 로그 레벨

설명 

fatal 

아주 심각한 에러가 발생한 상태 

error 

요청을 처리하는 중 문제가 발생한 상태 

warn 

처리 가능한 문제, 향후 에러의 원인이 될 수 있는 경고 메세지 

info 

로그인, 상태 변경과 같은 정보 메세지 

debug 

개발 시 디버그 용도로 사용한 메세지 

trace 

신규 추가된 레벨로 디버그 레벨이 넘 ㅜ광범위한 것을 해결하기 위해서 좀 더 상세한 상태를 나타냄

2. Appender

 - 출력 포맷 설정

 - Threshold, File, Append

 - DatePattern

 형식

설명 

'.'yyyy-MM

매달 시작 일에 로그 파일 변경 

'.'yyyy-ww

매주 시작 일에 로그 파일 변경 

 '.'yyyy-MM-dd

매일 자정에 로그 파일 변경 

 '.'yyyy-MM-dd-a

자정과 정오에 로그 파일 변경 

 '.'yyyy-MM-dd-HH 

매 시간마다 로그 파일 변경 

 '.'yyyy-MM-dd-HH-mm

매 분마다 로그 파일 변경 

 - Layout

 형식

설명 

 %P

 debug, info, warn, error, fatal 등 priority 출력

 %m 

 로그 내용 출력 

%d 

 발생 시간 출력  

%t 

 발생 쓰레드의 이름 출력 

%n 

 개행 문자 출력 

%c 

 패키지 출력 / {숫자} 를 이용하여 단계별 출력, ex) %x{5} 

%C 

 클래스 명 출력 / {숫자} 를 이용하여 단계별 출력, ex) %x{5}   

%F 

 프로그램 파일 명 출력 

%I 

 로깅이 발생한 caller 의 정보 출력 

%L 

 로깅이 발생한 caller 의 라인 수 출력 

%M 

 로깅이 발생한 method 명 출력 

%r 

 애플리케이션 시작 이후 로깅이 발생한 시점의 시간 출력(millisecond) 

%x 

 NDC 에 저장된 내용 출력 

%X 

 MDC 에 저장된 내용 출력 

3. Root

 - 기본적으로 출력 될 로그 출력

 - appender-ref 를 통해 해당 appender 참조


댓글