커피와 개발자

[Spring] log4j2 설정하기 본문

Spring Project

[Spring] log4j2 설정하기

광박이 2019. 11. 27. 11:02
728x90

log4j(Log for java)는 Apache의 프로젝트 중 하나인 jakarta-project에서 만든 프로젝트 중 하나로 처음부터 자바 예외를 위해 설계되었다.

프로그램을 작성하는 도중에 로그를 남기기 위해 사용되는 자바 기반 로깅 유틸리티이고 디버그용 도구로 주로 사용되고 있다.

왜 log4j를 사용할까?

자바에서는 출력을 system.out으로도 할 수 있는데 문제는 운영이다. 개발시에 개발자가 출력한 system.out구문을 모두 제거하지 않았다면 운영시에 계속 로그가 출력되고 이것은 리소스 낭비를 초래한다. 그렇다고 개발자가 배포시에 모두 찾아서 지우는것 또한 일이다.

또한 운영시에 중대한 오류가 발생하였다고 하면 출력되는 로그가 없다고 하면 그것 또한 문제를 찾기 위해 엄청난 시간과 노력이 들어간다. 이처럼 운영상에 로그를 남기지 않고 개발시에만 로그를 남김으로써 리소스 낭비를 줄일 수 있고 필요시에는 로그를 남겨서 오류 추적시에 사용될 수 있다.

log4j의 프로젝트는 이미 종료되었고 추가적인 업데이트가 이루어지지 않는다. 현재는 log4j2가 사용되고 있고 이는 log4j를 기반으로 만들어졌기 때문에 log4j와 사용방법은 동일하고 설정에서 약간의 차이가 발생하지만 둘을 비교해서 보면 그렇게 어렵지 않으며 바꾸는 것도 어렵지 않다.

Spring 프로젝트를 생성할 시점의 pom.xml의 log4j를 설정했던 부분을 보면

<!-- https://mvnrepository.com/artifact/log4j/log4j -->
<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.17</version>
</dependency>

와 같이 생성되어있는 것을 볼수 있고 이것을 log4j2로 바꾸면 된다.

<!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-core -->
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-core</artifactId>
    <version>2.12.1</version>
</dependency>

https://mvnrepository.com/ 에서 log4j를 검색하여 보면 마지막 버전dl 1.2.17인 것을 알 수 있으며, Note를 보면 org.apache.logging.log4j가 log4j-core로 변경 되었음을 알 수 있다.

log4j의 최신버전과 이동을 알리는 구문

pom.xml을 변경하고 나면

log4j.xml을 log4j2.xml으로 변경하고 내용을 살짝 수정하면 된다.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration PUBLIC "-//APACHE//DTD LOG4J 1.2//EN" "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">

	<!-- Appenders -->
	<appender name="console" class="org.apache.log4j.ConsoleAppender">
		<param name="Target" value="System.out" />
		<layout class="org.apache.log4j.PatternLayout">
			<param name="ConversionPattern" value="%-5p: %c - %m%n" />
		</layout>
	</appender>
	
	<!-- Application Loggers -->
	<logger name="std.pjt.log">
		<level value="info" />
	</logger>
	
	<!-- 3rdparty Loggers -->
	<logger name="org.springframework.core">
		<level value="info" />
	</logger>	
	
	<logger name="org.springframework.beans">
		<level value="info" />
	</logger>
	
	<logger name="org.springframework.context">
		<level value="info" />
	</logger>

	<logger name="org.springframework.web">
		<level value="info" />
	</logger>

	<!-- Root Logger -->
	<root>
		<priority value="info" />
		<appender-ref ref="console" />
	</root>
	
</log4j:configuration>

Spring MVC 프로젝트를 생성하고 나면 위와 같은 log4j파일이 자동으로 생성 되었을 것이고 이것을 토대로 아래와 같이 log4j.xml파일 이름을 log4j2파일로 변경하고 xml 소스를 조금 수정한다.

<?xml version="1.0" encoding="UTF-8"?>
<Configuration xmlns:log4j="http://jakarta.apache.org/log4j/">

	<!-- Appenders -->
	<Appenders>
    	<Console name="console" target="SYSTEM_OUT">
        	<PatternLayout pattern="%-5p: %c - %m%n" />
        </Console>
	</Appenders>
	
	<!-- Application Loggers -->
    <Loggers>
        <Logger name="java.sql" level="DEBUG" additivity="false">
            <AppenderRef ref="console" />
        </Logger>
        <Logger name="egovframework" level="DEBUG" additivity="false">
            <AppenderRef ref="console" />
        </Logger>
        <Logger name="jdbc.sqltiming" level="DEBUG" additivity="false">
            <AppenderRef ref="console" />
        </Logger>
        <Logger name="org.springframework" level="DEBUG" additivity="false">
            <AppenderRef ref="console" />
        </Logger>
        <Logger name="jdbc.resultsettable" additivity="false"> 
            <level value="info" /> 
            <appender-ref ref="console-log4jdbc" />
        </Logger>
    </Loggers>
	
</Configuration>

위의 Loggers 부분의 Logger를 프로젝트에 맞게 바꾸면 된다.

728x90
Comments