Spring/스프링 log4j 설정하기

|

1. log4j 란?

log4j는 Apache에서 만든 자바기반의 로그 오픈소스 라이브러리를 말한다.

Java로 개발하다가 디버깅을 위해 보통 System.out.println() 를 많이 사용한다. 하지만 System.out.println()은 단순히 텍스트만 표시해주는 역할밖에 하지 않는다. 또한 시스템 성능에도 영향을 미친다.

반면 log4j를 사용하면, 단순 로그 뿐만 아니라 로그 포맷을 통해 에러위치, 출력형식, 출력 레벨 등을 정의할 수 있고 성능면에서도 훨씬 유리하다.

log4j는 다음과 같이 6개의 로그 레벨을 가지고 있다. 설정 파일에 레벨 지정이 가능하고 그 등급 이상의 로그만 출력할 수 있다. 예를 들어 INFO 등급으로 설정을 했다면 그 이상인 INFO, WARN, ERROR, FATAL 등급의 에러가 출력되는 방식이다.

  • FATAL
  • ERROR
  • WARN
  • INFO
  • DEBUG
  • TRACE


2. log4j.xml 설정

로그를 콘솔출력/파일저장이 동시에 되도록 설정해 놓았다. 원하지 않는 사람은 주석처리 하면 된다. 로그 포맷은 다양한 설정값들이 있으나 전부 다 설명하지 않겠다.

이 블로그에 아주 상세히 설명이 되어 있는거 같으니 필요하신분은 참고!

쿼리 로그나 result table 로그를 보고싶으면 해당 logger의 level을 수정해주면 된다.

<?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/">

   <!-- Daily file out -->
   <appender name="console.file" class="org.apache.log4j.DailyRollingFileAppender">
      <param name="file" value="/home/weblog.log"/> <!-- 로그 파일 저장위치 -->
      <param name="Append" value="true"/>
      <param name="DatePattern" value="'.'yyyy-MM-dd"/> <!-- 로그 날짜 포맷 -->
      <layout class="org.apache.log4j.PatternLayout">
      <param name="ConversionPattern" value="[%d{yyyy-MM-dd HH:mm:ss}] %m%n"/>  <!-- 로그 출력 포맷 -->
      </layout>
   </appender>

   <!-- Appenders -->
    <appender name="console.print" class="org.apache.log4j.ConsoleAppender">
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="[%d{yyyy-MM-dd HH:mm:ss}] %m%n" />
        </layout>
    </appender>

   <!-- Application Loggers -->
   <logger name="test.co.kr" additivity="false">
      <level value="DEBUG" />
      <appender-ref ref="console.file" />
      <appender-ref ref="console.print"/>
   </logger>

   <!--  Query Loggers -->
    <logger name="jdbc.sqlonly">
      <level value="WARN" />
      <appender-ref ref="console.print" />
    </logger>

    <!-- Result Table Loggers -->
    <logger name="jdbc.resultsettable" >
      <level value="WARN" />
      <appender-ref ref="console.print" />
    </logger>

   <!-- Root Logger -->
   <root>
      <priority value="off"/>
      <appender-ref ref="console.file" />
      <appender-ref ref="console.print" />
   </root>

</log4j:configuration>