一、apache log4j project website:
http://logging.apache.org/log4j/docs/
二、jar file download:(log4j-1.2.14.jar)
http://logging.apache.org/site/binindex.cgi
三、做一個簡單的登入頁面。
<form action="/loggerTest/goServlet">
name:<input type="text" name="name"><br>
password:<input type="password" name="password"><br>
<input type="submit" value="submit">
</form>
四、web.xml
<servlet>
<servlet-name>log</servlet-name>
<servlet-class>servlet.LogDemo</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>log</servlet-name>
<url-pattern>/goServlet</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
五、Servlet(放於WEB-INF/classes/LogDemo.class)
package servlet;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Properties;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.log4j.BasicConfigurator;
import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;
public class LogDemo extends HttpServlet{
static Logger log = Logger.getLogger(LogDemo.class);
protected void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
res.setContentType("text/html");
PrintWriter out = res.getWriter();
//Log4j預設的設定檔
BasicConfigurator.configure();
//讀 log4j.properties
Properties p = new Properties();
p.load(LogDemo.class.getClassLoader().getResourceAsStream("log4j.properties"));
PropertyConfigurator.configure(p);
log.info("start......");
out.print("youname is "+req.getParameter("name"));
log.info("name is"+req.getParameter("name"));
out.print("<br>your passwrod is"+req.getParameter("password"));
log.info("password is"+req.getParameter("password"));
log.info("end.....");
}
}
六、log4j.properties(放於WEB-INF/classes/log4j.properties)
#level=info, 兩種輸出 分別為 A1,A2
log4j.rootLogger=info ,A1,A2
# A1 is set to be a ConsoleAppender.
log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=[%d{yy/MM/dd HH:mm:ss:SSS}][%C-%M] %m%n
# A2 is set to be a file
log4j.appender.A2=org.apache.log4j.DailyRollingFileAppender
log4j.appender.A2.layout=org.apache.log4j.PatternLayout
log4j.appender.A2.layout.ConversionPattern=[%d{HH:mm:ss:SSS}][%C-%M] %m%n
log4j.appender.A2.File=C:/temp/testLog.log
七、說明
(1)RootLogger:
log4j.rootCategory = [level] , appenderName, appenderName, ...
level:DEBUG、INFO、WARN、ERROR、FATAL(ALL、OFF)
(2)log4j.appender.XXX
WriterAppender----ConsoleAppender(控制台)
----FileAppender(文件)---DailyRollingFileAppender(日誌文件)
---RollingFileAppender(文件大小到達指定尺寸的時候產生一個新的文件)
(3)log4j.appender.XXX.layout
* org.apache.log4j.HTMLLayout(HTML表格形式)
* org.apache.log4j.PatternLayout(可以指定佈局模式)
* org.apache.log4j.SimpleLayout(包含日誌訊息的級別和訊息字串)
* org.apache.log4j.TTCCLayout(包含日誌產生的時間、執行緒、類別等等訊息)
(4)PatternLayout參數說明
* %c 輸出日誌訊息所屬的類別的全名
* %d 輸出日誌時間點的日期或時間,指定格式的方式:%d{yyyy/MM/dd HH:mm:ss}。
* %l 輸出日誌事件的發生位置,即輸出日誌訊息的語句處於它所在的類別的第幾行。
* %m 輸出代碼中指定的訊息,如log(message)中的message。
* %n 輸出一個列尾符號。
* %p 輸出優先階層,即DEBUG,INFO,WARN,ERROR,FATAL。如果是調用debug()輸出的,則為DEBUG,依此類推。
* %r 輸出自應用啟動到輸出該日誌訊息所耗費的毫秒數。
* %t 輸出產生該日誌事件的線程名。
* %r 輸出自應用啟動到輸出該日誌訊息所耗費的毫秒數。
* %f 輸出日誌訊息所屬的類別的類別名。