log4j has three main components :
1) loggers : Responsible for capturing logging information
2) appenders : Responsible for publishing logging information to various preferred destinations
3) layout : Responsible for formatting logging information in different styles .
Features
1. It is thread-safe .
2. It is optimized for speed
3. It is based on a named logger hierarchy
4. It supports multiple output appenders per logger
5. It supports internationalization
6. It is not restricted to a predefined set of facilities .
7. logging behavior can be set at runtime using a configuration file
8. It is designed to handle Java Exceptions from the start
9. It uses multiple levels, namely ALL , TRACE DEBUG , INFO , WARN , ERROR , and FATAL
10. The format of the log output can be easily changed by extending the Layout class.
11. The target of the log output as well as the writing strategy can be altered by implementations of the Appender interface
12. It is fail-stop . However although it certainly strives to ensure delivery , log4j does not guarantee that each log statement will be delivered to its destination.
pros and cons of logging
A well-written logging code offers quick debugging , easy maintenence, and structured storage of an applications's runtime information
In can slow down an applications . If too verbose, it can cause scrolling blindness
To alleviate these concerns , log4j is designed to be reliable , fast , and extensible .
since logging is rarely the main focus of an application, the log4j API strives to be simple to understand and to use
Architecture
Log4j follows a layered architecture where each layer provides different objects to preform different tasks . This layered architecture makes the design flexible and easy to extend in future .
There are two types of objects available with Log4j framework :
1) core Objects , 2) Support Objects
1) core Objects : Logger Object , Layout Object , Appender Object
core Objects are mandatory objects of the framework. They are required to use the framework.
1. Logger Object :
The top-level layer is the Logger which which provides the Logger object . The Logger object is responsible for capturing logging information and they are stored in a namespace hierarchy
2. Layout Object :
The layout provides objects which are used to format logging information in different styles. It provides support to appender objects before publishing logging information
Layout objects play an important role in publishing logging information in a way that is human-readable and reusable.
3. Appender Object
This is a lower-level layer which provides Appender objects . The Appender object is responsible for publishing logging information to various preferred destinations such as a database , file, console, UNIX Syslog , etc.
The following virtual diagram shows the components of a log4j framework
2) Support Objects
: These are optional objects of the framework . They support core objects to perform additional but important tasks .
1.level Object
The level object defines the granularity and priority of any logging information. There are seven levels of logging defined within the API : OFF , DEBUG , INFO , ERROR, WARN , FATAL, and ALL
2. Filter Object
The Filter object is used to analyze logging information and make further decisions on whether that information should be logged or not
An Appender objects can have several Filter objects associated with them. If logging information is padded to a particular Appender object, all the Filter objects associated with that Appender need to approve the logging information before it can be publiushed to the attached destination
3. ObjectRenderer
The ObjectRenderer object is specialized in providing a String representation of different objects passed to the logging framework. This object is used by Layout objects to prepare the final logging information.
4. LogManager
The LogManager object manages the logging framework. It is responsible for reading the initial configuration parameters from a system-wide configuration file or a configuration class.
log4j 구성요소
logger (Category) Log4j 의 핵심 클래스로 로그파일을 작성하고 관리하는 역할
Appender : Logger로부터 전달된 Logging 메시지를 어디에 출력 또는 저장할 것인지 결정하는 역할
Layout : Logging 메시지를 어떤 형식으로 출력할 것인지 출력 Layout 을 결정한다.
-Log4j 로그의 레벨
-로그레벨 ( Priority)
FATAL : 가장 심각한 상황의 에러가 났을 경우 사용한다.
ERROR : 일반적인 에러가 났을 때 사용한다.
WARN : 에러는 아니나 주의가 필요한 경우 사용한다.
INFO : 일반 정보를 나타낼 때 사용한다.
DEBUG : 개발 시 프로그램 디버깅용 메시지를 출력해야 하는 경우 사용한다.
TRACE : DEBUG 보다 낮은 레벨의 메시지 출력시 사용한다.
*로그 레벨로 선택된 것 이상의 로그레벨 메시지가 모두 출력된다.
INFO 로 설정한 경우 : FATAL , ERROR , WARN, INFO 로 설정된 메시지가 모두 출력된다.
-로그 출력 설정
출력설정
- 출력 패턴, 로그 레벨 등의 사항을 정의한다.
- 설정 파일을 이용, 프로그램 내에 직접 명시하는 두가지 방법이 있다.
- 파일명을 log4j.properties 로 하여 classpath 내에 저장한다.
- Web application 의 경우 WEB-INF/classes 밑에 저장한다.
- 작성형식은 자바 프로퍼티 형식으로 name=value 형식으로 작성한다. (#붙이면 // 같은역할인듯..)
-Log4j 설정 파일
log4j.rootLogger = DEBUG , stdout , rolling
- 로그의 레벨과 아래에서 설정할 Appender 들의 이름을 지정한다.
- 레벨은 DEBUG 이고 Appender는 stdout, rolling 두개를 지정했다.
이 두 값을 이용해 각각의 Appender 에 대한 설정을 하게 된다.
log4j.appender.stdout= org.apache.log4j.ConsoleAppender
- stdout 의 Appender 종류를 셋팅한다.
- ConsoleAppender : 표준출력 Appender 로 System.out 이나 System.err 을 이용해 출력한다.
-DailyRollingFileAppender : FileAppender의 하위로 날짜별로 로그 파일을 만들어 그 파일에 출력한다.
- 그 외 Appender : RollingFileAppender , WriterAppender, AsyncAppender, FileAppender
log4j.appender.stdout.layout=org.apache.log4j.patternLayout
-출력 Layout 을 설정한다.
- PatternLayout : C의 printf에서 사용하는 전환패턴(conversion pattern) 을 사용하여 출력 Layout 을 정의한다.
- 그 외 Layout : HTMLLayout, SimpleLayout , XMLLayout 등
log4j 설정 파일
log4j.appender.stdout.layout.ConversionPattern=%d %-5p [%t] %-17c{2}
(%13F:%L) - %m%n
- patternLayout 일 경우 출력될 패턴을 정의한다.
- 시간 로그 레벨[발생 쓰레드] 클래스명 ( 파일명 : 라인 ) - 내용
log4j.appender.rolling=org.apache.log4j.DailyRollingFileAppender
-log4j.appender.rolling.File=logfile.log : 로그를 남길 파일명 ( 절대, 상대경로 다 됨 )
-log4.appender.rolling.Appender=true : 서버의 종료 여부와 상관없이 파일이 리셋되지 않는다.
-log4j.appender.rolling.DatePatterm='.'yyyy-MM-dd : 파일명 포멧 ( 당일이 지나면 백업파일을 만드는데 그 떄의 파일명 뒤에 날짜가 붙는다. )
import org.apache.log4j.Logger; public class Abc{ private static Logger logger = Logger.getLogger(Abc.class); public static void main(String[] args) { logger.debug("[DEBUG]모드 로그^^"); logger.info ("[INFO] 모드 로그^^"); logger.warn ("[WARN] 모드 로그^^", new Exception("aaa")); logger.error("[ERROR] 모드 로그^^"); logger.fatal("[FATAL] 모드 로그^^"); } }
수업시간에 한것 :
resource 폴더를 만들고
properties 만든다.
이름은 각자 지정
# Root logger option
# 1. 로그 출력 Level은 INFO부터 할것임.
# 2. rootLogger 에 사용할 로깅 Appender로 stdout이라는것과
# logfile이라는 것 두가지를 사용하겠다
#log4j.rootLogger=debug, stdout, logfile
#log4j.rootLogger=trace, stdout, logfile
#log4j.rootLogger=trace, stdout, logfile
# Direct log messages to stdout
# ConversionPattern은 로그가 어떠한 형식으로 출력될것인지
# 그 포맷을 정의하는 것.
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p (%C{2}:%L) - %m%n
# Direct log message to log file
# logfile이라는 appender는 로그를 파일로 출력해주는 놈인데,
# 파일path를 정의 할 수 있다.
log4j.appender.logfile=org.apache.log4j.DailyRollingFileAppender
log4j.appender.logfile.DatePattern='.'yyyy-MM-dd
log4j.appender.logfile.File=D:/application.log
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=[%d{yyyy-MM-dd HH:mm:ss}] %5p (%C{2} - %M:%L) - %m%n
log4j.appender.logfile.Append=true
# Sql log
# 이곳이 java.sql.* 을 사용하는 쿼리를 보여주는 설정.logfile 지우면 콘솔에다만 출력을 해준다.
log4j.logger.java.sql.Connection=DEBUG, logfile
log4j.logger.java.sql.Statement=DEBUG, logfile
log4j.logger.java.sql.PreparedStatement=DEBUG, logfile
log4j.logger.java.sql.ResultSet=DEBUG, logfile
#log4j.logger.java.sql.ResultSet=DEBUG,
댓글
댓글 쓰기