Spring

[Spring] Log4j

로아다 2023. 7. 4. 16:24
728x90
반응형
Log4j

 - 로그를 효율적으로 남길 수 있는 기능들이 구현되어있는 라이브러리

 - 로그마다 등급을 설정하고 일정 등급 이상의 로그만 보이도록 설정할 수 있다.

 

Logger

 - 클래스에 장착하면 해당 클래스에서 발생하는 로그를 수집하는 객체

 - 발생하는 로그들을 등급별로 수집하여 Appender로 전송하는 역할을 한다.

 

Appender

 - 수집된 로그들을 출력하는 장소

 - 파일, 콘솔, DB, 웹 등으로 발생한 로그들을 출력할 수 있다.

 

Layout

 - 로그를 출력하는 모양을 설정할 수 있다.

 

Log4j loggin level (priority)

 - OFF : 모든 등급의 로그를 끔

 - FATAL : 아주 심각한 로그를 작성할 때 사용하는 등급 (FATAL만 출력됨)

 - ERROR : 에러 발생 로그를 작성할 때 등급의 로그를 작성할 때 사용하는 등급 (ERROR보다 심각한 로그만 출력됨)

 - WARN : 경고 로그를 작성할 때 사용하는 등급 (WARN보다 심각한 로그만 출력됨)

 - INFO : 일반적인 정보 로그를 작성할 때 사용하는 등급 (INFO보다 심각한 로그만 출력됨)

 - DEBUG : 디버깅 용도로 로그를 작성할 때 사용하는 등급 (DEBUG보다 심각한 로그만 출력됨)

 - TRACE : 에러를 추적하기 위한 정밀한 로그를 작성할 때 사용하는 등급 (모든 로그가 출력됨)

 - ALL : 모든 로그를 출력함

 

pom.xml에서 log4j 설정 버전

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[%d{HH:mm:ss}]%n" />
		</layout>
	</appender>
	
	<appender name="myfile" class="org.apache.log4j.FileAppender">
		<param name="file" value="/log/mylog.txt"/>
		<layout class="org.apache.log4j.PatternLayout">
			<param name="ConversionPattern" value="%-5p: %c - %m[%d{HH:mm:ss}]%n" />
		</layout>
	</appender>
	
	<appender name="myfile2" class="org.apache.log4j.FileAppender">
		<param name="file" value="/log/mylog2.html"/>
		<layout class="org.apache.log4j.HTMLLayout" />
	</appender>
	
	<!-- Application Loggers -->
	<logger name="com.ezen.springmvc">
		<level value="error" />
	</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="warn" />
		<appender-ref ref="console" />
		<appender-ref ref="myfile" />
		<appender-ref ref="myfile2" />
	</root>
	
</log4j:configuration>

 

예시
package com.ezen.springmvc;

import java.util.Date;
import java.util.Locale;

import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import com.ezen.springmvc.model.Student;

@Controller
public class HomeController {
        
        // 이 클래스에서 발생하는 로그들을 모두 log4j에 전달하는 객체
        private static Logger log = LogManager.getLogger(HomeController.class);
        
        @Autowired
        Student student;
        
        @RequestMapping(value = "/", method = RequestMethod.GET)
        public String home(Locale locale, Model model) {
                
                log.info(student);
                log.info("hello Controller!");
                
                int sum = 0;
                for (int i = 0; i < 10; ++i) {
                        log.debug(String.format("현재 sum은 %d, i는 %d이므로 %d + %d가 되어서 다음에 출력될 값은 %d\n", sum, i, sum, i, sum + i));
                        log.info(sum += i);
                }
                log.fatal("FATAL만 보임");
                model.addAttribute("serverTime", new Date());

        return "home";
        }
}

 

728x90
반응형