[스프링] 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.
반응형
    
    
    
  'Spring' 카테고리의 다른 글
| [Spring] Controller CRUD 보일러플레이트성 코드 줄이기 (0) | 2023.04.04 | 
|---|---|
| [Spring] private final Logger LOGGER = LoggerFactory.getLogger(this.getClass()); (1) | 2022.08.27 | 
| [Spring Boot] spring initializr (0) | 2021.06.24 | 
| [Spring] 스프링 JDK 버전 호환 (0) | 2021.06.24 | 
블로그의 정보
배부른코딩로그
배부른코딩로그