Log - (1) Log4j

단비·2023년 5월 4일
0

학습

목록 보기
34/66

로깅(Logging)이란?



Log4j란?

  • JAVA를 사용하여 Log를 남기는 도구
  • 자바 기반의 로깅 유틸리티로 Apache에서 만든 오픈소스 라이브러리
  • log4j의 설정은 log4j.properties / log4j.xml 로 설정

Log
컴퓨터가 언제, 무슨 일을, 어떻게 했는지 남겨 놓은 기록




Log4j 구성 요소

요소설명
Logger출력할 메시지를 Appender에 전달
Appender전달된 로그를 어디에 출력할지 결정(콘솔 출력, 파일 기록, DB 저장 등)
Layout로그를 어떤 형식으로 출력할지 결정



Appender

  • 로그를 출력할 위치, 출력 형식 등을 지정
  • Appender태그는 Logger태그들보다 위에 있어야 함
요소설명
ConsoleAppenderorg.apache.log4j.ConsoleAppender
콘솔에 로그 메시지를 출력
FilerAppenderorg.apache.log4j.FilerAppender
로그 메시지를 지정된 파일에 기록
RollingFileAppenderorg.apache.log4j.RollingFileAppender
파일 크기가 일정 수준 이상이 되면 기존 파일을 백업파일로 두고 처음부터 다시 기록
(DatePattern 사용 불가)
DailyRollingFilerAppenderorg.apache.log4j.Daily.Rolling.File.Appender
일정 기간 단위로 로그 파일을 생성하고 기록
(Max 사용 불가)





Log4j 사용하기


(1) properties를 이용한 설정 방법

1. build.gradle에 dependency 추가

// https://mvnrepository.com/artifact/log4j/log4j
implementation group: 'log4j', name: 'log4j', version: '1.2.17'

2. properties 설정 (log4j.properties)

# 1: Logger
# 로거 레벨, 객체명, 객체명을 입력
log4j.rootLogger=DEBUG, consoleAppender, fileAppender, sql
 
# 2: rootLogger에서 정의한 객체에 타입과 기능을 정의 (Appender)
# consoleAppender = 콘솔에 출력해주는 객체라고 정의
log4j.appender.consoleAppender=org.apache.log4j.ConsoleAppender
log4j.appender.consoleAppender.Threshold=All

# 3: Layout
log4j.appender.consoleAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.consoleAppender.layout.ConversionPattern=[%d] [%-5p] %c %x - %m%n
 
# 4
# log4j.appender.fileAppender는 파일로 저장을 의미
# org.apache.log4j.RollingFileAppender는 하루에 한 번씩 파일을 생성한다는 의미
log4j.appender.fileAppender=org.apache.log4j.DailyRollingFileAppender
# 파일의 위치와 파일의 네이밍을 설정
log4j.appender.fileAppender.File=C:/Users/dbkim/Desktop/TASK/log/log.log

# 5
log4j.appender.fileAppender.DatePattern='.'yyyy-MM-dd
log4j.appender.fileAppender.Threshold=All
log4j.appender.fileAppender.layout=org.apache.log4j.PatternLayout
# 하루가 지난 파일은 log4j.log에서 log4j.2022-09-06의 형태로 바꾸겠다는 의미
log4j.appender.fileAppender.layout.ConversionPattern=[%d] [%-5p] [%13F\:%L] - %m%n

(2) xml을 이용한 설정 방법

1. build.gradle dependency 추가

// https://mvnrepository.com/artifact/log4j/log4j
implementation group: 'log4j', name: 'log4j', version: '1.2.17'

2. xml 파일 설정 (log4j.xml)

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration
        xmlns:log4j="http://jakarta.apache.org/log4j/">

    <!-- 콘솔 로그 -->
    <appender name="console" class="org.apache.log4j.ConsoleAppender">
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d %p [%c{5}] %m [%X{userId}]%n" />
        </layout>
    </appender>

    <!-- 날짜별 로그 파일 생성(AUTH) -->
    <appender name="authLog" class="org.apache.log4j.DailyRollingFileAppender">
        <param name="File" value="/Users/dbkim/Desktop/TASK/LOG/auth.log"/>
        <param name="Append" value="true"/>
        <!-- param name="MaxFileSize" value="100MB"/ -->
        <!-- param name="MaxBackupIndex" value="2"></param -->
        <param name="DatePattern" value="'.'yyyy-MM-dd"/>
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d %p [%C{10}] %m [%X{userId}]%n" />
        </layout>
    </appender>
    <!-- 날짜별 로그 파일 생성(INFO) -->
    <appender name="infoLog" class="org.apache.log4j.DailyRollingFileAppender">
        <param name="File" value="/Users/dbkim/Desktop/TASK/LOG/info.log"/>
        <param name="Append" value="true"/>
        <param name="DatePattern" value="'.'yyyy-MM-dd"/>
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d %p [%C{10}] %m [%X{userId}]%n" />
        </layout>
    </appender>


    <!-- 날짜별 로그 파일 생성(에러만) -->
    <appender name="errFile" class="org.apache.log4j.DailyRollingFileAppender">
<!--        해당 파일이 출력하는 로그 레벨을 설정할 수 있음 -->
        <param name="Threshold" value="ERROR"/>
        <param name="File" value="/LOG/INFO/error.log"/>
        <param name="Append" value="true"/>
        <!-- param name="MaxFileSize" value="100MB"/ -->
        <!-- param name="MaxBackupIndex" value="2"></param -->
        <param name="DatePattern" value="'.'yyyy-MM-dd"/>
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d %5p [%C{1}] %m [%X{userId}]%n" />
        </layout>
    </appender>

    <!-- 특정 패키지 출력 설정 -->
    <logger name="com.fnsvalue.task10_logsave.controller.info">
        <level value="DEBUG"/>
        <appender-ref ref="infoLog" />
    </logger>
    <logger name="com.fnsvalue.task10_logsave.controller.auth">
        <appender-ref ref="authLog" />
    </logger>

    <!-- 기본 출력 설정 -->
    <root>
        <level value="INFO" />
        <appender-ref ref="console" />
    </root>

</log4j:configuration>

코드 해석

1. 파일 생성 설정을 따로따로 설정하여 사용할 수 있음

<!-- infoLog라는 이름으로 설정해놓은 후 나중에 사용할 때 infoLog로 가져와 사용 -->
<appender name="infoLog" class="org.apache.log4j.DailyRollingFileAppender">

2. append 옵션 설정

  • true(기본값): 파일 끝에 추가하는 것
  • false: 각각의 프로그램이 시작할때 파일에 덮어씌움
<param name="Append" value="true"/>

3. 발생 레벨 별로 파일을 따로 만들 수 있음

<param name="Threshold" value="ERROR"/>

4. 날짜 별로 로그 파일 생성 시 이름에 날짜 추가

  • 지정된 주기마다 로그파일 교체(roll)
    • '.'yyyy-MM: 매달의 첫날
    • '.'yyyy-ww: 매주의 첫날
    • '.'yyyy-MM-dd: 매일 자정
    • '.'yyyy-MM-dd-a: 매일 자정과 정오
    • '.'yyyy-MM-dd-HH: 시간마다(시간이 시작할때)
    • '.'yyyy-MM-dd-HH-mm: 분마다(분이 시작할때)
<param name="DatePattern" value="'.'yyyy-MM-dd"/>

5. PatternLayout 설정

  • 각각의 로그메세지의 형식을 나타내는 방법(포함하는 정보)
<layout class="org.apache.log4j.PatternLayout">
     <param name="ConversionPattern" value="%d %p [%C{10}] %m [%X{userId}]%n" />
</layout>

6. 최대 파일 크기, 갯수 설정

(DailyRollingAppender 에선 사용 불가)

  • MaxFileSize: 지정한 크기에 도달하면 로그파일을 교체
  • MaxBackupIndex: value값만큼의 갯수를 넘은 파일은 삭제(0: 백업파일을 만들지 않음)
<param name="MaxFileSize" value="100MB"/>
<param name="MaxBackupIndex" value="2"/>



🙌 현재 로거 레벨 확인하는 방법

logger.getEffectiveLevel() // ERROR




패키지 별로 레벨 설정하는 방법

1-1. resources/log4j.properties에 내용 추가

// log4j.logger.패키지경로 = 로그레벨
log4j.logger.com.logsave.controller.info=DEBUG

1-2. xml에 내용 추가

<logger name="com.logsave.controller.info">
     <level value="DEBUG"/>
     <appender-ref ref="infoLog"/>
</logger>

2. 클래스 파일 내 설정

private Logger logger = Logger.getLogger(Test.class);
...
logger.setLevel(Level.DEBUG)



날짜별 파일 저장 및 파일 개수에 제한을 두고싶다면 Logback 사용





참고사이트
[JAVA] Log4j의 정의와 설정-무사뎀벨레의 블로그
[log4j] 로그레벨 package 별로 설정하기-side impact
날짜별/특정 패키지별 logger 파일 생성 log4j.xml 추가 appender-개꼬 [: 개발하는 꼬바리]
[log4j] log4j 튜토리얼 번역-DEV용식

profile
tistory로 이전! https://sweet-rain-kim.tistory.com/

0개의 댓글