설정방법

1. log4j.xml파일을 생성(수정)

Spring 으로 세팅하면 기본적으로 log4j를 포함하고 있기 때문에 별도 생성할 필요는 없지만 혹시 없다면 log4j.xml 파일을 생성해야 한다.

Path : src/main/resources/log4j.xml

 

1.log4j.xml 구성

Appender, logger, root 로 구성되어있는 걸로 보인다.

 

Appender는 로그를 찍을 대상이나 어떤 방식으로 찍을 지를 결정하는 설정으로 보인다.

기본 설정값은 console에 찍는 방식으로 되어있고 PatternLayout 클래스를 사용해서 Layout을 잡는다.

 

logger는 Application Loggers라고 주석이 달린 것처럼 package와 같이 영역을 지정하고 해당 영역에서 사용할 logger를 정의하는 태그로 보인다.

하위 파라미터로 level을 받아서 출력할 로그수준을 정한다.

appender-ref 태그를 사용하여 ref 값에 참조할 appender를 입력하여 출력방식을 정할 수 있다.

 

root는 default라고 생각하면 되는 것 같다. 설정하지 않은 logger에 대해서만 root logger를 출력하게 한다. 구성요소는 logger와 유사하다.

**같은 로그가 두번 찍힌다면 Additivity 속성에 대해 확인

 

 

2.설정 파일 기본값

<?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="kr.co.ohjooyeo">
		<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="warn" />
		<appender-ref ref="console" />
	</root>
			
</log4j:configuration>

 

사용방법

사용할 클래스에 private static final 로거 변수 선언 이렇게 선언을 하면 xml에서 해당 어플리케이션(패키지)의 로거를 생성

1. 선언

Logger의 name을 패키지로 잡았을 경우, 패키지내의 클래스명.class를 파리미터로 선언

private static final Logger logger = LoggerFactory.getLogger(선언한 클래스명.class);

 

Logger의 name을 변수명으로 잡았을 경우, logger의 이름(문자열)을 파리미터로 선언

private static final Logger logger = LoggerFactory.getLogger("test");
<!-- Application Loggers --> <logger name="test"> <level value="info" /> </logger>

Log4j의 구조

1. Logger

  • 로그의 주체 : 로그 파일을 작성하는 클래스
  • 로그레벨을 가짐 (로그문의 레벨과 로거 레벨를 비교하여 로그의 출력여부를 결정)
  • 출력할 메시지를 Appender에 전달

2.Appender

  • 전달된 로그를 어디에 출력할지 결정 ( 콘솔 / 파일 / DB 등)
    • Appender 종류
      • WriterAppender :
        Writer 객체에 로그를 남기는 Appender
      • ConsoleAppender :
        System.out, System.err에 로그를 남기는 Appender

        - 옵션
        Target : System.out / System.err
        Follow : true -> SystemOutStream 에 저장
        activeOption : appender를 활성화

      • FileAppender :
        파일에 로그를 남기는 Appender

        - 옵션
        File : 파일명 Append : 추가 모드 여부 (true/false)
        BufferedIO : 버퍼 사용 여부 (true/false)
        BufferSize : 버퍼 사이즈

        --??--
        Threshold : (AppenderSkelton으로부터 계승)
        ImmediateFlush : (WriteAppender로부터 계승)
        Encoding : (WriteAppender로부터 계승)

      • RollingFileAppender :
        크기에 따라 File명을 변환하며 로그를 남기는 Appender

        - 옵션
        MaxFileSize : 최대 파일 사이즈
        MaxBackupIndex : 로그를 최대 개수
        File, Append, BufferdIO, BufferSize, Threshold, ImmediateFlush, Encoding

      • DailyRollingFileAppender :
        날짜에 따라 File명을 변환하며 로그를 남기는 Appender

        - 옵션 DatePattern : 날짜 형식(yyyy-MM, yyyy-ww,yyyy-MM-dd, yyyy-MM-dd-a, yyyy-MM-dd-HH 등등)

      • RollingFileAppender : 크기에 따라 File명을 변환하며 로그를 남기는 Appender
      • AsyncAppender : Logging Event 발생시 Thread를 생성하여 로그를 남기는 Appender

        -옵션
        triggeringPolicy : 로그 트리거 옵션
        rollingPolicy : 로그 정책 옵션
        org.apache.log4j.rolling.TimeBasedRollingPolicy : 시간 베이스 org.apache.log4j.rolling.SizeBasedTriggeringPolicy : 사이즈 베이스org.apache.log4j.rolling.FilterBasedTriggeringPolicy : 필터 베이스org.apache.log4j.rolling.FixedWindowRollingPolicy : 인덱스 베이스 백업 파일
      • SMTPAppender :
        로그를 이메일로 전달하는 Appender

출처: <https://m.blog.naver.com/PostView.nhn?blogId=youngchanmm&logNo=221029597791&proxyReferer=https%3A%2F%2Fwww.google.co.kr%2F>

 

 

3. Layout

  • 어떤 형식으로 출력할지 결정
  • Layout 종류
    • DateLayout
    • HTMLLayout
    • PatternLayout (일반적으로 사용)
      • PatternLayout (org.apache.log4j.PatternLayout) 상세 설명
        • C : 클래스명을 출력
          설정을 추가하여 클래스 이름 또는 특정 패키지 이상만 출력하도록 설정 가능

          - 추가 설정 -
          m : 로그로 전달된 메시지를 출력한다.
          M : 로그를 수행한 메소드명을 출력한다.
          n : 줄 바꿈
          p : 로그 이벤트명 (DEBUG등)
          r : 로그 처리시간 (milliseconds)

        • d : 로그 시간을 출력한다. java.text.SimpleDateFormat에서 적절한 출력 포맷을 지정할 수 있다.
        • F : 파일 이름을 출력한다. 로그 시 수행한 메소드, 라인번호가 함께 출력된다.
        • l (location) : 로깅 이벤트가 발생한 클래스의 풀네임.메서드명(파일명:라인번호) 출력
        • L : 라인 번호만 출력
        • m : 로그로 전달된 메시지 출력
        • M : 로그를 수행한 메소드명 출력
        • n : 줄바꿈
        • p : 로그 이벤트명 (레벨명)
        • r : 로그 처리시간 (milliseconds)
        • T : 로깅 이벤트가 발생한 스레드명

          출처: <https://androphil.tistory.com/420>
      • SimpleLayout
      • XMLLayout

 

 

+ Recent posts

"여기"를 클릭하면 광고 제거.