영보의 SystemOut.log

[Spring] log4j 로그 남기기 및 설정 본문

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 실행하기

 

 - 디버깅을 하면 저렇게 뜬다. 사이트에서 이기능 저기능 사용할 때마다 로그와 쿼리문이 뜬다.

 - 디비에 값을 가져오는지, 안가져오는지를 바로 볼 수 있어서 한번 설정하면 편하고 효율적인 유지보수가 가능하다.

반응형