기록하는 코더

[JAVA] Log4j 본문

JAVA/library

[JAVA] Log4j

damda_di 2023. 1. 15. 00:44
Log4j
- Java application에서 로깅을 할 수 있도록 도와주는 Open source Project
- 로그 기록을 남기는 라이브러리
- log4J가 다른 로그 기록 라이브러리의 기본
- log기록을 파일에 남기려고 할 때

log4j-1.2.17.jar
0.47MB

 

log4j를 사용하기 위해선

💡 설정파일은 둘 중 하나가 있어야한다! (properties파일 또는 log4j.xml)


Logger

  • 로깅 정보를 캡쳐
  • 로깅 메시지를 Appender에 전달
  • Log4j의 핵심 클래스로 로그파일을 작성하고 관리하는 역할

Appender

  • 로그 기록을 어디에 남길 건지(출력 위치 - 파일,콘솔,DB) 결정
  • Logger로 부터 전달된 Logging 메세지를 어디에 출력 또는 저장할 것인지 결 정하는 역할
  • ConsoleAppender, FileAppender, JDBCAppender, JMSAppender, SMTPAppender(이메일로 보내고 싶을때), SocketAppender, SyslogAppender
  • DailyRollingFileAppender : 날짜 기준 NTEventAppender => NT(윈도우) 시스템 이벤트에 로그 전송

layouts

  • 어떤 형식으로 출력할 것이지 출력 layout을 결정

로그 레벨 (Priority)

  • FATAL : 가장 심각한 상황의 에러가 났을 경우 사용한다.
  • ERROR : 일반적인 에러가 났을 때 사용한다.
  • WARN : 에러는 아니나 주의가 필요한 경우 사용한다.
  • INFO : 일반 정보를 나타낼 때 사용한다.
  • DEBUG : 개발 시 프로그램 디버깅용 메시지를 출력해야 하는 경우 사용한다.
  • TRACE : DEBUG 보다 낮은 레벨의 메시지 출력시 사용
  • 우선순위 ( FATAL > ERROR> WARN > INFO > DEBUG > TRACE )
    FATAL이 가장 높고 TRACE가 가장 낮다!

 


로그 메시지 출력하기

형식1)

Logger객체변수.로그레벨이름("출력할 메시지");

형식2)

Logger객체변수.log(Level.로그레벨, "출력할 메시지");

 

레벨설정에 따라우선순위가 설정한 레벨 그 이상인 것 모두 출력됨

 


log4j.properties

 

# Root logger option

# 1. 로그 출력 Level은 INFO부터 할것임.
# 2. rootLogger 에 사용할 로깅 Appender로 stdout이라는것과 
#    logfile이라는 것 두가지를 사용하겠다
#log4j.rootLogger=debug, stdout, logfile
log4j.rootLogger=info, stdout, logfile

# Direct log messages to stdout
# ConversionPattern은 로그가 어떠한 형식으로 출력될것인지 
# 그 포맷을 정의하는 것.
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p %-F(%C{2}:%L) - %m%n

# Direct log message to log file
# logfile이라는 appender는 로그를 파일로 출력해주는 놈인데, 
# 파일path를 정의 할 수 있다.
log4j.appender.logfile=org.apache.log4j.DailyRollingFileAppender
log4j.appender.logfile.DatePattern='.'yyyy-MM-dd
log4j.appender.logfile.File=D:/application.log
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=[%d{yyyy-MM-dd HH:mm:ss}] %5p (%C{2} - %M:%L) - %m%n
log4j.appender.logfile.Append=true
log4j.appender.logfile.DatePattern='.'yyyy-MM-dd
log4j.appender.logfile.File=D:/application.log

파일이름.날짜 형식 백업파일

 

log4j.appender.logfile.Append=true

로그기록을 뒤에 계속 추가해서 남김

 


 

Test Code

import org.apache.log4j.Logger;

public class LoggingTest {
	// Logger객체 생성
	static Logger logger = Logger.getLogger(LoggingTest.class);
	
	public static void main(String[] args) {
		
		// 로그 메시지 출력하기
		// 형식1) Logger객체변수.로그레벨이름("출력할 메시지");
		// 형식2) Logger객체변수.log(Level.로그레벨, "출력할 메시지")
		
		
		// kr.or.ddit.basic. LoggingTest
		logger.trace("이것은 trace레벨의 로그 메시지입니다.");
		logger.debug("이것은 debug레벨의 로그 메시지입니다.");
		logger.info("이것은 info레벨의 로그 메시지입니다.");
		logger.warn("이것은 warn레벨의 로그 메시지입니다.");
		logger.error("이것은 error레벨의 로그 메시지입니다.");
		logger.fatal("이것은 fatal레벨의 로그 메시지입니다.");
		
	}
}

'JAVA > library' 카테고리의 다른 글

[JAVA] ibatis  (0) 2023.01.15