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

Post on 25-Jan-2017

586 views 4 download

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

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

기획 : 마케팅 팀 이 정 민

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

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

Log4j – 세미나목표

2

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

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

방법을 제시한다.

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

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

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

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

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 성능 이슈

4

Log

5

What is logging?

LOG : The State of the System at Runtime

Log

6

Logging Must Be …

Logging must be Systematic

Logging must be Controlled

Logging information must represent an application’s state

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

Log

8

How Logging Works

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

10

Log4j 구성요소와 동작원리

11

Main Components of Log4j

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

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

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

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

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

The Flow of Logger

13

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

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

15

Logger 의 상속

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

16

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

17

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

18

Log 레벨 지정

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

19

Log 레벨 지정

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

20

Exception

Log4j 구성요소와 동작원리

21

22

Appenders - Hierarchy

23

<<interface>>Appender

AppenderSkelton

Customizing

WriterAppender

출력

ConsoleAppender

화면출력

FileAppender

파일 출력

DailyRollingFileAppender

날짜 간격 파일 출력

RollingFileAppender

크기 간격 파일 출력

JMSAppender

JMS

AsyncAppender

non block

SMTPAppender

Mail

JDBCAppender

DB

Appender Hierarchy

Appenders - WriterAppender

24

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

Appenders - ConsoleAppender

25

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

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

Appenders - FileAppender

26

FileAppender- File에 로그를 남기는 Appender

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

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를 얼마까지 늘릴지 지정

Appenders - DailyRollingFileAppender

28

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

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

Appenders - AsyncAppender

29

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

Appenders - SMTPAppender

30

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

Appenders - Customizing

31

AppenderSkelton - CustomSmsAppender

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

Appenders - Customizing

32

Appender Customizing Test

33

Layouts - Hierarchy

34

Layout Hierarchy

Layout

XMLLayout

TTCCLayout

DateLayout PatternLayoutHTMLLayout SimpleLayout

Layouts - TTCCLayout

35

TTCCLayout-Time [Thread] Catecory – Context information

Layouts - XMLLayout

36

XMLLayout

Layouts - HTMLLayout

37

HTMLLayout

Layouts - HTMLLayout

38

MailAppender + HTMLLayout

ConversionPattern : Pattern 설정

39

Layouts – Pattern Layout

Pattern Layout

ConversionPattern : Pattern 설정

40

Layouts – Pattern Layout

Pattern Layout

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

Layouts – Layout Customizing

42

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

Layout Customizing

Layouts – Layout Customizing

43

Layout Customizing

44

Configuration - Configurator

45

BasicConfigurator

PropertyConfigurator

DOMConfigurator

Configurator

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

Configuration - BasicConfigurator

46

BasicConfigurator

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

Configuration - PropertyConfigurator

47

PropertyConfigurator

- log4j.properties 을 이용하여 설정

Configuration - PropertyConfigurator

48

log4j.properties

Configuration - PropertyConfigurator

49

log4j.properties

Configuration - PropertyConfigurator

50

log4j.properties

Configuration – log4j.properties

51

Configuration - DOMConfigurator

52

DOMConfigurator

- log4j.xml 을 이용하여 설정

Configuration - DOMConfigurator

53

log4j.xml

Configuration – log4j.xml

54

Configuration – log4j.xml

55

Configuration – log4j.xml

56

Configuration – log4j.xml (AsyncAppender)

57

Configuration – Appender Customizing

58

CustomSMSAppender

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

Configuration – Appender Customizing

59

CustomSMSAppender – log4j.properties

Configuration – Appender Customizing

60

CustomSMSAppender – log4j.xml

61

Initialization

62

1. Default Initialization

2. Initialization in Java Application

3. Initialization in Tomcat

Initialization – Default Initialization

63

WEB-INF

libclasses web.xml

log4j.properties log4j.xml

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

Default Initialization

Initialization – Initialization in Java Application

64

BasicConfigurator.configure()

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

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

Embed Code

Initialization in Java Application

Initialization – Initialization in Tomcat

65

Initialization in Tomcat

conf/catalina.property

log4j.configuration=$DIR/log4j.priperties

66

MDC (Mapped Diagnostic Context)

67

MDC (Mapped Diagnostic Context)

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

MDC (Mapped Diagnostic Context)

68

MDC (Mapped Diagnostic Context)

MDC (Mapped Diagnostic Context)

69

Servlet 1

Servlet 2

NDC (Nested Diagnostic Context)

70

NDC (Nested Diagnostic Context)

NDC (Nested Diagnostic Context)

71

NDC (Nested Diagnostic Context)

72

Log4j 구성요소와 동작원리

The Flow of Logger

73

Log4j 부가기능 - Filter

74

Filter

DenyAllFilter

모든 로거를거부

LevelRangeFilter

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

LevelMatchFilter

레벨에 맞는로그를 필터링

StringMatchFilter

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

Filter Hierarchy

Log4j 부가기능 - Filter

75

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

Log4j 부가기능 - Filter

76

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

Log4j 부가기능 - Filter

77

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

Filter

Log4j 부가기능 - Object Rendering

78

Object Rendering

Log4j 부가기능 - Object Rendering

79

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

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

Log4j 부가기능 - Object Rendering

80

In log4j.properties

In log4j.xml

Object Rendering

Log4j 부가기능 - Object Rendering

81

Object Rendering

Log4j 성능 이슈

82

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

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

Log4j 성능 이슈

Log4j 성능 이슈

83

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

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

Log4j 성능 이슈

감사합니다