고래씌

[Spring] 11-1. 로그 처리 본문

Server/Spring

[Spring] 11-1. 로그 처리

고래씌 2024. 1. 30. 12:48

1. 로그처리

log4j.xml 에서 수정을 하면된다!!

 

log4j : 프로그램 작동시 로그를 넘기기위한 자바기반 오픈소스 라이브러리
로그의 레벨을 지정하여 지정한 레벨 이상의 로그정보만 기록하는 방식으로 작동.
일반 출력문보다 속도나 성능면에서 최적화되어 있음

 

Appenders :  추가시키는 객체. console창 또는 특정파일에 추가를 함.

   - ConsoleAppender : 콘솔창에 로그정보를 출력하는 클래스

   - FileAppender : 파일에 로그정보를 출력하는 클래스

<param name="threshold" value="INFO" />   // 현재 콘솔객체에 대한 기본 출력 레벨 설정

 

   - layout : 보여지는 출력문구

<param name="ConversionPattern" value="%-5p:[%d{HH:mm:ss.SSS}] %C{1}.%M(%F:%L) - %m%n" /> 

<!--
        %c %C : 클래스명을 표시함.
                %C{1}의 경우
                클래스명이 com.kh.spring.LogTest일때 LogTest의미
                %C{2}의 경우
                클래스명이 com.kh.spring.LogTest일때 spring.LogTest의미
        %d : 로그시간을 출력 -> java.text.SimpleDateFormat과 동일한 출력패턴을 사용함.
        %M : 로그를 수행한 메소드명
        %m : 로그로 전달된 메세지.
        %n : 개행문자
        %F : 파일명을출력.
        %L : 라인번호를 출력
        %p : 로그이벤트명 (INFO, WARN, DEBUG ...)

        - 그외 -
        %l : 로깅이 발생한 위치정보 - 링크를 제공
        %t : 로그이벤트가 발생한 쓰레드명
        %% : %를 출력하기위해 사용
        %r : 어플리케이션이 시작된 이후 로깅이 발생한 시점까지의 시간(miliseconds)
-->

 

 

DailyRollingFileAppender : 일정기간 단위로 로그파일을 생성하고 기록하도록 도와주는 클래스

	<!-- 
		DailyRollingFileAppender : 일정기간 단위로 로그파일을 생성하고 기록하도록 도와주는 클래스
	-->
	<appender name="dailyLog" class="org.apache.log4j.DailyRollingFileAppender">
		<param name="threshold" value="INFO" />
		<param name="append" value="true"  />   <!-- 이어쓰기 여부 지정 ture(이어쓰기) / false(새로쓰기) -->
		<param name="file" value="/logs/kh.log" /> <!-- 파일을 생성할 위치 지정 -->
		<param name="datePattern" value=".yyyMMdd" /> 
		<!-- 
			dataPattern속성 미지정시 "매일"자정에 로그파일 교체
			dataPattern속성 지정시 : yyyyMM => 매달 로그파일을 교체
								  yyyyWW => 매주
								  yyyyMMdd a => 자정과, 정오에 로그파일을 바꿔주는 명령어
		-->
		<layout class="org.apache.log4j.PatternLayout">
			<param name="ConversionPattern" value="%-5p:[%d{HH:mm:ss.SSS}] %C{1}.%M(%F:%L) - %m%n" />
		</layout>
	</appender>

 

 

 

=> log4j.xml 파일 맨아래에 dailyLog 추가

 

 

	<!-- jdbc-remix 로그출력 appender추가 
		내가 실행한 쿼리문, 출력결과, 전달된 매개변수 등 모든 데이터를 콘솔창에 출력해주는 객체
	-->
	<appender name="sqlLogger" class="org.apache.log4j.ConsoleAppender">
		<layout class="org.apache.log4j.PatternLayout">
			<param name="ConversionPattern" value="%-5p: %m%n" />
		</layout>
	</appender>
	
	<logger name="jdbc.sqlonly" additivity="false">
		<level value="INFO" />
		<appender-ref ref="sqlLogger" />
	</logger>
	<logger name="jdbc.resultsettable" additivity="false">
		<level value="INFO" />
		<appender-ref ref="sqlLogger" />
	</logger>

 

 

 

▶ pom.xml  에 추가

        <!-- sql문 콘솔출력용(쿼리문, 결과값을 로깅할 수 있음) -->
        <dependency>
            <groupId>org.lazyluke</groupId>
            <artifactId>log4jdbc-remix</artifactId>
            <version>0.2.7</version>
        </dependency>

 

 

▶ root-context.xml

 

=> 결과

 

 

 


2. 로깅 레벨

▶ Logging Level

   - fatal : 아주 심각한 에러 → 지금은 존재하지 않음
   - error : 요청 처리중 발생하는 오류
   - warn : 경고성 메시지. 실행에는 문제없지만, 향후 요류가 발생할 경우가 있을 경우 사용
   - info : 요청처리중 발생하는 정보성메시지 출력시 사용
   - debug : 개발중에 필요한 로그가 있을 경우 사용
   - trace : 개발용 debug범위를 한정해서 출력

- Slf4j : 스프링에서 제공하는 logging 추상체

 

 

 

 

▶ LogTest.java

package com.kh.spring;

import lombok.extern.slf4j.Slf4j;

@Slf4j
public class LogTest {
	
	
	/*
	 * Logging Level
	 * 
	 * - fatal : 아주 심각한 에러 → 지금은 존재하지 않음
	 * - error : 요청 처리중 발생하는 오류
	 * - warn : 경고성 메시지. 실행에는 문제없지만, 향후 요류가 발생할 경우가 있을 경우 사용
	 * - info : 요청처리중 발생하는 정보성메시지 출력시 사용
	 * - debug : 개발중에 필요한 로그가 있을 경우 사용
	 * - trace : 개발용 debug범위를 한정해서 출력
	 * 
	 * Slf4j : 스프링에서 제공하는 logging 추상체
	 */

	public static void main(String[] args) {
		log.error("error - {} ", "에러메세지임");
		log.warn("warn - {}", "경고메세지");
		log.info("info - {}", "인포메세지");
		log.debug("debug - {}", "디버그");
		log.trace("debug - {}", "트레이스");
	}

}

 

 

Ctrl - F11 단축키 누르면 Console이 이렇게 바뀐다