Spring
[Spring] log4j 로그 남기기 및 설정
영보로그
2021. 1. 28. 15:57
반응형
log4j 란 무엇인가?
- Java 기반의 Loggin Utility로 Apache에서 만든 오픈소스 라이브러리
- 옵션을 통해 선택적으로 log를 남기거나 특정 파일에 log를 생성하는 등 다양한 장점
- SQL문이 어떤 값을 가져오고 담겨오는지 찍히고, system.out.printl()이 불필요함 → 개발시 편리함
log4j 설정하기
# pom.xml
<!-- 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>
<dependency>
<groupId>org.lazyluke</groupId>
<artifactId>log4jdbc-remix</artifactId>
<version>0.2.7</version>
</dependency>
- 없으면 추가하고, 이미 추가되어있으면 안해도된다.
# web.xml
<!-- log4J -->
<context-param>
<param-name>log4jRefreshInterval</param-name>
<param-value>60000</param-value>
</context-param>
<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>/WEB-INF/log4j.xml</param-value>
</context-param>
- log4jRefreshInTterval을 세팅하면 log4j.xml에서 level이나 로그출력 패턴 변경을 하면 자동 리프레쉬 된다.
# log4j.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="%-5p: %c - %m%n" />
</layout>
</appender>
<!-- Application Loggers -->
<logger name="com.sist.web">
<level value="info" />
</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="info" />
<appender-ref ref="console" />
</root>
</log4j:configuration>
# Controller.java
package com.sist.web;
import com.sist.dao.*;
import java.text.AttributedCharacterIterator;
import java.util.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
@Controller
@RequestMapping("board/")
public class BoardController {
protected static final Logger logger = LoggerFactory.getLogger(BoardController.class);
protected static final Logger filelogger = LoggerFactory.getLogger("fileLogger");
public static void main(String[] args) {
logger.info("BoardController");
filelogger.info("fileLogger logeer print");
}
@Autowired
private BoardDAO dao;
private AttributedCharacterIterator session;
- 기본 Controller에서 빨강 박스 부분만 본인 프로젝트 속성에 맞게 추가해서 넣어주면 된다.
log4j 실행하기
- 디버깅을 하면 저렇게 뜬다. 사이트에서 이기능 저기능 사용할 때마다 로그와 쿼리문이 뜬다.
- 디비에 값을 가져오는지, 안가져오는지를 바로 볼 수 있어서 한번 설정하면 편하고 효율적인 유지보수가 가능하다.
반응형