Log4j
Log4j란?
Log4J는 JAVA를 위한 신뢰할만한 빠르고 유연한 로깅 프레임워크를 말한다.
Log4j의 장점
- Log4j를 이용하면, 프로그램 실행 시, 실행 코드의 수정 없이 설정파일을 통해서 로깅 작업을 컨트롤 할 수 있다.
- Log4j의 특별한 기능 중 하나는 로거의 상속 개념의 사용이다.
- Logger 계층구조를 이용하면 어떤 로그문을 출력할지 상세하게 컨트롤하기가 무척 쉬워진다.
Log4j의 주요 구성 요소
1. Logger : 로깅 정보를 캡처한다.
- 로깅 메시지를 Appender에 전달
- log4j의 심장부에 위치
- 개발자가 직접 로그 출력 여부를 런타임에 조정
- logger는 로그 레벨을 가지고 있으며, 로그의 출력 여부는 로그문의 레벨과 로거의 레벨을 가지고 결정
2. Appender : 다양한 목적지로 로깅 정보를 출력한다.
- 로그의 출력 위치를 결정(파일, 콘솔, DB등)
- log4j API문서의 XXXXAppender로 끝나는 클래스들의 이름을 보면, 출력 위치를 어느 정도 짐작 가능
- ConsoleAppender, FileAppender, JDBCAppender, JMS Appender, SMTPAppender, SocketAppender, SyslogAppender
| ConsoleAppender | org.apache.log4j.ConsoleAppender - 콘솔에 로그 메시지 출력 |
| FileAppender | org.apache.log4j.FileAppender - 파일에 로그 메시지 기록 |
| RollingFileAppender | org.apache.log4j.RollingFileAppender - 파일 크기가 일정 수준 이상이 되면 기존 파일을 백업 파일로 바꾸고 처음부터 기록 |
| DailyRollingFileAppender | org.apache.log4j.DailyRollingFileAppender - 일정 기간 단위로 로그 파일을 생성하고 기록 |
| JDBCAppender | org.apache.log4j.jdbc.JDBCAppender - DB에 로그를 출력. - 하위에 Driver, URL, User, Pas sword, Sql과 같은 parameter를 정의할 수 있음 |
| SMTPAppender | - 로그 메시지를 이메일로 전송 |
| NTEventAppender | - 윈도우 시스템 이벤트 로그로 메시지 전송 |
3. layouts : 로깅 정보를 위한 다양한 출력 포맷 구성한다.
- Appender가 어디에 출력할 것인지 결정했다면 어떤 형식으로 출력할 것이지 출력 layout을 결정
Pattern Conversion Characters
| 변환문자 | 설명 |
| c | 카테고리 출력 ex) 카테고리가 a.b.c 처럼 되어있다면 %c{2}는 b.c 출력 |
| C | 클래스명 출력 ex) 클래스 구조가 org.apache.xyz.SomeClass 처럼 되어있다면 %C{2}는 xyz.SomeClass 출력 |
| d | 로깅 이벤트가 발생한 시간을 출력 ex) 포맷은 %d{HH:mm:ss} 같은 형태의 SimpleDateFormat |
| F | 로깅이 발생한 프로그램 파일명 출력 |
| l | 로깅이 발생한 caller의 정보 출력 |
| L | 로깅이 발생한 caller의 라인수 출력 |
| m | 로그내용 출력 |
| M | 로깅이 발생한 method 이름 출력 |
| n | 플랫폼 종속적인 개행문자 출력 |
| p | debug, info, warn, error, fatal 등의 priority 출력 |
| r | 어플리케이션 시작 이후부터 로깅이 발생한 시점의 시간(milliseconds) 출력 |
| t | 로그이벤트가 발생된 쓰레드의 이름 출력 |
| x | 로깅이 발생한 thread와 관련된 NDC(nested diagnostic context) 출력 |
| X | 로깅이 발생한 thread와 관련된 MDC(mapped diagnostic context) 출 력 |
| % | % 표시 출력 |
Format Modifiers
| Format modifier | 왼쪽 정렬 | 최소 너비 | 최대 너비 |
| %20c | false | 20 | none |
| %-20c | true | 20 | none |
| %.30c | NA | none | 30 |
| %20.30c | false | 20 | 30 |
| %-20.30c | true | 20 | 30 |
DatePattern
| 실행주기 | 날짜패턴 | 생성되는 로그파일이름 |
| Minutely | '.'yyyy-MM-dd-HH-mm | sample.log.2017-11-09-21-54 |
| Hourly | '.'yyyy-MM-dd-HH | sample.log.2017-11-09-22 |
| Half-daily | '.'yyyy-MM-dd-a | sample.log.2017-11-09-AM sample.log.2017-11-09-PM |
| Daily | '.'yyyy-MM-dd | sample.log.2017-11-09 |
| Weekly | '.'yyyy-ww | sample.log.2017-45 sample.log.2017-46 |
| Monthly | '.'yyyy-MM | sample.log.2017-10 sample.log.2017-11 |
Log4j 로그레벨
| 로그레벨 | 설명 |
| TRACE | log4j1.2.12에서 신규 추가된 레벨로서, DEBUG 레벨이 너무 광범위한 것을 해결하기 위해서 좀 더 상세한 상태를 나타냄 |
| DEBUG | 개발 시 디버그 용도로 사용한 메시지 |
| INFO | 로그인, 상태 변경과 같은 정보성 메시지 출력 모드로 일반적 으로 많이 사용함. |
| WARN | 잠재적인 위험(경고) 메시지 출력을 위한 모드 |
| ERROR | 애플리케이션 실행 중 발생하는 에러메시지 출력 모드 |
| FATAL | 아주 심각한 에러가 발생한 상태. 시스템적으로 심각한 문제 가 발생해서 어플리케이션 작동이 불가능할 경우가 해당하는 데, 일반적으로는 어플리케이션에서는 사용할 일이 없음. |
● 우선순위 :
TRACE < DEBUG < INFO < WARN < ERROR < FATAL DEBUG 레벨로 했다면 INFO~FATAL까지 모두 logging이 된다.