본문 바로가기
INFRA/DevOps

[DevOps] Log4j 란?

by BTC_금쪽이 2023. 12. 29.

베하 안녕하세요!

금쪽상담소의 오은영석사와 금쪽이 입니다~

추운겨울 잘 보내시고 계신가요? 감기 조심하시길 바라며 

오늘의 주제인 Log4j에 대해 알아보도록 하겠습니다!

 


 

Log4j 란?

 

Log란 컴퓨터가 언제, 무슨 일을, 어떻게 했는지 남겨 놓은 기록으로 Log4j는 JAVA를 사용하여 Log를 남기는 도구입니다.

Log4j는 자바 기반의 로깅 유틸리티로 Apache에서 만든 오픈소스 라이브러리입니다.

프로그램은 유지와 관리를 위해서 기록을 남기기 때문에 Log4j는 거의 전 세계 대부분의 JAVA 기반 서버와 응용 프로그램에서 사용하고 있습니다.

Log4j는 옵션 설정을 통해서 선택적으로 로그를 남기거나 특정 파일에 로그를 생성하는 등 다양한 이점을 가지고 있습니다. 

 

 

 

log4j의 장점

  • 속도에 최적화 되어있습니다. 
  • Multi-Thread 환경에서도 안전합니다.
  • 로그의 출력 형식을 쉽게 변경할 수 있습니다.
  • 융통성이 풍부합니다.

 

 

Log4j 레벨

로그 레벨 설명
FATAL 아주 심각한 에러가 발생한 상태를 나타냄
ERROR 어떠한 요청을 처리하는 중 문제가 발생한 상태를 나타냄
WARN 프로그램의 실행에는 문제가 없지만, 향후 시스템 에러의 원인이 될수있는 경고성 메시지를 나타냄
INFO 어떠한 상태변경과 같은 정보성 메시지를 나타냄
DEBUG 개발시 디버그 용도로 사용하는 메시지를 나타냄
TRACE 디버그 레벨이 너무 광범위한것을 해결하기 위해 좀 더 상세한 이벤트를 나타냄

 

FATAL > ERROR > WARN > INFO > DEBUG > TRACE  순서대로 레벨의 차이가 있으며, 출력 레벨 설정에 따라 설정 레벨 이상의 로그가 출력됩니다.

예를 들어 출력 레벨을 INFO라고 설정했다면, INFO를 포함하고 INFO보다 높은 레벨인 WARN, ERROR, FATAL이 출력됩니다.

 

 

Log4j 설정 하기(Maven 기준)

1.  pom.xml에 log4j dependency추가

 

<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.17</version>
</dependency>

 

 

2.  log4j.properties 설정

 

properties파일을 이용한 방법입니다.

src/main/resource 디렉터리 안에 "log4j.properties" 파일을 추가합니다.

 

 

 

아래와 같이 내용을 입력합니다.

# 1
log4j.rootLogger=DEBUG, consoleAppender, fileAppender, sql
 
# 2
log4j.appender.consoleAppender=org.apache.log4j.ConsoleAppender
log4j.appender.consoleAppender.Threshold=All

# 3
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.DailyRollingFileAppender
log4j.appender.fileAppender.File=c:/log/log4j.log
# 5
log4j.appender.fileAppender.DatePattern='.'yyyy-MM-dd
log4j.appender.fileAppender.Threshold=All
log4j.appender.fileAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.fileAppender.layout.ConversionPattern=[%d] [%-5p] [%13F\:%L] - %m%n

# 1

Logger Level(Fatal > Error > Warning > Info > Debug > Trace), 객체명,   객체명을 입력

 

# 2

rootLogger에서 정의한 객체에 타입과 기능을 정의하는 라인입니다.

log4j.appender.consoleAppender 는 Console에 출력해주는 객체를 말하며,

org.apache.log4j.ConsoleAppender 는 콘솔에 출력해 주겠다는 라인입니다.

 

# 3

console에 출력을 할 때 ConversionPattern 형태로 출력을 해준다라는 의미입니다.

log4j.appender.consoleAppender.layout.ConversionPattern=[%t] %-5p %c %x - %m%n

 

# 4

log4j.appender.fileAppender 는 파일로 저장을 의미하며, org.apache.log4j.RollingFileAppender는 하루에 한 번씩 파일을 생성해서 로그를 저장해 주겠다는 의미입니다.

log4j.appender.fileAppender.File=c:/log/log4j.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의 형태로 바꾸겠다는 의미입니다.

 

 

3.  로그 출력

 

log4j를 이용하여 테스트 로그를 출력하는 과정입니다.

import org.apache.log4j.Logger;
 
public class Log4j_Test {
    
    // log4j의 설정은 log4j.properties / log4j.xml 설정으로 한다.
    // Argument로  출력이 될 객체의 Class(클래스명)를 선택함으로서 로그를 선별적으로 출력할 수 있다.
    private Logger logger = Logger.getLogger(Log4j_Test.class);
    
    // 출력이 될 객체의 클래스를 선택한 logger 객체를 생성하여 각 레벨의 로그를 출력한다.
    // log4j.properties / log4j.xml 으로 설정한대로 로그가 출력되어 나온다.
    // log4 레벨 : FATAL > ERROR > WARN > INFO > DEBUG > TRACE
    public void userLogger() {
        logger.trace("trace");
        logger.debug("debug");
        logger.info("info");
        logger.warn("warn");
        logger.error("error");
        logger.fatal("fatal");
    }
}

 

다음과 같이 userLogger를 통해 로그를 출력해볼 수 있습니다.

Log4j_Test log = new Log4j_Test();
log.userLogger();

 

 


 

이렇게 log4j에 대해 알아보는 시간이였습니다!

그럼 다음 시간에 만나요 베빠~

 

출처 : https://hajoung56.tistory.com/75

'INFRA > DevOps' 카테고리의 다른 글

[K8S] Rollout  (0) 2024.01.08
[DevOps] Log4j 보안취약점 및 해결 방법  (0) 2023.12.29
[K8S] ConfigMap  (1) 2023.12.08
[DevOps] Django  (0) 2023.12.07
AWS Chatbot을 이용한 ChatOps 모니터링  (0) 2023.12.04

댓글