1 Log4j 구성 지침
1.1 구성 파일
Log4j는 Java 프로그램을 통해 동적으로 설정할 수 있습니다. 이 방법의 명백한 단점은 로그 출력 수준 및 기타 정보를 수정해야 하는 경우 Java 파일을 수정한 다음 다시 컴파일해야 한다는 점입니다. 이는 매우 번거로운 작업입니다.
Log4j는 구성 파일을 통해서도 설정할 수 있습니다. 현재는 두 가지 형식의 구성 파일을 지원합니다.
•xml 파일
•속성 파일(권장)
다음은 log4j 구성 파일의 전체 내용입니다.
다음과 같이 코드 코드를 복사합니다 .
log4j.rootCategory=INFO, 표준 출력
log4j.rootLogger=정보, 표준 출력
### 표준 출력 ###
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=%d{ABSOLUTE} %5p - %m%n
### 세트 패키지 ###
log4j.logger.org.springframework=정보
log4j.logger.org.apache.catalina=정보
log4j.logger.org.apache.commons.digester.Digester=정보
log4j.logger.org.apache.catalina.startup.TldConfig=info
log4j.logger.chb.test=디버그
1.2 루트 로거 구성
루트 로거는 주로 log4j에서 지원하는 로그 수준과 출력 대상을 정의합니다.
log4j.rootLogger = [ level ] ,appenderName,appenderName,…
그 중 레벨은 로깅의 우선순위를 의미하며 OFF, FATAL, ERROR, WARN, INFO, DEBUG, ALL 또는 사용자 정의 레벨로 구분됩니다.
높은 우선 순위부터 낮은 수준까지 ERROR, WARN, INFO 및 DEBUG의 4개 수준만 사용하는 것이 좋습니다.
appenderName은 로그 정보가 출력되는 위치를 지정하며 동시에 여러 출력 대상을 지정할 수 있습니다.
1.3 출력 대상 Appender 구성
Appender는 주로 로그 정보가 출력되는 위치를 정의합니다. 주요 구문은 다음과 같습니다.
다음과 같이 코드 코드를 복사합니다 .
log4j.appender.appenderName = classInfo
log4j.appender.appenderName.option1 = 값1
…
log4j.appender.appenderName.optionN = 값N
Log4j에서 제공하는 어펜더에는 다음이 포함됩니다.
•org.apache.log4j.ConsoleAppender(콘솔),
•org.apache.log4j.FileAppender(파일),
•org.apache.log4j.DailyRollingFileAppender(매일 로그 파일 생성),
•org.apache.log4j.RollingFileAppender (파일 크기가 지정된 크기에 도달하면 새 파일 생성)
•org.apache.log4j.WriterAppender(로그 정보를 스트리밍 형식으로 지정된 위치로 전송)
다음과 같은 ConsoleAppender를 예로 들어 보겠습니다.
다음과 같이 코드 코드를 복사합니다 .
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
1.4 로그 정보의 형식 레이아웃 구성
레이아웃은 Appender의 출력 형식을 담당합니다. 구문은 다음과 같습니다.
다음과 같이 코드 코드를 복사합니다 .
log4j.appender.appenderName.layout = classInfo
log4j.appender.appenderName.layout.option1 = 값1
…
log4j.appender.appenderName.layout.optionN = 값N
그 중 Log4j에서 제공하는 레이아웃은 다음과 같습니다.
•org.apache.log4j.HTMLLayout(HTML 테이블 형식의 레이아웃),
•org.apache.log4j.PatternLayout(레이아웃 패턴을 유연하게 지정할 수 있음),
•org.apache.log4j.SimpleLayout(로그 정보의 수준 및 정보 문자열 포함)
•org.apache.log4j.TTCCLayout (로그 생성시간, 스레드, 카테고리 등의 정보를 담고 있음)
1.5 패키지 출력 레벨 설정
다양한 패키지의 로그 출력 수준을 설정할 수 있습니다. 구문은 다음과 같습니다.
log4j.logger.packageName=레벨
그중 packageName은 실제 패키지 이름이고 level은 로그 수준입니다. 예를 들면 다음과 같습니다.
다음과 같이 코드 코드를 복사합니다 .
log4j.logger.org.springframework=정보
log4j.logger.org.apache.catalina=정보
log4j.logger.org.apache.commons.digester.Digester=정보
log4j.logger.org.apache.catalina.startup.TldConfig=info
log4j.logger.chb.test=디버그
2 Log4j가 J2ee와 결합됨
2.1 스프링 아키텍처 사용
Spring은 정말 훌륭합니다. 시스템이 spring 프레임워크를 사용하는 경우 log4j를 통합하는 것은 매우 간단합니다.
2.1.1 log4j 구성 파일 정의
다음과 같이 코드 코드를 복사합니다 .
log4j.rootCategory=INFO, 표준 출력
log4j.rootLogger=정보, 표준출력
### 표준 출력 ###
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=%d{ABSOLUTE} %5p - %m%n
### 파일에 기록 ###
log4j.logger.org.springframework=정보
log4j.logger.org.apache.catalina=정보
log4j.logger.org.apache.commons.digester.Digester=정보
log4j.logger.org.apache.catalina.startup.TldConfig=info
log4j.logger.chb.test=디버그
2.1.2 리스너 정의
리스너는 web.xml에 정의되어야 하며, 여기에는 주로 다음과 같이 log4j 구성 파일 디렉터리 및 log4j 리스너 정의가 포함됩니다.
다음과 같이 코드 코드를 복사합니다 .
<?xml version="1.0" 인코딩="UTF-8"?>
<웹앱 버전="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-인스턴스"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<!--Spring이 로드한 Log4j 구성 파일의 위치-->
<컨텍스트 매개변수>
<param-name>log4jConfigLocation</param-name>
<param-값>/WEB-INF/log4j.properties</param-value>
</context-param>
<컨텍스트 매개변수>
<param-name>contextConfigLocation</param-name>
<매개변수 값>
/WEB-INF/classes/applicationContext*.xml
</param-값>
</context-param>
<!--Spring log4j 구성 로더-->
<청취자>
<리스너 클래스>
org.springframework.web.util.Log4jConfigListener
</리스너 클래스>
</listener>
<청취자>
<리스너 클래스>
org.springframework.web.context.ContextLoaderListener
</리스너 클래스>
</listener>
<서블릿>
<servlet-name>InitiaServlet</servlet-name>
<servlet-class>chb.test.web.InitiaServlet</servlet-class>
<시작 시 로드>1</시작 시 로드>
</서블릿>
<환영 파일 목록>
<welcome-file>index.jsp</welcome-file>
</welcome-파일-목록>
</웹-앱>
2.1.3 테스트 클래스
다음과 같이 코드 코드를 복사합니다 .
패키지 com.dheaven.mip.web;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
org.apache.log4j.Logger 가져오기;
공개 클래스 InitiaServlet은 HttpServlet을 확장합니다.
protected Logger log = Logger.getLogger(InitiaServlet.class);
개인 정적 최종 긴 serialVersionUID = 8550329576989690578L;
/**
* 객체의 생성자.
*/
공개 InitiaServlet() {
감독자();
}
/**
* 서블릿이 파괴되었습니다. <br>
*/
공공 무효 파괴() {
super.destroy();
}
/**
* 서블릿 초기화 <br>
*
* 오류가 발생하면 @throws ServletException
*/
public void init()에서 ServletException이 발생합니다.
log.debug("서버가 시작되었고 log4j가 작동하기 시작했습니다.");
}
}
2.2 스프링 아키텍처를 사용하지 않음
시스템이 스프링을 사용하지 않는다면 서블릿을 예로 들어보겠습니다. 단계를 따르고 코드만 붙여넣기만 하면 됩니다.
2.2.1 log4j 구성 파일 정의
다음 내용으로 웹 프로젝트의 WEB-INF 디렉터리에 배치합니다.
다음과 같이 코드 코드를 복사합니다 .
log4j.rootCategory=INFO, 표준 출력
log4j.rootLogger=정보, 표준 출력
### 표준 출력 ###
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=%d{ABSOLUTE} %5p - %m%n
### 세트 패키지 ###
log4j.logger.org.apache.catalina=정보
log4j.logger.org.apache.commons.digester.Digester=정보
log4j.logger.org.apache.catalina.startup.TldConfig=info
log4j.logger.com.dheaven=디버그
2.2.2 log4j 초기화 클래스 생성
다음과 같이 코드 코드를 복사합니다 .
패키지 com.dheaven.mip.web;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
org.apache.log4j.PropertyConfigurator 가져오기;
공개 클래스 InitLog4j는 HttpServlet을 확장합니다.
개인 정적 최종 긴 serialVersionUID = 1L;
public void init()에서 ServletException이 발생합니다.
문자열 접두어 = getServletContext().getRealPath("/");
prefix = prefix.replace("//", "/");
문자열 파일 = getInitParameter("log4j-init-file");
// log4j-init-file이 설정되지 않은 경우 시도할 필요가 없습니다.
if (파일 != null) {
PropertyConfigurator.configure(접두사 + 파일);
}
}
}
2.2.3 Web.xml에 초기화 클래스 정의
다음과 같이 코드 코드를 복사합니다 .
<서블릿>
<servlet-name>log4j-init</servlet-name>
<servlet-class>chb.test.web.InitLog4j</servlet-class>
<초기화 매개변수>
<param-name>log4j-init-파일</param-name>
<param-value>WEB-INF/log4j.properties</param-value>
</init-param>
<시작 시 로드>1</시작 시 로드>
</서블릿>
2.2.4 테스트 클래스
다음과 같이 코드 코드를 복사합니다 .
패키지 chb.test.web;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
org.apache.log4j.Logger 가져오기;
공개 클래스 InitiaServlet은 HttpServlet을 확장합니다.
protected Logger log = Logger.getLogger(InitiaServlet.class);
개인 정적 최종 긴 serialVersionUID = 8550329576989690578L;
/**
* 객체의 생성자.
*/
공개 InitiaServlet() {
감독자();
}
/**
* 서블릿이 파괴되었습니다. <br>
*/
공공 무효 파괴() {
super.destroy();
}
/**
* 서블릿 초기화 <br>
*
* 오류가 발생하면 @throws ServletException
*/
public void init()에서 ServletException이 발생합니다.
log.debug("서버가 시작되었고 log4j가 작동하기 시작했습니다.");
}
}