들어가기 전
로깅 Logging
- 시스템을 작동할 때 시스템의 작동상태의 기록 · 보존, 이용자의 습성조사 및 시스템 동작의 분석 등을 하기 위해 작동 중의 각종 정보를 기록하는 것
- 실행한 프로그램의 이름, 콘솔로부터의 키인, 이상 사태 발생, 정지 상태, 컴퓨터의 사용 시간, 입출력 장치의 사용 개시와 사용 종료 시간 등을 기록하는 것으로 이렇게 해서 기록된 것을 로그(log)
- 보통 보조 기억 장치 등에 격납되어 있다.
로그 Log
1. 작동로그
- 시스템의 운전상태를 기록 · 보존하기 위한 센터 오퍼레이터에게 통지되는 조작문, 지령문, 보고문 및 하드웨어 장해정보(장해로그) 등의 기록, 작동로그를 조사함으로써 하드웨어 장해상황, 콘솔 조작상황 등을 파악할 수 있다.
2. 통계로그
- 이용자의 습성조사, 시스템의 효율화를 목적으로 한 동작의 분석 및 시스템설계의 기초 자료를 얻기 위한 CPU/메모리 사용 효율, 회선 트래픽, 단말입출력 데이터량, 회선접속/절단시각 등의 기록
log4j
- JAVA를 위한 신뢰할만한 빠르고 유연한 로깅 프레임워크
- 프로그램을 작성하는 도중에 로그를 남기기 위해 사용되는 자바 기반 로깅 유틸리티
- 디버그용 도구로 주로 사용됨
- 최근 버전에 의하면 높은 등급에서 낮은 등급으로의 6개 로그레벨을 가지고 있음
- 설정 파일에 대상별(자바에서는 패키지)로 레벨 지정이 가능하고, 그 등급 이상의 로그만 저장하는 방식
WHY Logging?
- 로그메시지를 소스코드안에 삽입하는 것은 디버깅을 위한 가장 단순무식한 로깅방법
- 별도의 디버깅툴이 제공되지 않는다면 이 방법이 최선의 방법일 수도 있다
WHY Log4j?
- 프로그램 실행시, 실행코드의 수정없이 설정파일을 통해서 로깅작업을 컨트롤 할 수 있다.
- 로거의 상속 개념 사용 -> Logger 계층구조를 이용하면 어떤 로그문을 출력할지 상세하게 컨트롤하기가 무척 쉬워진다.
- 로그도 남길 수 있고, 남들이 쓴 로그도 볼 수 있고 일석이조
구성요소
Loggers
Appender
- 다양한 목적지로 로깅정보를 출력
- ConsoleAppender, FileAppender, JDBCAppender, JMSAppender, SMTPAppender(SMTP: 메일발송 프로토콜), SocketAppender, SyslogAppender
layouts
- 로깅 정보를 위한 다양한 출력포맷 구성
- DateLayout, HTMLLayout, PatternLayout, SimpleLayout, XMLLayout
로그 레벨
- DEBUG < INFO < WARN < ERROR < FATAL
- 작은 단위까지 보고싶으면 셋팅을 DEBUG로 해두면됨
DEBUG
- 애플리케이션 디버그시 유용한 모드
- Detailed information on the flow through the system. Expect these to be written to logs only. Generally speaking, most lines logged by your application should be written as DEBUG.
INFO
- 정보성 메시지 출력 모드. 일반적으로 많이 사용함.
- Interesting runtime events (startup/shutdown). Expect these to be immediately visible on a console, so be conservative and keep to a minimum.
WARN
- 잠재적인 위험(경고)메시지 출력을 위한 모드
- Use of deprecated APIs, poor use of API, 'almost' errors, other runtime situations that are undesirable or unexpected, but not necessarily "wrong". Expect these to be immediately visible on a status console.
ERROR
- 애플리케이션 실행중 발생하는 에러메시지 출력 모드
- Other runtime errors or unexpected conditions. Expect these to be immediately visible on a status console.
FATAL
- 심각한 에러메시지 출력 모드 (애플리케이션 실행을 멈추게 할 수 있음)
- Severe errors that cause premature termination. Expect these to be immediately visible on a status console.
기타
- OFF: The highest possible rank and is intended to turn off logging.
- TRACE: Most detailed information. Expect these to be written to logs only.
log4j 사용 방법
- log4j jar파일 add
- properties, xml 중 1개만 사용 가능
1. log4j.properties 사용
1-1.properties 파일 확인
log4j.rootLogger=ERROR, stdout
- ERROR: 로그레벨, 이 미만은 출력하지 않겠다
- stdout: 기본 appender로 표준출력과 rolling 을 사용
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
- The target may be a console, a file, or another item depending on the appender.
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p %C{1}.%M:%L - %m%n
log4j.logger.log4jexam.sql.Parameter=DEBUG
log4j.logger.log4jexam.sql.Query=DEBUG
log4j.logger.T02_MemberInfoTest=DEBUG
- 패키지나 로거 이름별로 로깅을 걸고 싶을 때
- 로거등급을 상위로 설정해두어도 별도로 로깅을 걸어두면 상위보다 하위 로거등급이여도 출력가능함
1-2: T02_MemberInfoTest.java
1단계: Log4j를 이용한 로그를 남기기 위한 로거 생성
public class T02_MemberInfoTest {
private static final Logger sqlLogger
= Logger.getLogger("log4jexam.sql.Query");
private static final Logger paramLogger
= Logger.getLogger("log4jexam.sql.Parameter");
private static final Logger resultLogger
= Logger.getLogger(T02_MemberInfoTest.class);
}
2단계: insertMember()에 테스트
sqlLogger.debug("쿼리 : " + sql);
paramLogger.debug("파라미터 : ( " + memId + ", " + memName + ", " + memTel + ", " + memAddr +" )");
resultLogger.debug("결과 값 : " + result);
2. log4j.xml 사용
- P10_iBatisTest -> res -> log4j.xml
- 따로 설정해줄 필요 없이 xml파일의 설정대로 알아서 작동
출처