Log4j 구성 요소 구성
Log4j는 세 가지 중요한 구성 요소로 구성됩니다.
1. 로그 정보의 우선순위(Logger)
2. 로그 정보의 출력 대상(Appender)
3. 로그 정보의 출력 형식(레이아웃).
요약:
로그 정보의 우선 순위는 높은 것부터 낮은 것까지 ERROR, WARN, INFO 및 DEBUG를 포함하며 각각 이 로그 정보의 중요도를 지정하는 데 사용됩니다.
로그 정보의 출력 대상은 로그를 콘솔에 인쇄할지 아니면 파일에 인쇄할지 지정합니다.
출력 형식은 로그 정보의 표시 내용을 제어합니다.
Log4j 소개
Log4j는 Apache의 오픈 소스 프로젝트로 Log4j를 사용하여 콘솔, 파일, GUI 구성 요소, 심지어 소켓 서버, NT 이벤트 레코더, UNIX Syslog 데몬 등에 대한 로그 정보 전송 대상을 제어할 수도 있습니다. 각 로그의 출력 형식. 각 로그 정보의 수준을 정의하면 로그 생성 프로세스를 보다 세부적으로 제어할 수 있습니다. log4j-- Java에 대한 로그(java 로그)입니다.
Log4j 다운로드 주소: http://logging.apache.org/log4j/2.x/download.html
Log4j 구성 파일 형식
Log4j는 두 가지 구성 파일 형식을 지원합니다.
1. XML 형식 파일
2. 속성 형식의 파일
또한 구성 파일을 전혀 사용할 수 없지만 코드에서 Log4j 환경을 구성합니다. 그러나 구성 파일을 사용하면 애플리케이션이 더욱 유연해집니다.
Log4j 정의 구성 파일
1. 루트 로거 구성
구문은 다음과 같습니다.
매개변수 설명:
level은 로깅의 우선순위로 OFF, FATAL, ERROR, WARN, INFO, DEBUG, ALL 또는 사용자가 정의하는 수준으로 구분됩니다.
끄기: 가장 높은 수준, 모든 로깅을 끄는 데 사용됩니다.
치명적: 각 치명적 오류 이벤트로 인해 애플리케이션이 종료됨을 나타냅니다.
오류: 오류 이벤트가 발생하더라도 여전히 시스템의 지속적인 작동에 영향을 미치지 않음을 나타냅니다.
경고: 잠재적인 오류 상황이 발생할 것임을 나타냅니다.
정보: 일반적으로 대략적인 수준에서 사용되며 애플리케이션의 전체 실행 프로세스를 강조합니다.
디버그: 일반적으로 대략적인 수준에서 애플리케이션의 전체 실행 프로세스를 강조합니다.
모두: 가장 낮은 수준으로 모든 로깅을 켜는 데 사용됩니다.
Log4j에서는 높은 수준부터 낮은 수준까지 ERROR, WARN, INFO 및 DEBUG의 4가지 수준만 사용할 것을 권장합니다. 여기에 정의된 수준을 통해 애플리케이션에서 해당 로그 정보 수준의 설정 및 해제를 제어할 수 있습니다.
appenderName은 로그 정보가 출력되는 위치를 나타내며 동시에 여러 출력 대상을 지정할 수 있습니다.
2. 로그 정보 출력 대상 Appender를 구성합니다.
구문은 다음과 같습니다.
log4j.appender.appenderName.option1 = 값1
...
log4j.appender.appenderName.option = valueN
org.apache.log4j.ConsoleAppender(콘솔)
org.apache.log4j.FileAppender(파일)
org.apache.log4j.DailyRollingFileAppender(매일 로그 파일 생성)
org.apache.log4j.RollingFileAppender (파일 크기가 지정된 크기에 도달하면 새 파일 생성)
org.apache.log4j.WriterAppender(스트리밍 형식의 로그 정보를 지정된 위치로 전송)
3. 로그 정보 형식 구성
구문은 다음과 같습니다.
log4j.appender.appenderName.layout.option1 = 값1 …
log4j.appender.appenderName.layout.option = valueN
org.apache.log4j.HTMLLayout(HTML 테이블 형식의 레이아웃),
org.apache.log4j.PatternLayout(레이아웃 패턴을 유연하게 지정할 수 있음)
org.apache.log4j.SimpleLayout(로그 정보의 수준 및 정보 문자열 포함),
org.apache.log4j.TTCCLayout (로그 생성 시간, 스레드, 카테고리 등 정보 포함)
Log4J는 C 언어의 printf 함수와 유사한 인쇄 형식을 사용하여 로그 정보의 형식을 지정합니다.
%m코드에 지정된 메시지를 출력합니다.
%p 출력 우선순위, 즉 DEBUG, INFO, WARN, ERROR, FATAL
%r은 애플리케이션 시작부터 로그 정보 출력까지 걸린 시간(밀리초)을 출력합니다.
%c는 자신이 속한 카테고리(일반적으로 클래스의 전체 이름)를 출력합니다.
%t로그 이벤트를 생성한 스레드의 이름을 출력합니다.
%n은 캐리지 리턴 및 줄 바꿈 문자를 출력합니다. 이는 Windows 플랫폼에서는 "rn"이고 Unix 플랫폼에서는 "n"입니다.
%d는 로그 시점의 날짜 또는 시간을 출력합니다. 기본 형식은 ISO8601입니다. 또한 다음과 같이 형식을 지정할 수도 있습니다. 출력은 10월 18일과 유사합니다. 2002년 22:10 :28,921
%l 카테고리 이름, 발생한 스레드, 코드의 줄 번호를 포함하여 로그 이벤트가 발생한 위치를 출력합니다. 예: Testlog4.main(TestLog4.java:10)
%x: 현재 스레드와 관련된 NDC(중첩 진단 환경)를 출력합니다. 특히 javaservlets와 같은 다중 클라이언트 및 다중 스레드 애플리케이션에 사용됩니다.
%%: "%" 문자를 출력합니다. %F: 로그 메시지가 생성된 파일 이름을 출력합니다.
%L: 출력 코드의 줄 번호
%m: 코드에 지정된 메시지와 생성된 특정 로그 정보를 출력합니다.
%n: Windows 플랫폼에서는 "/r/n", Unix 플랫폼에서는 "/n"인 캐리지 리턴 및 줄 바꿈 문자를 출력합니다. 로그 정보를 출력할 때 %와 모드 문자 사이에 수정자를 추가할 수 있습니다. 최소 너비와 최대 너비 및 텍스트 정렬을 제어합니다.
좋다:
1)%20c: 출력 카테고리의 이름을 지정합니다. 최소 너비는 20입니다. 카테고리 이름이 20보다 작을 경우 기본적으로 오른쪽 정렬됩니다.
2)%-20c: 출력 카테고리의 이름을 지정합니다. 최소 너비는 20입니다. 카테고리 이름이 20보다 작은 경우 "-" 기호는 왼쪽 정렬을 지정합니다.
3)%.30c : 출력 카테고리 이름을 지정합니다. 최대 너비는 30입니다. 카테고리 이름이 30보다 크면 왼쪽의 추가 문자가 잘려지고, 30보다 작으면 문자가 남습니다. 공백이 없어야 합니다.
4)%20.30c: 카테고리 이름이 20자 미만인 경우 공백을 채우고 오른쪽 정렬합니다. 이름이 30자를 초과하는 경우 왼쪽에서 문자를 자릅니다.
log4j.xml의 구성 방법
<?xml version="1.0" 인코딩="UTF-8"?>
<!DOCTYPE log4j:구성 시스템 "log4j.dtd">
<log4j:구성 xmlns:log4j="http://jakarta.apache.org/log4j/">
<appender 이름="appender1"
>
<param name="File" value="logfile08.html" />
<param name="MaxFileSize" value="1MB" />
<param name="MaxBackupIndex" value="5" />
<레이아웃>
</layout>
</appender>
<루트>
<레벨 값="디버그" />
<appender-ref ref="appender1" />
</root>
</log4j:구성>
프로그램에서 Log4j를 사용하기 전에 먼저 commons-logging.jar 및 login-log4j-1.2.9.jar을 클래스 경로로 가져오고 log4j.properties를 src 루트 디렉터리에 넣습니다. 클래스에서 log4j를 사용하려면 먼저 정적 변수 Loggerlogger=Logger.getLog("classname")을 선언해야 합니다. 이제 사용할 수 있습니다.
사용법은 다음과 같습니다: logger.debug("debugmessage") 또는 logger.info("infomessage").
1. 로거 얻기
Log4j를 사용하는 첫 번째 단계는 로그 정보 제어를 담당하는 로거를 얻는 것입니다.
구문은 다음과 같습니다.
publicstaticLoggergetLogger(문자열 이름)
지정된 이름으로 로거를 가져오고 필요한 경우 해당 이름에 대한 새 로거를 만듭니다. 이름은 일반적으로 다음과 같이 이 클래스의 이름을 사용합니다.
staticLoggerlogger=Logger.getLogger(ServerWithLog4j.class.getName())
2. 구성 파일 읽기
로거를 얻은 후 두 번째 단계는 Log4j 환경을 구성하는 것입니다. 구문은 다음과 같습니다.
BasicConfigurator.configure(): 기본 Log4j 환경을 자동으로 빠르게 사용합니다.
PropertyConfigurator.configure(StringconfigFilename): Java의 속성 파일을 사용하여 작성된 구성 파일을 읽습니다.
DOMConfigurator.configure(Stringfilename): XML 형식으로 구성 파일을 읽습니다.
3. 기록 정보(포맷된 로그 정보)를 삽입합니다.
위의 두 가지 필수 단계가 완료되면 우선 순위가 다른 로깅 문을 사용하여 로깅하려는 위치에 쉽게 삽입할 수 있습니다. 구문은 다음과 같습니다.
Logger.debug(Objectmessage);
Logger.info(Objectmessage);
Logger.warn(Objectmessage);
Logger.error(Objectmessage);
프로그램 시연
1. 프로그램을 이용하여 로그 정보 출력
import java.io.IOException;
org.apache.commons.logging.impl.Log4JLogger 가져오기;
org.apache.log4j.BasicConfigurator 가져오기;
org.apache.log4j.FileAppender 가져오기;
org.apache.log4j.Layout 가져오기;
org.apache.log4j.레벨 가져오기;
org.apache.log4j.Logger 가져오기;
org.apache.log4j.SimpleLayout 가져오기;
/**
*
* @version: 1.1
*
* @author: Su Ruonian<a href="mailto:[email protected]">이메일 보내기</a>
*
* @since: 1.0 생성시간: 2013-1-1 03:19:42 오후
*
* @function: 코드를 통해 로그를 출력합니다.
*
*/
공개 클래스 Log4jPrintByCode {
개인 정적 로거 로거 logger = Logger.getLogger(Log4jPrintByCode.class);
개인 레이아웃 레이아웃 = new SimpleLayout();
개인 FileAppender fileAppender;
//객체 생성 시 구성 종속성을 사용하고 초기화합니다.
public Log4jPrintByCode(레이아웃 레이아웃, 레벨 레벨, 문자열 distDir){
BasicConfigurator.configure(); //기본 구성 정보를 사용하므로 log4j.properties를 작성할 필요가 없습니다.
노력하다 {
init(레이아웃,레벨, distDir);
} 잡기(예외 e) {
e.printStackTrace();
}
}
public void init(레이아웃 레이아웃, 레벨 레벨, 문자열 distDir)에서 예외 발생{
logger.setLevel(level); //로그 출력 레벨 설정
fileAppender = new FileAppender(layout,distDir,false);
logger.addAppender(fileAppender); //출력 터미널 추가
}
공개 정적 무효 메인(String[] args) {
SimpleLayout 레이아웃 = new SimpleLayout();
String logDir = "log4jcode.Log";
Log4jPrintByCode log4jCode = new Log4jPrintByCode(layout,Level.INFO,logDir);
//다음 정보가 출력됩니다.
log4jCode.logger.info("log4j로 로그 정보 인쇄");
log4jCode.logger.warn("log4j에 의한 로그 경고 인쇄");
log4jCode.logger.error("log4j에 의한 로그 오류 인쇄");
}
공개 레이아웃 getLayout() {
반환 레이아웃;
}
public void setLayout(레이아웃 레이아웃) {
this.layout = 레이아웃;
}
공개 FileAppender getFileAppender() {
fileAppender를 반환합니다.
}
공공 무효 setFileAppender(FileAppender fileAppender) {
this.fileAppender = fileAppender;
}
}
// info 레벨 정보를 기록합니다.
if (logger.isInfoEnabled()) {
logger.info("다오에서 보낸 정보 메시지입니다.");
}
2.Log4J는 동일한 로그 정보를 여러 대상에 출력합니다.
/* 데이터베이스 전환 */
db_log4j를 사용하십시오;
/* 로그 정보 테이블 */
tb_log 테이블 생성(
logId int는 null이 아닙니다. auto_increment 설명 '일련 번호',
createDate varchar(45) 기본 null 설명 '로그 생성 시간',
thread varchar(45) 기본 null 주석 '현재 스레드',
level varchar(45) 기본 null 주석 '현재 로그 수준',
class varchar(45) 기본 null 주석 '로그 클래스 생성',
message varchar(245) 기본 null 주석 '특정 정보 기록',
기본 키(logId)
);
애플리케이션 인스턴스는 로그 정보를 콘솔, 파일, 데이터베이스에 동시에 출력합니다.
데이터베이스 및 테이블 생성
/* 데이터베이스 전환 */
db_log4j를 사용하십시오;
/* 로그 정보 테이블 */
tb_log 테이블 생성(
logId int는 null이 아닙니다. auto_increment 설명 '일련 번호',
createDate varchar(45) 기본 null 설명 '로그 생성 시간',
thread varchar(45) 기본 null 주석 '현재 스레드',
level varchar(45) 기본 null 주석 '현재 로그 수준',
class varchar(45) 기본 null 주석 '로그 클래스 생성',
message varchar(245) 기본 null 주석 '특정 정보 기록',
기본 키(logId)
);
#컨트롤러에 대한 A1 출력 정의
log4j.appender.A1=org.apache.log4j.ConsoleAppender
#A1의 레이아웃 모드를 PaternLayout으로 정의
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
# A1의 출력 형식을 정의합니다.
log4j.appender.A1.layout.ConversionPattern=%4p [%t] (%F:%L) - %m%n
#A2 출력을 파일로 정의
log4j.appender.A2=org.apache.log4j.RollingFileAppender
#A2가 출력할 파일을 정의합니다.
log4j.appender.A2.File=./log/sysLog.log
#A2 출력 파일의 최대 길이를 정의합니다.
log4j.appender.A2.MaxFileSize = 1KB
#A2에 대한 백업 파일 수를 정의합니다.
log4j.appender.A2.MaxBackupIndex = 3
#A2의 레이아웃 모드를 PatternLayout으로 정의
log4j.appender.A2.layout=org.apache.log4j.PatternLayout
#A2의 출력 모드 정의
log4j.appender.A2.layout.ConversionPattern=%d{yyyy-MM-dd hh:mm:ss}:%p %t %c - %m%n
#데이터베이스에 대한 A3 출력 정의
log4j.appender.A3=org.apache.log4j.jdbc.JDBCAppender
log4j.appender.A3.URL=jdbc:mysql://localhost:3306/db_log4j
log4j.appender.A3.driver=com.mysql.jdbc.Driver
log4j.appender.A3.user=루트
log4j.appender.A3.password=루트
#A3의 레이아웃과 실행되는 SQL문을 정의합니다.
log4j.appender.A3.layout=org.apache.log4j.PatternLayout
log4j.appender.A3.layout.ConversionPattern=tb_log(createDate,thread,level,class,message) 값('%d','%t','%-5p','%c','%m에 삽입) ')
org.apache.log4j.Logger 가져오기;
org.apache.log4j.PropertyConfigurator 가져오기;
/**
*
* @version: 1.1
*
* @author: Su Ruonian<a href="mailto:[email protected]">이메일 보내기</a>
*
* @since: 1.0 생성시간: 2013-1-1 04:13:59 PM
*
* @function: 구성 파일을 통해 여러 대상에 대한 로그 정보 출력 제어
*
*/
공개 클래스 Log4jPrintByConfigure {
개인 정적 로거 logger = Logger.getLogger(Log4jPrintByConfigure.class);
public static void main(String[] args)에서 예외가 발생합니다.
//로그 구성 파일 log4j.properties 로드
PropertyConfigurator.configure("configure/log4j.properties");//파일은 src와 동일한 디렉터리의 구성 폴더에 저장됩니다.
//src 아래에 위치할 경우 매개변수는 "bin/log4j.properties" 또는 "src/log4j.properties"이어야 합니다. bin을 기준으로 사용하는 것이 좋습니다.
//다음 정보가 출력됩니다.
logger.debug("로거 인쇄 DEBUG 메시지");
logger.info("로거는 INFO 메시지를 인쇄합니다");
logger.warn("로거는 경고 메시지를 인쇄합니다");
logger.error("로거는 오류 메시지를 인쇄합니다");
logger.fatal("여기에 치명적인 메시지가 있습니다");
}
}