설정이 비교적 완전한log4j.xml 파일 (1)

23435 단어 log4j
logger Logger를 가져옵니다.getRootLogger () 루트 로거 가져오기.getLogger(String name)에서 하위 logger Logger를 가져옵니다.getLogger(Class clazz) 또는 Logger.getLogger(clazz.getName())
로그 레벨(.setLevel(int, Exception) 레벨을 설정합니다.모든 로그 레벨을 엽니다.DEBUG는 Level을 디버깅하는 데 사용됩니다.INFO는 프로세스 레벨을 실행하는 데 사용됩니다.WARN은 잠재적인 오류 레벨에 사용됩니다.오류 이벤트 레벨에 ERROR 사용.FATAL은 심각한 오류 시간 수준에 사용됩니다.모든 로그 닫기
출력단 Appender(.addAppender).setAdditivity(boolean additive) 덮어쓰기 여부) org.apache.log4j.ConsoleAppender를 콘솔 targer: ConsoleAppender로 내보냅니다.SYSTEM_OUT(Default) ConsoleAppender.SYSTEM_ERR public ConsoleAppender(Layout) public ConsoleAppender(Layout,String targer) org.apache.log4j.FileAppender를 파일public FileAppender(Layout, String fileName)로 출력합니다. public FileAppender(Layout, String fileName, boolean append)가 org를 덮어쓰는지 여부입니다.apache.log4j.Daily RollingFileAppender는 매일 새 파일 org로 출력됩니다.apache.log4j.RollingFileAppender를 파일로 내보내면 자동으로 이름이 바뀝니다. public RollingFileAppender(Layout, String fileName)void setMaxBackupIndex(int index) 설정 로그 파일의 최대 백업 수void setMaximumFileSize(long size) 설정 로그 파일의 최대 크기 org.apache.log4j.WriterAppender 스트림 형식은 임의의 장소 org로 출력됩니다.apache.log4j.데이터베이스로 내보내기
로그 포맷(Layout) Conversion Pattern 매개 변수의 형식 의미%c 출력 로그 정보가 속하는 클래스의 전체 이름%d 출력 로그 시간점의 날짜나 시간, 기본 형식은 ISO8601이며, 그 다음에 형식을 지정할 수 있습니다. 예를 들어%d{yyyy-MM-dd HH:mm:ss}, 출력 유사: 2002-10-18-22:10:28%f 출력 로그 정보가 속하는 클래스의%l 출력 로그 이벤트 발생 위치,즉, 로그 정보를 출력하는 문장은 그 클래스의 몇 줄%m 출력 코드에 지정된 정보에 있습니다. 예를 들어log(message)의message%n은 리턴 줄 바꾸기를 출력합니다. Windows 플랫폼은'rn'이고 유닉스 플랫폼은'n'%p 출력 우선순위, 즉 DEBUG, INFO, WARN, ERROR, FATAL입니다.만약 debug () 출력을 호출하는 경우, DEBUG입니다. 이와 같이%r는 응용 프로그램이 로그 정보를 출력하는 데 소모되는 밀리초%t 출력에서 로그 이벤트를 생성하는 스레드 이름을 출력합니다.
public PatternLayout() 기본 설정 사용하기 DEFAULT_CONVERSION_PATTERN 정보만 인쇄 public PatternLayout (String) 사용자 정의 pattern을 사용하여 PatternLayout void setConversionPattern (String) 설정 로그 형식 HTMLLayout SimpleLayout
5. 1.BasicConfigurator.configure() PatternLayout p = new PatternLayout("%p [%t] %c (%F:%L) - %m%n");  ConsoleAppender a = new ConsoleAppender(p,ConsoleAppender.SYSTEM_OUT);  root.addAppender(a);  rootLogger.setLevel(Level.DEBUG);  2.PropertyConfigurator.configure("/help/example.properties") String resource = "/help/example.properties"; URL configFileResource = Log4J.class.getResource(resource); PropertyConfigurator.configure(configFileResource); 3.DOMConfigurator.configure("/help/example.xml") xml declaration and dtd  |  log4j:configuration  |  +-- appender (name, class)  | |  | +-- param (name, value)  | +-- layout (class)  | |  | +-- param (name, value)  +-- logger (name, additivity)  | |  | +-- level (class, value)  | | |  | | +-- param (name, value)  | +-- appender-ref (ref)  +-- root  |  +-- param (name, class)  +-- level  | |  | +-- param (name, value)  +-- appender-ref (ref)
0.log4j.properties 템플릿log4j.rootLogger=info, CONSOLE, RFILE, FILE, DB 설정 레벨과 세 개의 출력단log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender  log4j.appender.CONSOLE.Target=System.out 컨트롤러 형식log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout  log4j.appender.CONSOLE.layout.ConversionPattern= %4p [%t] (%F:%L) - %m%n
log4j.appender.FILE=org.apache.log4j.FileAppender  log4j.appender.FILE.File=/help/my.properties 대상 파일log4j.appender.FILE.Append=false log4j 추가 여부.appender.FILE.layout=org.apache.log4j.PatternLayout 레이아웃 모드 log4j.appender.FILE.layout.ConversionPattern=%d{yyy-MM-dd hh:mm:ss}:%p%c:%L -%m%n 포맷 레이아웃
log4j.appender.RFILE=org.apache.log4j.RollingFileAppender  log4j.appender.RFILE.File=/help/my.properties 대상 파일log4j.appender.RFILE.MaxFileSize = 1KB 최대 길이 log4j.appender.RFILE.MaxBackupIndex = 3 최대 백업 log4j.appender.RFILE.layout=org.apache.log4j.PatternLayout 레이아웃 모드 log4j.appender.RFILE.layout.ConversionPattern=%d{yyy-MM-dd hh:mm:ss}:%p%c:%L -%m%n 포맷 레이아웃
log4j.appender.DB=org.apache.log4j.jdbc.JDBCAppender  log4j.appender.DB.URL=jdbc:oracle:thin:@127.0.0.1:1521:mumu URL log4j.appender.DB.driver=oracle.jdbc.driver.OracleDriver 드라이브 log4j.appender.DB.user=liulibo 사용자 이름log4j.appender.DB.password=liulibo 암호log4j.appender.DB.layout=org.apache.log4j.PatternLayout 레이아웃 모드 log4j.appender.DB.layout.ConversionPattern=insert into log4j(createdate,thread,level_,class,message) values(\'%d\',\'%t\',\'%-5p\',\'%c\',\'%m\')
create table log4j(createdate varchar2(32),thread varchar2(32),level_ varchar2(32),class varchar2(32),message varchar2(32));
0. XML 템플릿
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">

<log4j:configuration>

<appender name="ConsoleAppender" class="org.apache.log4j.ConsoleAppender">
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d{yyyy-MM-dd hh:mm:ss}:%p %t %c - %m%n"/>
</layout>
</appender>

<appender name="RollingFileAppender" class="org.apache.log4j.RollingFileAppender">
<param name="Append" value="false"/>
<param name="MaxFileSize" value="1KB"/> 
<param name="File" value="dom/my.log"/> 
<param name="MaxBackupIndex" value="3"/> 
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d{yyyy-MM-dd hh:mm:ss}:%p %t %c - %m%n"/>
</layout>
</appender>

<appender name="JDBCAppender" class="org.apache.log4j.jdbc.JDBCAppender">
<param name="URL" value="jdbc:oracle:thin:@127.0.0.1:1521:mumu"/>
<param name="user" value="liulibo"/> 
<param name="password" value="liulibo"/> 
<param name="driver" value="oracle.jdbc.driver.OracleDriver"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="insert into log4j(createdate,thread,level_,class,message) values(\'%d\',\'%t\',\'%-5p\',\'%c\',\'%m\')"/>
</layout>
</appender>

<root>
<priority value ="debug" />
<appender-ref ref="ConsoleAppender"/>
<appender-ref ref="RollingFileAppender"/>
<appender-ref ref="JDBCAppender"/>
</root>

</log4j:configuration>

응용 웹.xml
<context-param>
<param-name>props</param-name>
<param-value>/WEB-INF/log4j.properties</param-value>
</context-param>

<listener>
<listener-class>cart.listener.SCServletContextListener</listener-class>
</listener>
초기화 방법에 추가합니다
private void initLog4j(ServletContext context){
String prefix = context.getRealPath("/");
System.out.println("prefix:"+prefix);
String props = context.getInitParameter("props");
if(props != null) {
PropertyConfigurator.configure(prefix+props);
}
Logger logger = Logger.getLogger(SCServletContextListener.class); 
}
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">

<log4j:configuration threshold="debug"
xmlns:log4j='http://jakarta.apache.org/log4j/'>

<appender name="console.CONSOLE"
class="org.apache.log4j.ConsoleAppender">
<param name="threshold" value="debug" />
<layout class="org.apache.log4j.PatternLayout">
<!--
<param name="ConversionPattern" value="%d{HH:mm:ss}[%C.%M(%L)-%p] %m%n"/>
-->
<param name="ConversionPattern" value="%d{HH:mm:ss}[%C(%L)-%p] %m%n"/>
</layout>
</appender>

<appender name="file.text.SYSFILE"
class="org.apache.log4j.RollingFileAppender">
<param name="threshold" value="error" />
<param name="file" value="/juyee.log" />
<param name="maxFileSize" value="2MB" />
<param name="maxBackupIndex" value="5" />
<param name="append" value="true" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern"
value="%-d{yyyy-MM-dd HH:mm:ss.SSS} [%p]-[%c] %m%n" />
</layout>
</appender>
<appender name="file.text.DATE_FILE"
class="org.apache.log4j.DailyRollingFileAppender">
<param name="threshold" value="debug" />
<param name="file" value="/juyee.log" />
<param name="append" value="true" />
<param name="datePattern" value="'.'yyyy-MM-dd" />
<!-- each hour
<param name="DatePattern" value="'.'yyyy-MM-dd-HH"/>
-->
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d %-5p [%c] %m%n" />
</layout>
</appender>
<appender name="file.text.APPFILE"
class="org.apache.log4j.RollingFileAppender">
<param name="threshold" value="error" />
<param name="file" value="${webapp.root}/WEB-INF/logs/juyee.log" />
<param name="maxFileSize" value="1024KB" />
<param name="maxBackupIndex" value="5" />
<param name="append" value="true" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern"
value="%d %-5p %c - %m [%t] (%F:%L)%n" />
</layout>
</appender>
<appender name="file.html.HTML"
class="org.apache.log4j.RollingFileAppender">
<param name="threshold" value="error" />
<param name="file" value="/juyee-log.html" />
<param name="maxFileSize" value="1024KB" />
<param name="maxBackupIndex" value="5" />
<param name="append" value="true" />
<layout class="org.apache.log4j.HTMLLayout" />
</appender>
<appender name="file.xml.XML"
class="org.apache.log4j.RollingFileAppender">
<param name="threshold" value="error" />
<param name="file" value="/juyee-log.xml" />
<param name="maxFileSize" value="1024KB" />
<param name="maxBackupIndex" value="5" />
<param name="append" value="true" />
<layout class="org.apache.log4j.xml.XMLLayout" />
</appender>

<appender name="mail.MAIL" class="org.apache.log4j.net.SMTPAppender">
<param name="threshold" value="debug"/>
<!--
<param name="threshold" value="fatal"/>
-->
<param name="BufferSize" value="10"/>
<param name="From" value="[email protected]"/>
<param name="SMTPHost" value="www.justonetech.com"/>
<param name="Subject" value="juyee-log4jMessage"/>
<param name="To" value="[email protected]"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%-d{yyyy-MM-dd HH:mm:ss.SSS} [%p]-[%c] %m%n" />
</layout>
</appender>

<appender name="remote.CHAINSAW"
class="org.apache.log4j.net.SocketAppender">
<param name="threshold" value="fatal" />
<param name="remoteHost" value="localhost" />
<param name="port" value="4445" />
<param name="locationInfo" value="true" />
</appender>

<category name="com.juyee" additivity="true">
<priority value="info" />
<appender-ref ref="console.CONSOLE" />
<!--
<appender-ref ref="file.text.DATE_FILE" />
-->
</category>

<category name="com.co" additivity="true">
<priority value="debug" />
<appender-ref ref="console.CONSOLE" />
<appender-ref ref="file.text.DATE_FILE" />
</category>

<category name="org" additivity="true">
<priority value="WARN" />
<appender-ref ref="console.CONSOLE" />
<!--
<appender-ref ref="file.text.DATE_FILE" />
-->
</category>

<root>
<!--
<level value="trace" />
<level value="debug" />
<level value="info" />
<level value="warn" />
<level value="error" />
<level value="fatal" />
<appender-ref ref="console.CONSOLE" />
<appender-ref ref="file.text.DATE_FILE"/>
-->
</root>
</log4j:configuration>
여러 개의 로그 파일을 출력하는 log4j는 두 가지 설정 방법이 있다. 모두가 잘 알고 있는 것은properties 파일이다. 그러나 최근의 프로젝트 실시에서 사용자에게 시스템을 설치할 때마다log 파일을 서로 다른 위치에 두는 것을 고민해야 한다.property 파일을 바꾸려면jar 패키지를 다시 설치해야 하기 때문에 짜증이 난다.xml 설정 방법을 사용하면 WEB-INFO 아래에 직접 놓고 경로를 수정하면 편리합니다.몇 가지 자료를 찾아서 마침내 시스템의log4j를 xml에 설정하는 것으로 바꾸었다.
첨부: log4j APIhttp://logging.apache.org/log4j/docs/api/index.html log4i.xml 파일
<?xml version="1.0" encoding="GB2312" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<appender name="FILE"
class="org.apache.log4j.RollingFileAppender">
<!--  file :org.apache.log4j.RollingFileAppender -->
<param name="File" value="D:/zhaotj/all.output.log" /><!--  File :  -->
<param name="Append" value="true" /><!--  ,  -->
<param name="MaxBackupIndex" value="10" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%p (%c:%L)- %m%n" /><!--   -->
</layout>
</appender>

<appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">
<!--   -->
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern"
value="%-4r [%t] %-5p %c %x - %m%n" />
</layout>
<!-- -->
<filter class="org.apache.log4j.varia.LevelRangeFilter">
<param name="levelMin" value="info" />
<param name="levelMax" value="info" />
<param name="AcceptOnMatch" value="true" />
</filter>
</appender>

<root><!--   -->
<priority value="info" />
<appender-ref ref="FILE" /><!--  id  -->
<appender-ref ref="STDOUT" />
</root>

</log4j:configuration>

xml 파일을 만든 후 servlet 클래스 계승actionservlet을 작성해야 합니다. 프로젝트가 초기화될 때 자동으로 xml 프로필을 불러옵니다.
package com.asiainfo;
import javax.servlet.ServletException;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.log4j.xml.DOMConfigurator;
import org.apache.struts.action.ActionServlet;

public class ExtendedActionServlet extends ActionServlet {
private Log log = LogFactory.getLog(this.getClass().getName());

public ExtendedActionServlet() {}

public void init() throws ServletException {
log.info(
"Initializing, My MyActionServlet init this System's Const Variable");
String prefix = this.getServletConfig().getServletContext().getRealPath(
"/");// 
String file = this.getServletConfig().getInitParameter("log4j");
// log4j 
String filePath = prefix + file;
DOMConfigurator.configure(filePath);// .xml  
log.info("Initializing, end My Init");
super.init();// struts, ,ActionServlet 
}
}

우리는 이러한 중에서 상대적인 경로로 xml을 불러오는 방법을 볼 수 있다. 우선prefix를 통해 프로젝트의 경로를 읽은 다음에 웹을 읽는다.xml의log4j 변수,log4j를 획득합니다.xml의 상대적인 경로 두 가지를 결합하면 그의 절대적인 경로 당김
마지막으로 웹에서.xml에서 액션 정보를 설정하면 불러올 수 있습니다.
web.xml
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>
com.asiainfo.ExtendedActionServlet
</servlet-class>
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>

<!-- tsExtend -->
<init-param>
<param-name>config/tsextend</param-name><!-- -->
<param-value>
/WEB-INF/tsextend/struts-config.xml
</param-value>
</init-param>
<init-param>
<param-name>log4j</param-name><!--log4j.xml -->
<param-value>
/WEB-INF/log4j.xml
</param-value>
</init-param>
<init-param>
<param-name>info</param-name>
<param-value>3</param-value>
</init-param>
<init-param>
<param-name>detail</param-name>
<param-value>3</param-value>
</init-param>
<load-on-startup>0</load-on-startup><!-- -->
</servlet>

<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>

각 레벨의 로그에 따라 다른 파일로 출력
log4j는 이 기능을 지원하지만 Properties 설정을 사용할 수 없습니다. XML을 사용해야 합니다.
log4j를 만듭니다.xml
<?xml version= "1.0 " encoding= "UTF-8 "?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd ">
<log4j:configuration xmlns:log4j= "http://jakarta.apache.org/log4j/ ">
<appender name= "STDOUT " class= "org.apache.log4j.ConsoleAppender ">
<layout class= "org.apache.log4j.PatternLayout "/>
</appender>
<appender name= "DEBUG " class= "org.apache.log4j.RollingFileAppender ">
<param name= "File " value= "debug.log "/>
<param name= "Append " value= "true "/>
<param name= "MaxFileSize " value= "500KB "/>
<param name= "MaxBackupIndex " value= "2 "/>
<layout class= "org.apache.log4j.PatternLayout "/>
<filter class= "org.apache.log4j.varia.LevelRangeFilter ">
<param name= "LevelMax " value= "DEBUG " />
<param name= "LevelMin " value= "DEBUG " />
</filter>
</appender>
<appender name= "INFO " class= "org.apache.log4j.RollingFileAppender ">
<param name= "File " value= "info.log "/>
<param name= "Append " value= "true "/>
<param name= "MaxFileSize " value= "500KB "/>
<param name= "MaxBackupIndex " value= "2 "/>
<layout class= "org.apache.log4j.PatternLayout "/>
<filter class= "org.apache.log4j.varia.LevelRangeFilter ">
<param name= "LevelMax " value= "INFO " />
<param name= "LevelMin " value= "INFO " />
</filter>
</appender>
<root>
<appender-ref ref= "STDOUT "/>
<appender-ref ref= "DEBUG "/>
<appender-ref ref= "INFO "/>
</root>
</log4j:configuration>

코드의 DOMConfigurator.configure( "log4j.xml ");
이렇게 하면 로그인할 수 있다.debug 및 log.info는 각각 다른 파일에 출력됩니다. 더 많은 파일이 필요하면 appender를 여러 번 복사하면 됩니다.
(1). 출력 방식 appender는 일반적으로 5가지가 있습니다.
org.apache.log4j.RollingFileAppender(파일 스크롤, 최신 로그 자동 기록)
org.apache.log4j.ConsoleAppender(콘솔)
org.apache.log4j.FileAppender(파일)
org.apache.log4j.DailyRollingFileAppender(매일 로그 파일 생성)
org.apache.log4j.WriterAppender(로그 정보를 흐름 형식으로 지정한 곳으로 보내기)
(2). 일기 기록의 우선순위priority, 우선순위는 높음에서 낮음으로 나뉜다
OFF ,FATAL ,ERROR ,WARN ,INFO ,DEBUG ,ALL. 
Log4j는 FATAL, ERROR, WARN, INFO, DEBUG 등 다섯 가지 레벨만 사용하는 것을 권장합니다. 
(3). 형식 설명 layout의 매개 변수는% 로 시작하고 뒤에 있는 매개 변수는 다른 포맷 정보를 나타냅니다. (매개 변수는 알파벳 순서대로 나열됩니다.)
% c 출력이 속한 클래스의 전체 이름을% d {Num}, Num 클래스 이름으로 출력할 수 있는 비트 (예: "org.apache.elathen.ClassName",% C {2} 는 elathen.ClassName) 를 출력합니다.
%d 출력 로그 시간은%d{yyyy-MM-dd HHH:mm:ss, SSS} 형식이며,%d{HH:mm:ss}와 같은 형식을 지정할 수 있습니다.
% l 출력 로그 이벤트 발생 위치, 클래스 이름, 발생 루트, 코드의 줄 수 포함
%n 줄 바꿈 문자
% m 출력 코드 지정 정보, 예를 들어 info("메시지"), 출력 메시지
%p 출력 우선 순위, 즉 FATAL, ERROR 등
%r 출력이 로그 정보를 표시하는 데 소모되는 밀리초
% t 출력이 로그 이벤트를 생성하는 스레드 이름
log4j를 사용합니다.xml 컨트롤러에서 ibatis의 ql 문장을 출력하는 방법
<appender name="IBatis" class="org.apache.log4j.ConsoleAppender">
       <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern"
         value="%-4r [%t] %-5p %c %x - %m%n" />
       </layout>
       <filter class="org.apache.log4j.varia.LevelRangeFilter">
        <param name="LevelMin" value="DEBUG" />
        <param name="LevelMax" value="DEBUG" />
       </filter>
    </appender>
<logger name="com.ibatis" additivity="true">
   <level value="DEBUG" />
    </logger>
    <logger name="java.sql.Connection" additivity="true">
       <level value="DEBUG" />
    </logger>
<!--
    <logger name="java.sql.Statement" additivity="true">
       <level value="DEBUG" />
    </logger>
 -->
    <logger name="java.sql.PreparedStatement" additivity="true">
       <level value="DEBUG" />
       <appender-ref ref="IBatis" />
    </logger>
    <logger name="java.sql.ResultSet" additivity="true">
       <level value="DEBUG" />
       <appender-ref ref="IBatis" />
    </logger>

++++++++++++++++++++++++++++++++++
이상은 모두 전재입니다. 제 log4j 마운트 설정을 붙여 주십시오.
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;

/**
 * log4j MDC Filter
 *
 * User: Alec Fan
 * @version 1.0
 * @since 12-4-27  4:56
 */
public class Log4jMDCServletFilter implements Filter {

    public void init(FilterConfig filterConfig) throws ServletException {

    }

    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        HttpServletRequest httpServletRequest = (HttpServletRequest) request;
        Log4jMDC.put(Log4jMDC.LOG4J_MDC_REQUEST_URI, httpServletRequest.getRequestURI());
        chain.doFilter(request, response);
    }


    public void destroy() {
        Log4jMDC.remove(Log4jMDC.LOG4J_MDC_REQUEST_URI);
    }
}

web.xml
<filter>
        <filter-name>log4jFilter</filter-name>
        <filter-class>com.xxxx.common.log4j.Log4jMDCServletFilter</filter-class>
    </filter>

    <filter-mapping>
        <filter-name>log4jFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

나는 그래도 이런 방식을 비교적 추앙한다

좋은 웹페이지 즐겨찾기