예제로 쉽게 배우는 Log4j 기초 활용법

84
문서타이틀 영역 | 2007. 02 . 23 기획 : 마케팅 팀 이 정 민 커뮤니티 개발 1팀한오석 | 2009. 03. 12 log4j 기초 사용법 예제로 쉽게 배우는

Transcript of 예제로 쉽게 배우는 Log4j 기초 활용법

Page 1: 예제로 쉽게 배우는 Log4j 기초 활용법

문서타이틀 영역 | 2007. 02 . 23

기획 : 마케팅 팀 이 정 민

커뮤니티개발 1팀한 오 석 | 2009. 03. 12

log4j 기초 사용법예제로 쉽게 배우는

Page 2: 예제로 쉽게 배우는 Log4j 기초 활용법

Log4j – 세미나목표

2

Log를 기록하는데 있어서, 동작 원리를 인지하고 친숙하게 사용할 수 있는 계기를 마련한다.

1. Log4j의 구성요소를 중심으로 젂체적인 동작 원리를 이해한다.2. 기본적인 구현 예제를 통해, Log4j script를 작성하는 방법에 대한 이해도를 높인다.3. Log4j의 설정 방법을 통해 업무에 쉽게 적용할 수 있는 지식을 젂한다.4. Log4j의 부가 기능을 젂하여 Log4j를 다양한 방법으로 활용할 수 있는 계기를 마련한다.5. 효율적인 Log4j의 활용법을 설명함으로써 Log작성에 따른 부작용을 최소화 할 수 있는

방법을 제시한다.

구성요소, 동작원리=> C&P는 그만!!

log4j.properties 의 요소에는 무엇이 있고 왜 그렇게 설정하는지 이해

log4j.xml => xml 설정 방식에 흥미를 느껴보자

여러 가지 부가기능=> 이런 것도 있으니 혹시 유용한 곳이 생각나면 적용해보자.

Page 3: 예제로 쉽게 배우는 Log4j 기초 활용법

Log4j - 목차

3

1. Log4j 소개

2. Log4j 구성요소와 동작원리

3. Logger 와 Level

4. Appenders

5. Layouts

6. Configuration- log4j.properties, log4j.xml

7. Initialization

8. MDC & NDC

9. Log4j의 부가기능- Filter, Object Rendering

10. Log4j 성능 이슈

Page 4: 예제로 쉽게 배우는 Log4j 기초 활용법

4

Page 5: 예제로 쉽게 배우는 Log4j 기초 활용법

Log

5

What is logging?

LOG : The State of the System at Runtime

Page 6: 예제로 쉽게 배우는 Log4j 기초 활용법

Log

6

Logging Must Be …

Logging must be Systematic

Logging must be Controlled

Logging information must represent an application’s state

Page 7: 예제로 쉽게 배우는 Log4j 기초 활용법

Log

7

Benefits of LoggingProblem DiagnosisQuick DebuggingEasy MaintenanceHistoryCost & Time Effective

Disadvantages of LoggingRuntime Overhead due to generation of logging & the device I/OExtra codeBadly Logging can cause confusionBadly Logging can seriously affect the performance

Benefits & Disadvantages

Page 8: 예제로 쉽게 배우는 Log4j 기초 활용법

Log

8

How Logging Works

Page 9: 예제로 쉽게 배우는 Log4j 기초 활용법

Log

9

Popular Java-Based Logging APIs

Apache log4j (org.apache.log4j) : since 1999, Java 1.2 이상 권장: Easy Control, Rich Configuration, Variaty of Destination

Java Logging API ( java.util.logging): since 2002, Java 1.4 이상 사용가능: 상대적으로 적은 Destination(Buffer, Console, File Socket): 상대적으로 적은 Format (XML, Simple Text, AWT)

Common Logging API : 자체 로그 생성 기능 없음: Logging API 의 통합을 목적으로 만들어진 API

Page 10: 예제로 쉽게 배우는 Log4j 기초 활용법

10

Page 11: 예제로 쉽게 배우는 Log4j 기초 활용법

Log4j 구성요소와 동작원리

11

Main Components of Log4j

Logger : log4j의 중심 클래스: 로그의 그룹화, 레벨 설정, 로깅 이벤트 발생

Appenders : 로그의 출력 위치(Destination)를 지정(Console, File, JMS, Mail. DB …. )

Layouts : 로그의 출력 포맷을 지정(Text, Html, Xml … )

Page 12: 예제로 쉽게 배우는 Log4j 기초 활용법

Log4j 구성요소와 동작원리 – Log Level

12

LEVEL

LEVEL DESCRIPTION

OFF 모든 로그를 출력을 하지 않음

FATAL 어플리케이션을 종료시킬 정도의 치명적인 에러

ERROR 어플리케이션 동작 중 실행 지속 가능한 에러

WARN 간단한 결점, 예상치 못한 행동으로 주의할 필요가 있는 경우 사용

INFO 정상적인 어플리케이션 동작 상태에서의 일반적인 정보

DEBUG 개발 단계에서 디버깅에 필요한 로그가 필요할 때 사용

TRACE DEBUG 단계에 비하여 좀 더 세세한 정보를 필요로 할 때 사용

ALL 모든 레벨의 로그 정보를 기록

Priority : ALL < TRACE < DEBUG < INFO < WARN < ERROR < FATAL < OFF

Page 13: 예제로 쉽게 배우는 Log4j 기초 활용법

Log4j 구성요소와 동작원리 – Sequence Diagram

The Flow of Logger

13

Page 14: 예제로 쉽게 배우는 Log4j 기초 활용법

Log4j 구성요소와 동작원리 - Logger

14

Logger rootLogger = Logger.getRootLogger();Logger infoLogger = Logger.getLogger(“cafe.info”);Logger logger = Logger.getLogger(CafeInfo.class);

root

cafe

infobbs

UserInfo CafeInfo

Name Hierarchy

Configurator 에서 만든 로거 객체를 사용

package

Class

Page 15: 예제로 쉽게 배우는 Log4j 기초 활용법

Log4j 구성요소와 동작원리 - Logger

15

Logger 의 상속

Page 16: 예제로 쉽게 배우는 Log4j 기초 활용법

Log4j 구성요소와 동작원리 - Logger

16

Page 17: 예제로 쉽게 배우는 Log4j 기초 활용법

Log4j 구성요소와 동작원리 - Logger

17

Page 18: 예제로 쉽게 배우는 Log4j 기초 활용법

Log4j 구성요소와 동작원리 - Log Level

18

Log 레벨 지정

Page 19: 예제로 쉽게 배우는 Log4j 기초 활용법

Log4j 구성요소와 동작원리 - Log Level

19

Log 레벨 지정

Page 20: 예제로 쉽게 배우는 Log4j 기초 활용법

Log4j 구성요소와 동작원리 – Logger

20

Exception

Page 21: 예제로 쉽게 배우는 Log4j 기초 활용법

Log4j 구성요소와 동작원리

21

Page 22: 예제로 쉽게 배우는 Log4j 기초 활용법

22

Page 23: 예제로 쉽게 배우는 Log4j 기초 활용법

Appenders - Hierarchy

23

<<interface>>Appender

AppenderSkelton

Customizing

WriterAppender

출력

ConsoleAppender

화면출력

FileAppender

파일 출력

DailyRollingFileAppender

날짜 간격 파일 출력

RollingFileAppender

크기 간격 파일 출력

JMSAppender

JMS

AsyncAppender

non block

SMTPAppender

Mail

JDBCAppender

DB

Appender Hierarchy

Page 24: 예제로 쉽게 배우는 Log4j 기초 활용법

Appenders - WriterAppender

24

WriterAppender- Writer 객체에 로그를 남기는 Appender

Page 25: 예제로 쉽게 배우는 Log4j 기초 활용법

Appenders - ConsoleAppender

25

Target : System.out 또는 System.err 둘 중 하나 선택Follow : true인경우 SystemOutStream 객체에 저장;activateOptions : appender를 활성화

ConsoleAppender- System.out , System.err(콘솔) 에 로그를 남기는 Appender

Page 26: 예제로 쉽게 배우는 Log4j 기초 활용법

Appenders - FileAppender

26

FileAppender- File에 로그를 남기는 Appender

File : 파일 선택Append : 이어 쓸 것인지 선택BufferdIO : BufferedOutputStream 을 사용할 것인지 선택BufferdSize : Buffer size 지정

Page 27: 예제로 쉽게 배우는 Log4j 기초 활용법

Appenders - RollingFileAppender

27

my.log

my.log my.log.1

my.log my.log.1 my.log.2

LOG

LOG

LOG

RollingFileAppender- 크기에 따라 File명을 변환하며 로그를 남기는 Appender

MaxFileSize : MB, KB, GB 단위로 설정MaximumFileSize : Byte단위로 설정 가능MaxBackupIndex : Index를 얼마까지 늘릴지 지정

Page 28: 예제로 쉽게 배우는 Log4j 기초 활용법

Appenders - DailyRollingFileAppender

28

DailyRollingFileAppender- 날짜에 따라 File 명을 변환하며 로그를 남기는 Appender

DatePattern : 로그에 붙는 시간 형식을 지정Year (yyyy)Month (MM)Hour (HH)Minute (mm)Second (ss)am. pm. (a)

Page 29: 예제로 쉽게 배우는 Log4j 기초 활용법

Appenders - AsyncAppender

29

AsyncAppender-Loggin Event 발생시 Thread를 생성하여 로그를 남기는 Appender단독으로 사용 될 수 없고 다른 Appender를 참조해야함 (log4j xml설정방식에서만 사용 가능)

Page 30: 예제로 쉽게 배우는 Log4j 기초 활용법

Appenders - SMTPAppender

30

SMTPAppender- 로그를 e-mail로 젂달하는 Appender

Page 31: 예제로 쉽게 배우는 Log4j 기초 활용법

Appenders - Customizing

31

AppenderSkelton - CustomSmsAppender

Setter Method 작성setCaller(String caller)setUrl(String url)

Page 32: 예제로 쉽게 배우는 Log4j 기초 활용법

Appenders - Customizing

32

Appender Customizing Test

Page 33: 예제로 쉽게 배우는 Log4j 기초 활용법

33

Page 34: 예제로 쉽게 배우는 Log4j 기초 활용법

Layouts - Hierarchy

34

Layout Hierarchy

Layout

XMLLayout

TTCCLayout

DateLayout PatternLayoutHTMLLayout SimpleLayout

Page 35: 예제로 쉽게 배우는 Log4j 기초 활용법

Layouts - TTCCLayout

35

TTCCLayout-Time [Thread] Catecory – Context information

Page 36: 예제로 쉽게 배우는 Log4j 기초 활용법

Layouts - XMLLayout

36

XMLLayout

Page 37: 예제로 쉽게 배우는 Log4j 기초 활용법

Layouts - HTMLLayout

37

HTMLLayout

Page 38: 예제로 쉽게 배우는 Log4j 기초 활용법

Layouts - HTMLLayout

38

MailAppender + HTMLLayout

Page 39: 예제로 쉽게 배우는 Log4j 기초 활용법

ConversionPattern : Pattern 설정

39

Layouts – Pattern Layout

Pattern Layout

Page 40: 예제로 쉽게 배우는 Log4j 기초 활용법

ConversionPattern : Pattern 설정

40

Layouts – Pattern Layout

Pattern Layout

Page 41: 예제로 쉽게 배우는 Log4j 기초 활용법

41

Layouts – Pattern Layout

Pattern Description

%p LEVEL (로거 레벨)

%m Message (메시지)

%d{} Date (날짜 , 시간) – 연: yyyy, 월: MM, 일: dd, 시: HH, 분: mm, 초: ss, am.pm: a

%n New line (개행문자)

%c Catecory (로거 명)

%C Class (로깅이벤트가 발생된 클래스명)

%M Method (로깅이벤트가 발생된 메소드명)

%t Thread (로깅이벤트가 발생된 쓰레드명)

%F File (로깅이벤트가 발생된 파일명)

%l Location (로깅이벤트가 발생한 location정보)

%L Line (로깅이벤트가 발생한 라인의 번호)

%r Run time (어플리케이션 시작 이후 로깅이벤트가 발생한 시점의 시간) – millisecond

%X MDC(Mapped Diagnostic Context)

%x NDC(Nested Diagnostic Context)

%% %출력

Patterns

Page 42: 예제로 쉽게 배우는 Log4j 기초 활용법

Layouts – Layout Customizing

42

LoggingEvent – Log 가 씌어질때 마다 생성되며, 해당 log에 대한 정보를 가짐

Layout Customizing

Page 43: 예제로 쉽게 배우는 Log4j 기초 활용법

Layouts – Layout Customizing

43

Layout Customizing

Page 44: 예제로 쉽게 배우는 Log4j 기초 활용법

44

Page 45: 예제로 쉽게 배우는 Log4j 기초 활용법

Configuration - Configurator

45

BasicConfigurator

PropertyConfigurator

DOMConfigurator

Configurator

- Logger 객체 생성, Layout, Appender를 설정

Page 46: 예제로 쉽게 배우는 Log4j 기초 활용법

Configuration - BasicConfigurator

46

BasicConfigurator

- rootLogger 생성, 기본 Appender, Layout 설정

Page 47: 예제로 쉽게 배우는 Log4j 기초 활용법

Configuration - PropertyConfigurator

47

PropertyConfigurator

- log4j.properties 을 이용하여 설정

Page 48: 예제로 쉽게 배우는 Log4j 기초 활용법

Configuration - PropertyConfigurator

48

log4j.properties

Page 49: 예제로 쉽게 배우는 Log4j 기초 활용법

Configuration - PropertyConfigurator

49

log4j.properties

Page 50: 예제로 쉽게 배우는 Log4j 기초 활용법

Configuration - PropertyConfigurator

50

log4j.properties

Page 51: 예제로 쉽게 배우는 Log4j 기초 활용법

Configuration – log4j.properties

51

Page 52: 예제로 쉽게 배우는 Log4j 기초 활용법

Configuration - DOMConfigurator

52

DOMConfigurator

- log4j.xml 을 이용하여 설정

Page 53: 예제로 쉽게 배우는 Log4j 기초 활용법

Configuration - DOMConfigurator

53

log4j.xml

Page 54: 예제로 쉽게 배우는 Log4j 기초 활용법

Configuration – log4j.xml

54

Page 55: 예제로 쉽게 배우는 Log4j 기초 활용법

Configuration – log4j.xml

55

Page 56: 예제로 쉽게 배우는 Log4j 기초 활용법

Configuration – log4j.xml

56

Page 57: 예제로 쉽게 배우는 Log4j 기초 활용법

Configuration – log4j.xml (AsyncAppender)

57

Page 58: 예제로 쉽게 배우는 Log4j 기초 활용법

Configuration – Appender Customizing

58

CustomSMSAppender

Setter Method 작성setCaller(String caller)setUrl(String url)

Page 59: 예제로 쉽게 배우는 Log4j 기초 활용법

Configuration – Appender Customizing

59

CustomSMSAppender – log4j.properties

Page 60: 예제로 쉽게 배우는 Log4j 기초 활용법

Configuration – Appender Customizing

60

CustomSMSAppender – log4j.xml

Page 61: 예제로 쉽게 배우는 Log4j 기초 활용법

61

Page 62: 예제로 쉽게 배우는 Log4j 기초 활용법

Initialization

62

1. Default Initialization

2. Initialization in Java Application

3. Initialization in Tomcat

Page 63: 예제로 쉽게 배우는 Log4j 기초 활용법

Initialization – Default Initialization

63

WEB-INF

libclasses web.xml

log4j.properties log4j.xml

WEB-INF/classes/log4j.propertiesWEB-INF/classes/log4j.xml

Default Initialization

Page 64: 예제로 쉽게 배우는 Log4j 기초 활용법

Initialization – Initialization in Java Application

64

BasicConfigurator.configure()

PropertyConfigurator.configure(“dir/log4j.properties”);

DOMConfigurator.configure(“dir/log4j.xml”);

Embed Code

Initialization in Java Application

Page 65: 예제로 쉽게 배우는 Log4j 기초 활용법

Initialization – Initialization in Tomcat

65

Initialization in Tomcat

conf/catalina.property

log4j.configuration=$DIR/log4j.priperties

Page 66: 예제로 쉽게 배우는 Log4j 기초 활용법

66

Page 67: 예제로 쉽게 배우는 Log4j 기초 활용법

MDC (Mapped Diagnostic Context)

67

MDC (Mapped Diagnostic Context)

- Log에 출력할 정보를 Map에 저장하여 사용

Page 68: 예제로 쉽게 배우는 Log4j 기초 활용법

MDC (Mapped Diagnostic Context)

68

MDC (Mapped Diagnostic Context)

Page 69: 예제로 쉽게 배우는 Log4j 기초 활용법

MDC (Mapped Diagnostic Context)

69

Servlet 1

Servlet 2

Page 70: 예제로 쉽게 배우는 Log4j 기초 활용법

NDC (Nested Diagnostic Context)

70

NDC (Nested Diagnostic Context)

Page 71: 예제로 쉽게 배우는 Log4j 기초 활용법

NDC (Nested Diagnostic Context)

71

NDC (Nested Diagnostic Context)

Page 72: 예제로 쉽게 배우는 Log4j 기초 활용법

72

Page 73: 예제로 쉽게 배우는 Log4j 기초 활용법

Log4j 구성요소와 동작원리

The Flow of Logger

73

Page 74: 예제로 쉽게 배우는 Log4j 기초 활용법

Log4j 부가기능 - Filter

74

Filter

DenyAllFilter

모든 로거를거부

LevelRangeFilter

레벨 지정간격 사이의 로그를 필터링

LevelMatchFilter

레벨에 맞는로그를 필터링

StringMatchFilter

스트링에 매치되는로그를 필터링

Filter Hierarchy

Page 75: 예제로 쉽게 배우는 Log4j 기초 활용법

Log4j 부가기능 - Filter

75

ERROR 는 찍지 않는다.2가 붙은 것은 모두 찍는다.나머지 로그는 모두 찍지않는다.

Page 76: 예제로 쉽게 배우는 Log4j 기초 활용법

Log4j 부가기능 - Filter

76

ERROR 는 찍지 않는다.2가 붙은 것은 모두 찍는다.나머지 로그는 모두 찍지않는다.

Page 77: 예제로 쉽게 배우는 Log4j 기초 활용법

Log4j 부가기능 - Filter

77

ACCEPT : 출력DENY : 출력하지 않음NEUTRAL : 다음 필터로 넘김

Filter

Page 78: 예제로 쉽게 배우는 Log4j 기초 활용법

Log4j 부가기능 - Object Rendering

78

Object Rendering

Page 79: 예제로 쉽게 배우는 Log4j 기초 활용법

Log4j 부가기능 - Object Rendering

79

Rendered Class : Object Rendering 이 필요한 클래스

Rendering Class : Rendered Class 를 Rendering 할 수 있는 클래스

Page 80: 예제로 쉽게 배우는 Log4j 기초 활용법

Log4j 부가기능 - Object Rendering

80

In log4j.properties

In log4j.xml

Object Rendering

Page 81: 예제로 쉽게 배우는 Log4j 기초 활용법

Log4j 부가기능 - Object Rendering

81

Object Rendering

Page 82: 예제로 쉽게 배우는 Log4j 기초 활용법

Log4j 성능 이슈

82

LoggingEvent를 발생시키는 시간을 절약하기 위해 아래의 메소드를 사용

logger.isInfoEnable()logger.isDebugEnable()logger.isTraceEnable()

Log4j 성능 이슈

Page 83: 예제로 쉽게 배우는 Log4j 기초 활용법

Log4j 성능 이슈

83

아래의 ConversionPattern 은 프로그램 실행 속도를 느리게 하는 옵션으로반드시 필요한 경우가 아니면 사용을 자제

%d : 날짜 및 시간 출력%l : Log Location%C : Logging event 가 발생한 클래스명%M : Logging event 가 발생한 메소드명%F : Logging event 가 발생한 파일명%L : Logging event 가 발생한 라인

Log4j 성능 이슈

Page 84: 예제로 쉽게 배우는 Log4j 기초 활용법

감사합니다