Java 진영에는 여러가지 로깅 관련
프레임워크
가 존재 한다. 이번 시간에는 log4j
, logback
에 대한 부분을 간략히 정리하고 알아보자.
시간 순서대로 비교하면 log4j
, logback
, log4j2
순서로 등장 했다. 또한 logback
과 log4j2
는 log4j
를 기반으로 하고 있어서 설정하는 방법
이나 사용 방법
이 유사하다.
Apache
의 log4j
는 꽤 오래된 로깅 프레임워크
로써, 2015년 개발팀의 log4j 개발 중단 발표
가 있었다.
또한 이제는 새로운 프로젝트에 적용 하려면 다른 로깅 프레임워크를 사용 해야 한다.
TRACE
< DEBUG
< INFO
< WARN
< ERROR
< FATAL
순이다.
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와 아주 유사하면서도 향상된 성능
과 필터링 옵션
을 제공하며 slf4j
도 지원
한다. 그리고 참 편리한 자동 리로드
도 가능
하다.
자동 리로드?
Linux 서버 내에서 log4j
를 사용할 시 log level
을 변경 하게 되면, 서버를 재 가동하여 반영 사항을 적용 해줘야 한다.
하지만 logback.xml을 서버를 재 가동할 필요 없이, 즉각 자동 리로드를 지원 해준다.
Maven으로 관리하는 프로젝트에서 logback 관련 dependency를 추가하려고 하면 logback-core
와 logback-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는 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>