Java - 11. log4j

godkimchichi·2020년 10월 8일
0

고급자바

목록 보기
30/47

들어가기 전

로깅 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 사용

  • P07_JDBCTest_log4j

1-1.properties 파일 확인

log4j.rootLogger=ERROR, stdout

  • ERROR: 로그레벨, 이 미만은 출력하지 않겠다
  • stdout: 기본 appender로 표준출력과 rolling 을 사용

log4j.appender.stdout=org.apache.log4j.ConsoleAppender

  • Appender 종류: Console

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

  • 레이아웃 종류: 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 {

  // Logger 임포트시 logj4로 임포트
  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);
          // .class: 해당 클래스 정보를 가진 클래스 객체
}

2단계: insertMember()에 테스트

  • 메서드 안 try-catch
// debug레벨의 로그 작성
sqlLogger.debug("쿼리 : " + sql);
paramLogger.debug("파라미터 : ( " + memId + ", " + memName + ", " + memTel + ", " + memAddr +" )");
resultLogger.debug("결과 값 : " + result);

2. log4j.xml 사용

  • P10_iBatisTest -> res -> log4j.xml
  • 따로 설정해줄 필요 없이 xml파일의 설정대로 알아서 작동

출처

profile
갈 길이 멀다

0개의 댓글