일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 맥
- jsp
- 컬렉션프레임워크
- 대덕인재개발원
- Error
- 단축키
- ddit
- ibatis
- JDBC
- 자바
- html
- python
- Homebrew
- pyqt
- API
- spring
- 자바문제
- crud
- Android
- FastAPI
- Mac
- 생활코딩
- servlet
- 객체지향
- Oracle
- 배열
- 반복문
- 이클립스
- nodejs
- Java
- Today
- Total
romworld
Log4j 본문
- Log4j란
java application에서 로깅을 할 수 있도록 도와주는 Open Source Project
Log4j 구성요소
- Logger (Category): Log4j의 핵심 클래스로 로그파일을 작성하고 관리하는 역할.
- Appender : Logger로 부터 전달된 Logging 메세지를 어디에 출력 또는 저장할 것인지 결 정하는 역할
- Layout : Logging 메시지를 어떤 형식으로 출 력할 것인지 출력 Layout을 결정한다.
Log4j 로그의 레벨
- 로그 레벨 (Priority)
- – FATAL : 가장 심각한 상황의 에러가 났을 경우 사용한다.
- – ERROR : 일반적인 에러가 났을 때 사용한다.
- – WARN : 에러는 아니나 주의가 필요한 경우 사용한다.
- – INFO : 일반 정보를 나타낼 때 사용한다.
- – DEBUG:개발시프로그램디버깅용메시지를출력해야하는 경우 사용한다.
- – TRACE : DEBUG 보다 낮은 레벨의 메시지 출력시 사용
- 우선순위는 FATAL이 가장 높고 TRACE가 가장 낮다.
- 로그레벨로 선택된 것 이상의 로그레벨 메시지가 모두 출력된 다.
- – Ex : INFO로 설정한 경우 -> FATAL, ERROR, WARN, INFO로 설정 된 메시지가 모두 출력된다.
Log4j 로그 출력 설정
• 출력설정
- – 출력패턴, 로그 레벨등의 사항을 정의한다.
- – 설정파일을 이용, 프로그램 내에 직접 명시하는 두 가지 방법이 있다.
- – 파일명을 log4j.properties 로 하여 classpath내에 저장한다.
- – Web application의 경우 WEB-INF/classes 밑에 저장 한다.
- – 작성형식은 자바 프로퍼티 형식으로 name=value 형 식으로 작성한다.
Log4j 설정파일의 예
log4j.rootLogger=INFO, stdout, rolling
log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%d %-5p [%t] %-17c{2} (%13F:%L) %3x - %m%n
log4j.appender.rolling=org.apache.log4j.DailyRollingFileAppender log4j.appender.rolling.File=logfile.log log4j.appender.rolling.Append=true log4j.appender.rolling.DatePattern='.'yyyy-MM-dd log4j.appender.rolling.layout=org.apache.log4j.PatternLayout log4j.appender.rolling.layout.ConversionPattern=%d %-5p [%t] %-17c{2} (%13F:%L) %3x - %m%n
Log4j 설정파일
• log4j.rootLogger=DEBUG,stdout, rolling
- – 로그의 레벨과 아래에서 설정할 Appender들의 이름을 지정한다.
- – 레벨은 DEBUG이고 Appender는 stdout, rolling 두개를 지정했다.
- 이 두 값을 이용해 각각의 Appender에 대한 설정을 하게된다.
- – stdout의 Appender종류를 세팅 한다.
- – ConsoleAppender :표준 출력 Appender로 System.out 이나 System.err을 이용해 출력한다.
- – DailyRollingFileAppender : FileAppender의 하위로 날짜별로 로그 파일을 만들어 그 파일에 출력한다.
- – 그외 Appender : RollingFileAppender, WriterAppender, AsyncAppender, FileAppender
- • log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
- – 출력 Layout을 설정한다.
- – PatternLayout : C의 printf에서 사용하는 전환 패턴(conversion pattern)을 사용하여 출력 Layout을 정의 한다. (다음 페이지 참고)
- – 그외 Layout : HTMLLayout, SimpleLayout, XMLLayout등
- • log4j.appender.stdout=org.apache.log4j.ConsoleAppender
Log4j 설정파일
• log4j.appender.stdout.layout.ConversionPattern=%d %-5p [%t] %-17c{2} (%13F:%L) - %m%n
- – PatternLayout일 경우 출력 될 패턴을 정의 한다.
- – 시간 로그레벨 [발생쓰레드] 클래스명 (파일명:라인) – 내용
- • log4j.appender.rolling=org.apache.log4j.DailyRollingFileAppender
- – log4j.appender.rolling.File=logfile.log : 로그를 남길 파일명(절대, 상대경로 다 됨)
- – log4j.appender.rolling.Append=true : 서버의 종료 여부와 상관없이 파일이 리셋되지 않는다.
- – log4j.appender.rolling.DatePattern='.'yyyy-MM-dd : 파일명 포맷 (당일이 지나면 백업파일 을 만드는데 그때의 파일명 뒤에 날짜가 붙는다. )

로깅 프로그램 작성
- org.apache.log4j.Logger.getLogger(String name 또는 Class clazz) 메소드를 통해 Logger객체를 가져 온다.
- Ex) Logger logger = Logger.getLogger(Abc.class); -> Abc.class는 로거의 이름이 된다.
- Logger객체의 로깅 메소드를 통해 로그메세지를 출력 한다.
(예시)
import org.apache.log4j.Logger;
public class Abc{
private static Logger logger =
Logger.getLogger(Abc.class); public static void main(String[] args) {
logger.debug("[DEBUG]모드 로그^^");
logger.info ("[INFO] 모드 로그^^");
logger.warn ("[WARN] 모드 로그^^", new Exception("aaa"));
logger.error("[ERROR] 모드 로그^^");
logger.fatal("[FATAL] 모드 로그^^"); }
}
log4j.properties
# Root logger option
# 1. 로그 출력 Level은 INFO부터 할것임.
# 2. rootLogger 에 사용할 로깅 Appender로 stdout이라는것과
# logfile이라는 것 두가지를 사용하겠다
#log4j.rootLogger=debug, stdout, logfile
log4j.rootLogger=trace, stdout,
# 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 (%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
# Sql log
# 이곳이 java.sql.* 을 사용하는 쿼리를 보여주는 설정.
log4j.logger.java.sql.Connection=DEBUG, logfile
log4j.logger.java.sql.Statement=DEBUG, logfile
log4j.logger.java.sql.PreparedStatement=DEBUG, logfile
log4j.logger.java.sql.ResultSet=DEBUG, logfile
LogMessageTest
package kr.or.ddit.basic;
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
public class LogMessageTest {
// Logger 클래스의 인스턴스를 받아온다.(로그기록을 남기는 Class파일)
static Logger logger = Logger.getLogger(LogMessageTest.class);
public static void main(String[] args) {
// 메시지 출력하기 (사용하는 메서드명이 Logger의 레벨명과 같다.)
// 형식1) Logger 객체변수.출력할레벨명(출력할 메시지)
logger.trace("이것은 log4j의 [TRACE]레벨의 출력입니다.");
logger.debug("이것은 log4j의 [DEBUG]레벨의 출력입니다.");
logger.info("이것은 log4j의 [INFO]레벨의 출력입니다.");
logger.warn("이것은 log4j의 [WARN]레벨의 출력입니다.");
logger.error("이것은 log4j의 [ERROR]레벨의 출력입니다.");
logger.fatal("이것은 log4j의 [FATAL]레벨의 출력입니다.");
// 형식2) Logger 객체변수.log( Level.레벨명 "출력할메시지")
logger.log(Level.INFO, "log()메서드를 이용한 INFO레벨 출력입니다.");
}
}