apache log4j-1.2.15的使用

1.這個log4j的下載

下載

http://www.apache.org/dyn/closer.cgi/logging/log4j/1.2.15/apache-log4j-1.2.15.zip

2.將log4j-1.2.15.jar 導入近來

3.建立一個文件 “Log4j.properties” 將下面的代碼複製到這個文件裏!



### 輸出到日誌文件 ###
#log4j.properties

log4j.rootLogger=debug, stdout, R

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

# Pattern to output the caller's file name and line number.
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n

log4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.R.File=example.log

log4j.appender.R.MaxFileSize=100KB
# Keep one backup file
log4j.appender.R.MaxBackupIndex=1

log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n

###結束


4.建立一個java 我的是logq.java

這是代碼

import org.apache.log4j.Logger;
public class Logq {
private static Logger logger=Logger.getLogger(Logq.class);
public static void main(String[] args) {

logger.debug( " debug " );
logger.error( " error " );

}
}

這樣你就知道如何使用了!

下來介紹一下相關的知識:
#log4j的配置文件
#配置根日誌
#格式:log4j.rootLogger=級別,輸出源1,輸出源2......
#其中級別有:DEBUG<INFO<WARN<ERROR<FATAL
#特別注意:這裏定義了高級別的日誌則類中低級別的不會寫入比此低的信息
#輸出源是:自定義的名字
log4j.rootLogger=INFO,FILE1,FILE2,FILE3

#配置輸出源所對應的輔助類
#格式:log4j.appender.輸出源=類名<類名可以不同形式>
log4j.appender.FILE1=org.apache.log4j.FileAppender
#指定文件名
log4j.appender.FILE1.File=e:/1.log
#指定佈局方式(消息翻個如文件之後怎麼佈局)
log4j.appender.FILE1.layout=org.apache.log4j.SimpleLayout

#高級日誌配置1
log4j.appender.FILE2=org.apache.log4j.FileAppender
log4j.appender.FILE2.File=e:/2.html
log4j.appender.FILE2.layout=org.apache.log4j.HTMLLayout

#高級日誌配置2 自定義佈局
log4j.appender.FILE3=org.apache.log4j.FileAppender
log4j.appender.FILE3.File=e:/3.log
log4j.appender.FILE3.layout=org.apache.log4j.PatternLayout
log4j.appender.FILE3.layout.conversionPattern=%t;%p;%c;%m;%d;%l;%n
====================================================================
#常見的幾種自定義日誌
#%t:線程名稱
#%p:日誌級別
#%c:日誌消息所在類名 <常用>
#%m:消息內容
#%d:發生時間 <常用>
#%l:行數 <常用>
#%n:換行 <常用>
#注:如果要顯示中文,則需要轉碼native2ascii
%表示output輸入
p表示level
c表示調用的類
m表示log時的信息
n表示回車
M表示輸出log時的信息的那個方法
F表示輸出log時的信息的那個文件名
L表示輸出log時的信息所在類的行數

LOG4J中PatternLayout的佈局參數
ConversionPattern參數的格式含義
格式名 含義
%c 輸出日誌信息所屬的類的全名,可以在其後指定繼承的層數,比如{2}輸出到其父類,{3}輸出到父類的父類。
%d 輸出日誌時間點的日期或時間,默認格式爲ISO8601,也可以在其後指定格式,比如:%d{yyy-MM-dd HH:mm:ss },輸出類似:2002-10-18- 22:10:28
%M 輸出日誌信息所屬的函數的名稱、參數類型、返回類型。
%m 輸出代碼中指定的信息,如log(message)中的message
%n 輸出一個回車換行符,Windows平臺爲“/r/n”,Unix平臺爲“/n”
%p 輸出優先級,即DEBUG,INFO,WARN,ERROR,FATAL。如果是調用debug()輸出的,則爲DEBUG,依此類推。可以用%5p或者%-5p來強制輸出5個字符,不足的在前面或者後面補充空格。
%r 輸出自應用啓動到輸出該日誌信息所耗費的毫秒數
%t 輸出產生該日誌事件的線程名
%f 輸出日誌信息所屬的類的類名。(測試的結果似乎應該是%F,而且輸出的是那個類的文件名)
%l 輸出日誌事件的發生位置,即輸出日誌信息的語句處於它所在的類的第幾行
這個測試結果出入比較大。%L確實可以輸出上面所說的行數。但是%l輸出的卻相當於%c.函數名(%F:%L)。


Log4J使用完全手冊 -grule -logcode

Log4J是Apache的一個開放源代碼項目(http://logging.apache.org/log4j/docs/),它是一個日誌操作包。
通過使用Log4J,可以指定日誌信息輸出的目的地,控制每一條日誌的輸出格式,定義日誌信息的級別。所
有這些功能通過一個配置文件靈活進行配置。

一、LOG4J組成

LOG4J主要由三大組件組成:
. Logger: 決定什麼日誌信息應該被輸出、什麼日誌信息應該被忽略;
. Appender: 指定日誌信息應該輸出到什麼地方, 這些地方可以是控制檯、文件、網絡設備;
. Layout: 指定日誌信息的輸出格式;

一個Logger可以有多個Appender,也就是說日誌信息可以同時輸出到多個設備上,每個Appender對應
一種Layout(示例見下圖)。

↗ Appender1 → Layout

Logger

↘ Appender2 → Layout


二、Logger組件

1. Logger組件提供的方法:

Logger組件是LOG4J的核心組件,它代表了Log4J的日誌記錄器,它能夠對日誌信息進行分類篩選。它
由org.apache.log4j.Logger類實現,提供瞭如下方法:

package org.apache.log4j;

public class Logger {

// Creation & retrieval methods:
public static Logger getRootLogger();
public static Logger getLogger(String name);

// printing methods:
public void debug(Object message);
public void info(Object message);
public void warn(Object message);
public void error(Object message);
public void fatal(Object message);

// generic printing method:
public void log(Priority p, Object message);
}

2. 在配置文件中配置Logger組件

可在Log4J配置文件中配置自己的Logger組件,示例:

log4j.logger.myLogger=WARN

以上代碼定義了一個Logger組件,名稱爲myLogger,日誌級別爲WARN。

3. 日誌級別種類:

一共有五種,級別由高到低依次是:fatal、error、warn、info、debug。獲得Logger實例後,我們可
調用以下方法之一輸出日誌信息:

public void debug(Object message); //輸出debug級別的日誌信息;
public void info(Object message); //輸出info級別的日誌信息;
public void warn(Object message); //輸出warn級別的日誌信息;
public void error(Object message); //輸出error級別的日誌信息;
public void fatal(Object message); //輸出fatal級別的日誌信息;
public void log(Priority p, Object message);//輸出參數Priority指定級別的日誌信息;

以上方法只有當它的級別大於或等於Logger組件配置的日誌級別時才調用。以前面我們配置的myLogger
爲例,它的日誌級別爲WARN, 那麼在程序中,它的warn()、error()、fatal()方法會被執行。對於log()
方法,只有當它的參數Priority指定的日誌級別大於或等於WARN時,它纔會被執行。

4. 爲什麼需要對日誌進行分級?

在寫程序的時候,爲了調試程序,我們會在很多出錯的地方輸出大量的日誌信息。當程序調試完,不需要
這些信息時,將程序中這些輸出日誌信息代碼刪除嗎?這樣費時費力,對於大型程序幾乎不可行。通過對
日誌分級,假如不想輸出WARN級別的日誌信息,則Logger組件的級別調高即可,省時省心。

5. Logger組件的繼承性

Log4J提供了一個root Logger,它是所有Logger組件的“祖先”,它永遠存在,且不能通過名字檢索或引
用,通過Logger.getRootLogger()方法取得它。配置root Logger代碼:

log4j.rootLogger=INFO,console

可在配置文件中方便地配置存在繼承關係的Logger組件,凡是在符號“.”後面的組件都會成爲在符號“.”
前面的Logger組件的子類。例如:

log4j.apache.myLogger=WARN
log4j.apache.myLogger.mySonLogger=,file

以上代碼中, mySonLogger是myLogger的子類Logger組件。Logger組件的繼承關係:
. 如果子類Logger組件沒有定義日誌級別,則將繼承父類的日誌級別;
. 如果子類Logger組件定義了日誌級別,就不會繼承父類的日誌級別;
. 黙認情況下,子類Logger組件會繼承父類所有的Appender,把它們加入到自己的Appener;
. 如果把子類Logger組件的additivity標誌設爲false,那麼它就不會繼承父類Appender。additivity標誌
默認值爲false;

以上配置的三個Logger繼承關係示例如圖:

root Logger: 日誌級別=INFO appender清單=console

myLogger: 日誌級別=WARN appender清單=null

mySonLogger: 日誌級別=null appender清單=file

這三個Logger組件實際日誌級別和Appender如下表:

Logger組件 日誌級別 Appender清單
root Logger INFO console
myLogger WARN console(繼承)
mySonLogger WARN(繼承) file,console(繼承)

三、Appender組件

Appender組件決定將日誌信息輸出到什麼地方。支持以下目的地:
. 控制檯(Console);
. 文件(File);
. GUI組件(GUI component);
. 套接口服務器(Remote socket server);
. NT的事件記錄器(NT Event Logger);
. UNIX Syslog守護進程(Remote UNIX Syslog daemon);

一個Logger可同時對應多個Appender,示例:myLogger配置二個Appender: 一個file, 一個是console:

log4j.logger.myAppender=WARN,file,console

log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=log.txt

log4j.apender.console=org.apache.log4j.ConsoleAppender

四、Layout組件

Layout組件決定日誌輸出格式,有以下幾種類型:
. org.apache.log4j.HTMLLayout(以HTML表格形式佈局);
. org.apache.log4j.PatternLayout(可以靈活地指定佈局模式);
. org.apache.log4j.SimpleLayout(包含日誌信息的級別和信息字符串);
. org.apache.log4j.TTCCLayout(包含日誌產生的時間、線程和類別等信息);

爲名稱爲console的Appender配置SimpleLayout,代碼如下:

log4j.appender.console.layout=org.apache.log4j.SimpleLayout

輸出日誌格式如下:

WARN - This is a log message from the myLogger

爲名稱爲file的Appender配置PatternLayout,代碼如下:

log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%t %p - %m%n

輸出日誌格式如下:

THREAD-1 WARN - This is a log message from the myLogger

PatternLayout讓開發者依照ConversionPattern定義輸出格式。ConversionPattern中一些指定日誌
內容和格式的預定義符號說明如下:

符號 描述
%r 自程序開始後消耗的毫秒數
%t 表示日誌記錄請求生成的線程
%p 表示日專語句的優先級
%r 與日誌請求相關的類別名稱
%c 日誌信息所在的類名
%m%n 表示日誌信息的內容

五、Log4J的基本用法

1. 定義配置文件
Log4J支持二種配置文件格式:XML和Java屬性文件(採用“鍵=值”形式)。以下爲Java屬性文件
格式配置文件:

. 配置Logger組件

配置root Logger語法爲:log4j.rootLogger=[priority],appenderName,appenderName,...
配置自定義Logger組件語法爲:log4j.logger.loggerName=[priority],appenderName,appenderName,...

其中:priority爲日誌級別,可選值包括FATAL、ERROR、WARN、INFO、DEBUG、ALL;
appenderName指定Appender組件,可指定多個;

. 配置Appender組件

配置日誌信息輸出目的地Appender, 語法爲:
log4j.appender.appenderName=fully.ualified.name.of.appender.class
log4j.appender.appenderName.option1=value1
...
log4j.appender.appenderName.optionN=valueN

Log4J提供的Appender有以下幾種:

a. org.apache.log4j.ConsoleAppender(控制檯);
b. org.apache.log4j.FileAppender(文件);
c. org.apache.log4j.DailyRollingFileAppender(每天產生一個日誌文件);
d. org.apache.log4j.RollingFileAppender(文件大小到指定尺寸產生一個新的文件);
e. org.apache.log4j.WriteAppender(將日誌信息以流格式發送到任意指定地方);

. 配置Layout組件

配置Layout組件語法爲:
log4j.appender.appenderName.layout=fully.ualified.name.of.appender.class
log4j.appender.appenderName.layout.option1=value1
...
log4j.appender.appenderName.layout.optionN=valueN

下面爲一配置文件示例,文件名爲log4j.properties:

## LOGGERS ##

#configure root logger
log4j.rootLogger=INFO,console
#define a logger named myLogger
log4j.logger.myLogger=WARN
#define a second logger that is a child to myLogger
log4j.logger.myLogger.mySonLogger=,file

## APPENDERS ##

#define an appender named console, which is set to be a ConsoleAppender
log4j.appender.console=org.apache.log4j.ConsoleAppender

# define an appender named file, which is set to be a RollingFileAppender
log4j.appender.file=org.apache.log4j.FileAppender
log4j.appender.file.File=log.txt

## LAYOUTS ##
# assian a SimpleLayout to console appender
log4j.appender.console.layout=org.apache.log4j.SimpleLayout

# assian a PatternLayout to file appender
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%t%p-%m%n

2. 程序中使用Log4j

. 獲得日誌記錄器:

獲得rootLogger:Logger rootLogger=Logger.getRootLogger();
獲得自定義Logger:Logger myLogger = Logger.getLogger("log4j.logger.myLogger");

. 讀取日誌記錄器,配置Log4J環境;

a. BasicConfigurator.configure(): 自動快速地使用默認Log4J環境;
b. Property.configurator.configure(String configFilename): 讀取使用Java屬性格式的配置文件並配置Log4J環境;
c. DOMConfigurator.configure(String filename): 讀取XML形式的配置文件並配置LOG4J環境;

. 輸出日誌信息;

在程序代碼中需要生成日誌的地方,調用Logger的各種輸出日誌方法輸出不同級別的日誌,例如:

myLogger.debug("Thie is a log message from the " + myLogger.getName());

下面爲一使用Log4J的程序,程序名爲Test.java:

import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;

public class Test {

public static void main(String[] args) {
//Get an instance of the myLogger
Logger myLogger = Logger.getLogger("myLogger");

//Get an instance of the childLogger
Logger mySonLogger = Logger.getLogger("myLogger.mySonLogger");
//Load the proerties using the PropertyConfigurator
PropertyConfigurator.configure("log4j.properties");

//Log Messages using the Parent Logger
myLogger.debug("Thie is a log message from the " + myLogger.getName());
myLogger.info("Thie is a log message from the " + myLogger.getName());
myLogger.warn("Thie is a log message from the " + myLogger.getName());
myLogger.error("Thie is a log message from the " + myLogger.getName());
myLogger.fatal("Thie is a log message from the " + myLogger.getName());

mySonLogger.debug("Thie is a log message from the " + mySonLogger.getName());
mySonLogger.info("Thie is a log message from the " + mySonLogger.getName());
mySonLogger.warn("Thie is a log message from the " + mySonLogger.getName());
mySonLogger.error("Thie is a log message from the " + mySonLogger.getName());
mySonLogger.fatal("Thie is a log message from the " + mySonLogger.getName());
}
}

程序運行結果爲:

WARN - Thie is a log message from the myLogger
ERROR - Thie is a log message from the myLogger
FATAL - Thie is a log message from the myLogger
WARN - Thie is a log message from the myLogger.mySonLogger
ERROR - Thie is a log message from the myLogger.mySonLogger
FATAL - Thie is a log message from the myLogger.mySonLogger

另在Test.class所在的目錄下看到一個log.txt文件,內容如下:

WARN - Thie is a log message from the myLogger.mySonLogger
ERROR - Thie is a log message from the myLogger.mySonLogger
FATAL - Thie is a log message from the myLogger.mySonLogger

如將配置文件log4j.properties中語句

log4j.logger.myLogger.mySonLogger=,file

改爲

log4j.logger.myLogger.mySonLogger=,file,console

再次運行程序,結果如下:

WARN - Thie is a log message from the myLogger
ERROR - Thie is a log message from the myLogger
FATAL - Thie is a log message from the myLogger
WARN - Thie is a log message from the myLogger.mySonLogger
WARN - Thie is a log message from the myLogger.mySonLogger
ERROR - Thie is a log message from the myLogger.mySonLogger
ERROR - Thie is a log message from the myLogger.mySonLogger
FATAL - Thie is a log message from the myLogger.mySonLogger
FATAL - Thie is a log message from the myLogger.mySonLogger

mySonLogger的日誌在控制檯上輸出了二次,這是因爲mySonLogger繼承了父類console Appender,
本身又定義了一個console Appender, 因而有二個console Appender。

六、在web應用中使用Log4J

創建一個Servlet,在它初始化方法中讀取Log4J配置文件並配置Log4J環境,這個Servlet在Web應用啓
動時候被加載和初始化,然後就可在其它Web組件中獲取Logger對象並輸出日誌。

1. 創建用於配置Log4J環境的Servlet

import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.util.*;

import org.apache.log4j.PropertyConfigurator;

public class Log4JServlet extends HttpServlet {
public void init() throws ServletException {
String path = getServletContext().getRealPath("/");
//getInitParameter("propfile")方法從web.xml文件中讀取Log4J配置文件的名字"profile"。
String propfile = path + getInitParameter("propfile");
PropertyConfigurator.configure(propfile);
}
}

該Servlet在web.xml中的配置如下:
<servlet>
<servlet-name>log4jServlet</servlet-name>
<servlet-class>Log4JServlet</servlet-class>
<init-param>
<param-name>propfile</param-name>
<param-value>/WEB-INF/log4j.properties</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>

2. 在login.jsp中輸出日誌
<%@page import="org.apache.log4j.Logger"%>
<html>
<head>
<title>login</title>
</head>
<body>
<%
Logger myLogger = Logger.getLogger("myLogger");
Logger mySonLogger = Logger.getLogger("myLogger.mySonLogger");
myLogger.debug("Thie is a log message from the " + myLogger.getName());
myLogger.info("Thie is a log message from the " + myLogger.getName());
myLogger.warn("Thie is a log message from the " + myLogger.getName());
myLogger.error("Thie is a log message from the " + myLogger.getName());
myLogger.fatal("Thie is a log message from the " + myLogger.getName());

mySonLogger.debug("Thie is a log message from the " + mySonLogger.getName());
mySonLogger.info("Thie is a log message from the " + mySonLogger.getName());
mySonLogger.warn("Thie is a log message from the " + mySonLogger.getName());
mySonLogger.error("Thie is a log message from the " + mySonLogger.getName());
mySonLogger.fatal("Thie is a log message from the " + mySonLogger.getName());
%>
<br>
<form name="loginForm" method="post" action="dispatcher">
username: <input type="text" name="username">
<br>
password: <input type="text" name="password">
<br>
<input type="submit" name="submit" value="submit">
</form>
</body>
</html>

3. 發佈運行使用Log4J的web應用
1) 將Log4J的JAR文件拷貝至目錄:<WEB應用所在目錄>/WEB-INF/lib
2) 創建Log4J的配置文件log4j.properties, 存放目錄爲:<WEB應用所在目錄>/WEB-INF。內容同前面配置文件示例。
3) 編譯Log4JServlet, 存放至目錄: <WEB應用所在目錄>/WEB-INF/classes
4) 修改web.xml文件,加入以下內容:
<servlet>
<servlet-name>log4jServlet</servlet-name>
<servlet-class>Log4JServlet</servlet-class>
<init-param>
<param-name>profile</param-name>
<param-value>/WEB-INF/log4j.properties</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
5) 啓動服務器,訪問login.jsp頁面,在服務器控制檯上看到如下日誌:
WARN - Thie is a log message from the myLogger
ERROR - Thie is a log message from the myLogger
FATAL - Thie is a log message from the myLogger
WARN - Thie is a log message from the myLogger.mySonLogger
ERROR - Thie is a log message from the myLogger.mySonLogger
FATAL - Thie is a log message from the myLogger.mySonLogger

另在<WEB應用所在目錄>/WEB-INF目錄下看到一個log.txt文件,內容如下:

WARN - Thie is a log message from the myLogger.mySonLogger
ERROR - Thie is a log message from the myLogger.mySonLogger
FATAL - Thie is a log message from the myLogger.mySonLogger




1.導入包

2.在WEB-INF目錄下添加一個配置文件log4j.properties

log4j.rootLogger=DEBUG,A1,A2


# 輸出到控制檯

log4j.appender.A1=org.apache.log4j.ConsoleAppender

log4j.appender.A1.layout=org.apache.log4j.PatternLayout

log4j.appender.A1.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [/u4fe1/u606f] %m%n


# 輸出到日誌文件

log4j.appender.A2=org.apache.log4j.FileAppender

log4j.appender.A2.File=${catalina.home}/webapps/test_log4j/logging.log

log4j.appender.A2.Append=true

log4j.appender.A2.layout=org.apache.log4j.PatternLayout

log4j.appender.A2.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [/u4fe1/u606f] %m%n

3.在JSP中應用Log4j

<%@ page language="java" import="java.util.*" pageEncoding="GB18030"%>

<%@ page import="org.apache.log4j.*" %>

<html>

<head>



<title>Test Log4j</title>

</head>


<body>

Test Log4j <br>

<hr>

<%

//載入配置文件

PropertyConfigurator.configure(request.getRealPath("WEB-INF/log4j.properties"));

//取得日誌記錄器

Logger logger = Logger.getLogger(this.getClass());



logger.fatal("這是一條從index.jsp產生的fatal信息!");

logger.error("這是一條從index.jsp產生的error信息!");

logger.warn("這是一條從index.jsp產生的warn信息!");

logger.debug("這是一條從index.jsp產生的debug信息!");

logger.info("這是一條從index.jsp產生的info信息!");

%>



</body>

</html>

-----------------------

Log4j在Servlet中的應用

package com.yzk.servlet;


import java.io.IOException;

import java.io.PrintWriter;


import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import org.apache.log4j.*;

public class TestLog4j extends HttpServlet {


Logger logger = null;


public void doGet(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {


response.setContentType("text/html");

response.setCharacterEncoding("GB18030");


logger.fatal("這是一條從 TestLog4j 產生的fatal信息!");

logger.error("這是一條從 TestLog4j 產生的error信息!");

logger.warn("這是一條從 TestLog4j 產生的warn信息!");

logger.debug("這是一條從 TestLog4j 產生的debug信息!");

logger.info("這是一條從 TestLog4j 產生的info信息!");



}


public void doPost(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

this.doGet(request, response);


}


public void init() throws ServletException {

PropertyConfigurator.configure(this.getServletContext().getRealPath("WEB-INF/log4j.properties"));

logger = Logger.getLogger(this.getClass());

}


}

WEB.XML中的配置

<servlet>

<servlet-name>TestLog4j</servlet-name>

<servlet-class>com.yzk.servlet.TestLog4j</servlet-class>

</servlet>


<servlet-mapping>

<servlet-name>TestLog4j</servlet-name>

<url-pattern>/servlet/TestLog4j</url-pattern>

</servlet-mapping>

---------------------------------------

修改成在Tomcat啓動時自啓動日誌

新建一個Servlet來專門做初始化的工作

import java.io.IOException;

import java.io.PrintWriter;


import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;


import org.apache.log4j.*;


public class InitLog4j extends HttpServlet {


public void destroy() {

super.destroy(); // Just puts "destroy" string in log

}


public void doGet(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

}


public void init() throws ServletException {

String basePath = getServletContext().getRealPath("/");

String confFile = getInitParameter("log4j");

if (confFile!=null){

PropertyConfigurator.configure(basePath+confFile);

}else{

System.out.println("指定的Log4j配置文件不存在,將影響應用中的日誌記錄輸出!");

}

}

}

在web.xml中的修改配置

<servlet>

<servlet-name>TestServlet</servlet-name>

<servlet-class>TestServlet</servlet-class>

</servlet>

<servlet>

<servlet-name>InitLog4j</servlet-name>

<servlet-class>InitLog4j</servlet-class>

<init-param>

<param-name>log4j</param-name>

<param-value>WEB-INF/log4j.properties</param-value>

</init-param>

<load-on-startup>1</load-on-startup>

</servlet>


<servlet-mapping>

<servlet-name>TestServlet</servlet-name>

<url-pattern>/TestServlet</url-pattern>

</servlet-mapping>

<servlet-mapping>

<servlet-name>InitLog4j</servlet-name>

<url-pattern>/InitLog4j</url-pattern>

</servlet-mapping>

package com.yzk.servlet;


import java.io.IOException;

import java.io.PrintWriter;


import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import org.apache.log4j.*;

public class TestLog4j extends HttpServlet {


Logger logger = null;


public void doGet(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {


response.setContentType("text/html");

response.setCharacterEncoding("GB18030");


logger.fatal("這是一條從 TestLog4j 產生的fatal信息!");

logger.error("這是一條從 TestLog4j 產生的error信息!");

logger.warn("這是一條從 TestLog4j 產生的warn信息!");

logger.debug("這是一條從 TestLog4j 產生的debug信息!");

logger.info("這是一條從 TestLog4j 產生的info信息!");


}


public void doPost(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

this.doGet(request, response);


}


public void init() throws ServletException {

//PropertyConfigurator.configure(this.getServletContext().getRealPath("WEB-INF/log4j.properties"));

logger = Logger.getLogger(this.getClass());

}


}
http://blog.donews.com/dyh/archive/2005/05/11/374589.aspx 本文
http://www.cjsdn.net/post/view?bid=51&id=125515&sty=1 log4j使用大全
http://hi.baidu.com/my3495/blog/item/625e5390d7ac898ba877a472.html
http://hi.baidu.com/hxzon/blog/item/901fcfea1f57b1d5d439c92e.html
http://hi.baidu.com/yzksoso/blog/item/9cdc82449e84514b500ffe17.html

 

(轉摘自:http://blog.csdn.net/pingfanhuan/archive/2008/12/30/3634560.aspx)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章