예제로 쉽게 배우는 Log4j 기초 활용법
-
Upload
- -
Category
Technology
-
view
586 -
download
4
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
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 성능 이슈
감사합니다