Log4j LogBack Log4j2

YoungMinKim·2020년 11월 8일
1
post-thumbnail

Section 01


Goal

Java 진영에는 여러가지 로깅 관련 프레임워크 가 존재 한다. 이번 시간에는 log4j, logback에 대한 부분을 간략히 정리하고 알아보자.

등장 순서

시간 순서대로 비교하면 log4j, logback, log4j2 순서로 등장 했다. 또한 logbacklog4j2log4j를 기반으로 하고 있어서 설정하는 방법이나 사용 방법이 유사하다.

log4j.xml

Apachelog4j꽤 오래된 로깅 프레임워크로써, 2015년 개발팀의 log4j 개발 중단 발표가 있었다.

또한 이제는 새로운 프로젝트에 적용 하려면 다른 로깅 프레임워크를 사용 해야 한다.

로그 레벨

TRACE < DEBUG < INFO < WARN < ERROR < FATAL 순이다.

Log4j 구성 요소

log4j를 사용하려면 아래와 같이 dependency 추가필요하다.

<-- Example 01 -->
<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.17</version>
</dependency>

<-- Example 02 -->
<!-- Logging -->
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-api</artifactId>
			<version>${org.slf4j-version}</version>
		</dependency>
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>jcl-over-slf4j</artifactId>
			<version>${org.slf4j-version}</version>
			<scope>runtime</scope>
		</dependency>
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-log4j12</artifactId>
			<version>${org.slf4j-version}</version>
			<scope>runtime</scope>
		</dependency>
		<dependency>
			<groupId>log4j</groupId>
			<artifactId>log4j</artifactId>
			<version>1.2.15</version>
				<exclusions>
					<exclusion>
						<groupId>javax.mail</groupId>
						<artifactId>mail</artifactId>
					</exclusion>
					<exclusion>
						<groupId>javax.jms</groupId>
						<artifactId>jms</artifactId>
					</exclusion>
					<exclusion>
						<groupId>com.sun.jdmk</groupId>
						<artifactId>jmxtools</artifactId>
					</exclusion>
					<exclusion>
						<groupId>com.sun.jmx</groupId>
						<artifactId>jmxri</artifactId>
					</exclusion>
				</exclusions>
			<scope>runtime</scope>
		</dependency>

또한 아래와 같이 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="[%d{yyyy-MM-dd HH:mm:ss}] %-5p: %c - %m%n" />
        </layout>
    </appender>
    
    <logger name="freemarker">
    	<level value="off"/>
    </logger>
    
    <!-- Application Loggers -->
    <logger name="com.joycity.template">
        <level value="debug" />
    </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="debug" />
        <appender-ref ref="console" />
    </root>
    
</log4j:configuration>

log4j를 기반으로 한 logback

우선 log4j를 개발한 개발자가 logback을 개발 하였다. log4j와 아주 유사하면서도 향상된 성능필터링 옵션을 제공하며 slf4j지원한다. 그리고 참 편리한 자동 리로드가능하다.

자동 리로드?

Linux 서버 내에서 log4j를 사용할 시 log level을 변경 하게 되면, 서버를 재 가동하여 반영 사항을 적용 해줘야 한다.

하지만 logback.xml을 서버를 재 가동할 필요 없이, 즉각 자동 리로드를 지원 해준다.

Maven으로 관리하는 프로젝트에서 logback 관련 dependency를 추가하려고 하면 logback-corelogback-classic을 확인할 수 있다. core의 경우 로깅 프레임워크로서의 핵심 기능이 포함되어 있다. classic의 경우는 핵심 기능slf4j에 대한 지원과 같은 추가 기능을 제공 한다.

logback을 사용하려면 아래와 같이 dependency를 추가하면 된다.

<dependency>
	<groupId>ch.qos.logback</groupId>
	<artifactId>logback-classic</artifactId>
	<version>1.2.3</version>
</dependency>

<dependency>
	<groupId>ch.qos.logback</groupId>
	<artifactId>logback-core</artifactId>
	<version>1.2.3</version>
</dependency>

설정은 xml로 진행을 한다.

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <!-- Console Log Setting -->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <layout class="ch.qos.logback.classic.PatternLayout">
            <encoder>
<!--                 <pattern>[%d{yyyy/MM/dd HH:mm:ss}] %-5level %cyan(%-25.25logger{0}) | %msg%n</pattern> -->
            	<Pattern>[%d{yyyy-MM-dd HH:mm:ss}] %-4level [%cyan(%logger{36})] - %msg%n</Pattern>
            </encoder>
        </layout>
    </appender>
 
 	<logger name="com.joycity.test">
		<level value="off" />
	</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 level="INFO">
        <appender-ref ref="STDOUT" />
    </root>
 
</configuration>

log4j2

log4j2는 log4j와 logback과 비교했을 때 가장 최근에 등장 했다. logback과 동일하게 자동 리로드 필터링 기능제공 한다.

log4j2를 사용하려면 아래와 같이 dependency를 선언하면 된다.

<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>1.7.25</version>
</dependency>
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-api</artifactId>
    <version>2.9.0</version>
</dependency>
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-core</artifactId>
    <version>2.9.0</version>
</dependency>
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-slf4j-impl</artifactId>
    <version>2.9.0</version>
</dependency>

log4j2에 대한 설정은 다음과 같이 진행하면 됩니다. log4j2.xml생성하고 아래와 같이 작성합니다.

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="warn" >
    <Appenders>
        <Console name="STDOUT" target="SYSTEM_OUT">
            <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
        </Console>
    </Appenders>
    <Loggers>
        <Root level="info">
            <AppenderRef ref="STDOUT"/>
        </Root>
    </Loggers>
</Configuration>
profile
https://ym1085.github.io

0개의 댓글