Daily Notebook

[스프링] Log4j 로그 찍기

by 배부른코딩로그
💡 Log4j를 통해 서비스 로그를 기록해보자.

목표

  • Log4j 관련 설정을 할 수 있다.
  • 서비스 로그를 파일에 기록할 수 있다.

 

Log4j 설정하기

모든 서비스를 개발하는 과정에서 로그를 기록하는 것은 아주 중요하다.

스프링에서 자주 사용되는 log4j 라이브러리를 사용해보자!

단, 개발 환경은 Spring Legacy와 maven(pom.xml)이 기준이다.

 

① pom.xml

<dependencies>
   <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>4.0.0.RELEASE</version>
   </dependency>
   <dependency>
      <groupId>log4j</groupId>
      <artifactId>log4j</artifactId>
      <version>1.2.16</version>
   </dependency>
</dependencies>

② web.xml

<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>

③ log4j.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
 
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
     
    <!-- Console Log -->
    <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>
     
    <!-- Log Files Writer by Date-->
    <appender name="springFile" class="org.apache.log4j.DailyRollingFileAppender">
        <param name="File" value="/LOG/spring.log"/>
        <param name="Append" value="true"/>
        <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>
     
    <!-- Only Error Log Files Writer by Date-->
    <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="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>
     
    <!-- Specific Package -->
    <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>

①~③ 과정을 차근차근 진행 후, 원하는 레벨의 로그들을 기록하고, 파일로 남길 수 있다.

 

Log4j 경로 변경하기

추가적으로 log4j.xml의 경로 설정 방법도 알아둘 필요가 있다.

절대경로로 설정하면 로컬에서 테스트할 땐 편하지만, 테스트용과 배포용을 따로 만들거나 수정해야 하는 번거로움이  있다. 이를 해결하기 위해 아래와 같은 방법을 사용할 수 있다.

 

다음과 같은 방법으로 상대경로로 설정할 수 있습니다.

 

① web.xml

기본적으로 webapp.root로 사용합니다.

다만, Tomcat에 두 개 이상의 서비스를 구동할 경우 충돌이 일어날 수 있음에 주의해야 한다.

위의 간단한 해결 방법은 경우 다른 이름으로 선언하면 된다.

<context-param>
    <param-name>webAppRootKey</param-name>
    <param-value>app.root</param-value>
</context-param>

② log4j.xml

아래 코드와 같이 ${app.root} 를 통하여 web.xml에 선언한 contextParam을 불러올 수 있다.

해당 경우, 배포될 폴더 '/WEB-INF/logs' 이하에 로그 파일들이 위치하게 된다.

<appender name="FILE_APPENDER" class="org.apache.log4j.DailyRollingFileAppender">
    <param name="File" value="${app.root}/WEB-INF/logs/css_log.log"/>
    <param name="Append" value="true"/>
    <param name="maxFileSize" value="10MB"/>
    <param name="maxBackupIndex" value="10"/>
    <param name="DatePattern" value="'.'yyyy-MM-dd"/>
    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="%d %p [%c] - %m%n"/>
    </layout> 
</appender>

 

이상으로 로그 찍기 끗!!!

 

 

 

Last Updated. 2021. 10. 26.

 

반응형

블로그의 정보

배부른코딩로그

배부른코딩로그

활동하기