Tom's Note
반응형

개요

이 포스팅은 자바에서 사용되는 "로그"에 대한 라이브러리 종류와 그 사용법을 기술한다. 

 

1. 로그란?

2. 로깅 라이브러리 종류

3. 로그 구조

4. 로그 설정


 

1. 로그란?

 

모든 행위와 이벤트 정보를

시간의 경과에 따라 기록한 데이터

 

시스템 상에서 "로그" 를 생성하는 과정을

"로깅(Logging)"

이라고 한다.

 


 

로깅(logging)의 장점

 

개발 프로그램의 디버깅

예기치 못한 문제의 원인 파악

시스템 및 사용자의 동작 패턴 분석

해킹(침입)의 비정상 동작의 기록을 감지

분석을 통한 통계화

 


즉, 모든 것을 기록하고 분석하여 예측하게 해주는 장치라고 할 수 있다.


 


 

2. 로깅 라이브러리 종류

 

로깅 라이브러리는 프로그램을 실행하는 도중에 로그를 남기기 위해 사용되는 유틸리티이다.

 


 

java.util.logging (jdk8)

JDK에 내장된 기본 로깅 라이브러리.

JDK 1.4부터 포함된 표준 로깅 API

 

 


 

Apache Commons logging

Apache 재단의 Commons 라이브러리 중에 로그 출력을 제공하는 라이브러리

 


 

log4j 

Aapache 재단에서 만든 log4j는 2001년에 처음 릴리즈된 자바의 로깅 라이브러리이다.

가장 널리 사용되는 로깅 라이브러리

 

 


 

Logback

Log4j를 개발한 Ceki Gulcu가 Log4j의 단점 개선 및 기능을 추가하여 개발한 로깅라이브러리

 

 


 

3. 로그 구조

제공되는 3rd-party 라이브러리마다 구조의 표기 방식은 다를수 있지만, 대게 같은 의미를 내포하고 있다.

이후 설명은 가장 많이 사용하는 log4j를 기준으로 설명을 이어간다.

 


로그 구조

log4j 계층구조로 되어있으며 코어층(Core Layer)과 서포트층(Support Layer)이 있다.

코어층이 서포트층을 유기적으로 응용하여 코어층에서 메시지를 핸들링한다.

 

로그 구조 설명
Core Layer
Logger
가장 상위계층으로 로깅 정보를 받는 계층
로그 레벨을 결정
Layout 출력되는 문자열 스타일을 포맷하는 계층
어떻게 기록할지를 결정
Appender 여러 장치로 내보내는 계층
출력 위치를 결정(파일, 콘솔, DB 등)
Support Layer
Level 로깅 수준을 결정
Filter 로깅 여부를 Appender에 제공하는 역할
ObjectRender 객체를 문자열로 바꾸어 Layout에 제공하는 역할
LogManager 설정 파일에서 로깅 프레임워크를 관리하는 역할

 


 

로그 레벨

로그 표기의 범위를 지정

로그레벨 설명
TRACE 모든 메시지를 표시하기 위한 정보
DEBUG 프로그램 디버깅하기 위한 정보
INFO 상태변경, 서비스 동작 상태를 위한 정보
WARN 향후 잠재적으로 문제를 야기할 수 있는 정보
ERROR 의도하지 않은 오류 발생 정보
FATAL 시스템적으로 심각한 문제가 발생해서 어플리케이션 작동이 불가능한 정보
"TRACE ⊃ DEBUG ⊃ INFO ⊃ WARN ⊃ ERROR ⊃ FATAL"의 범위 만큼 로깅이 된다.
Ex) INFO 레벨이면 "INFO ~ FATAL"까지 로깅한다.

 


 

Appender

log4j에서 제공하는 출력 클래스

패키지: org.apache.log4j

Appender 클래스 설명
AsyncAppender 비동기 출력 ( 전달자 )
- 로그 이벤트를 queue에 담아 다른 쓰레드(네트워크 등)에서 스케줄로 로그를 출력
- 다른 Appender와 결합하여 사용
ConsoleAppender stdout, stderr 출력 ( Console용 )
DailyRollingFileAppender 지정한 시간 단위로 파일 출력
RollingFileAppender 파일 크기 단위로 파일 출력
FileAppender 파일 출력
varia.ExternallyRolledFileAppender 외부 Rooler로 출력
jdbc.JDBCAppender JDBC를 통해 DB에 출력
net.JMSAppender JMS로 출력
lf5.LF5Apperder LogFactor5 Swing 로그뷰어로 출력
nt.NTEventLogAppender Windows 이벤트 로그로 출력
varia.NullAppender 아무것도 출력 안함
net.SMTPAppender 메일로 출력
net.SocketAppender 외부 서버에 Socket으로 출력
net.SocketHubAppender SocketServer로 출력
net.SyslogAppender Unix Syslog로 출력
net.TelnetAppender 텔넷을 통해 출력

 


 

Layout

어떤 형식으로 출력할지 정하는 클래스

패키지: org.apache.log4j

Layout 클래스 설명
SimpleLayout 기본 레이아웃
TTCCLayout 시간 출력에 특화된 레이아웃
HTMLLayout HTML 형식으로 출력(테이블 형식으로 각각의 로그를 출력)
XMLLayout XML 형식으로 출력
PaternLayout 사용자 마음대로 패턴을 지정하여 출력

 


 

Layout 옵션

PatternLayout 클래스를 사용할 시 사용

Layout 클래스 설명
%t 로깅 이벤트를 생성한 쓰레드 이름
%d 로깅 이벤트가 일어난 일자
%p 로깅 이벤트의 우선순위
%c 로깅 이벤트의 category
%F 로깅 요청을 일으킨 파일 이름
%L 로깅 요청을 일으킨 파일의 행 번호
%x NDC(Nestted Diagnostic Context) 출력
%C 로깅 요청을 일으킨 호출자의 완전한 클래스 이름
%M 로깅 요청을 일으킨 메소드
%m 메세지
%n 플랫폼의 독립적인 개행문자
%l 소스코드 위치 정보 출력

 


 

4. 로그 설정

설정 파일은 "log4j.properties"이다.

LogManager는 CLASSPATH 또는 프로젝트 root 디렉토리에 지정해야 "log4j.properties"를 읽을 수있다.

Level, Appender, Layout등을 설정한다.

 

# log4j.properties 파일
# 대부분 로그파일은 어떤 프로그램에서 사용하는 환경변수에 맞춰 경로를 지정한다.
# 그래서 미리 경로를 지정해주어 사용한다. 
log = ${user.home}/log

###################### Logger ############################### 
# rootLogger(최상위 로거)를 통해 로그레벨로 "DEBUG"를 지정.
# 최상위 로그 이름 "FILE1", "FILE2"로 지정.(다수 가능)
log4j.rootLoger = DEBUG, FILE1, FILE2

# 하위 로거 지정
log4j.logger.name.of.the.package.one=INFO console

# 로그 이름 따라 로그레벨을 따로 지정 가능
log4j.appender.console.Threshold = INFO

###################### Appender ##############################
# Appender 지정
## Appender 클래스 지정
log4j.appender.FILE=org.apache.log4j.DailyRollingFileAppender
## 출력 파일지정(대부분 절대경로 지정)
log4j.appender.FILE.File=output.log
## 날짜 패턴 추가
log4j.appender.FILE.DatePattern='.'yyyyMMDD
## WAS 재시작시 로그파일 새로 생성 여부(true: 기존파일에 추가, false: 파일 새로 생성)
log4j.appender.FILE.Append=true
## 최대크기
log4j.appender.FILE.MaxFileSize=1KB
## 파일크기 초과시 백업
log4j.appender.FILE.MaxBackupIndex=1

## Console용 클래스 지정
log4j.appender.console=org.apache.log4j.ConsoleAppender


###################### Layout ##############################
# Layout 지정
## FILE1 Layout 클래스 지정
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
## Layout 패턴 지정
log4j.appdender.FILE.ConversionPattern=[%d{HH:MM:ss}] [%-5p] (%F: %L) -%m%n

## console Layout 클래스 지정
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
## Layout 패턴 지정
log4j.appdender.FILE.ConversionPattern=%-5p%l -%m%n

 

반응형
profile

Tom's Note

@크크크크

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!