第一步:首先建立一個WEBproject,去log4j官網下log4j的JAR包導入到project的lib檔案夾下
第二步:在src檔案夾下建一個log4j.properties 檔案,檔案命名能夠由自己,僅僅是記載入時候和這裡名字一緻即可;
log4j.properties 裡邊的内容例如以下:
### set log levels ###
log4j.rootLogger = debug,stdout,E
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 %c{1}:%L - %m%n
log4j.appender.E= org.apache.log4j.DailyRollingFileAppender
log4j.appender.E.File =${catalina.home}/logs/log_
log4j.appender.E.DatePattern=yyyy-MM-dd'.log'
log4j.appender.E.Threshold =DEBUG
log4j.appender.E.layout = org.apache.log4j.PatternLayout
log4j.appender.E.layout.ConversionPattern =%-d{yyyy-MM-dd HH\:mm\:ss}[%c] [%t\:%r] - [%p] %m%n
能夠單指定日志輸出到某個檔案:
log4j.logger.pay-log=Info,pay-log
log4j.appender.pay-log=org.apache.log4j.DailyRollingFileAppender
log4j.appender.pay-log.File=D:/logs/pay-log.log
log4j.appender.pay-log.DatePattern='.'yyyy-MM-dd
log4j.appender.pay-log.Threshold =DEBUG
log4j.appender.pay-log.layout=org.apache.log4j.PatternLayout
log4j.appender.pay-log.layout.ConversionPattern =%-d{yyyy-MM-dd HH\:mm\:ss}[%c] [%t\:%r] - [%p] %m%n
解釋下幾個經常使用的,其他的在具體的,請自己去網上查找資料:
log4j.rootLogger = debug,stdout,E 意思是父類logger 會以比debug 級别高的日志輸出到 stdout,E 兩個地方,子類也一樣
stdout是一個日志記錄配置,它的意思是把日志輸出到控制台上,也就是這個配置屬性--->log4j.appender.stdout.Target = System.out ,到時候到了生産上能夠注解掉就能夠了。
E是一個日志記錄配置。它是把日志檔案記錄到檔案裡去,log4j.appender.E.File =${catalina.home}/logs/log_ 是放日志檔案的路徑,當中${catalina.home}是容器的路徑
log4j.appender.E= org.apache.log4j.DailyRollingFileAppender 這個屬性配置是一天産生一個新的日志檔案(還有其他配置方式,這個是用的最多的)
log4j.appender.E.DatePattern=yyyy-MM-dd'.log' 這個屬性是以時間為名字的檔案日志。形式例如以下:
log_2011-06-26.log,log_2011-06-28.log,隻是第一個生成的日志檔案的名字是:log_
log4j.appender.E.layout.ConversionPattern =%-d{yyyy-MM-dd HH\:mm\:ss}[%c] [%t\:%r] - [%p] %m%n 這個是輸出日志内容格式,具體情況請自己查閱資料。
log4j.appender.E.Threshold =DEBUG 這個是輸出日志級别(意思是僅僅輸出比DEBUG級别高的日志資訊);
#appender名字定義
log4j.rootLogger=INFO,FILE,consoleAppender,RollingFile,MAIL,DailyRollingFile,DATABASE
log4j.addivity.org.apache=true
#配置日志資訊輸出目的地
#log4j.appender.appenderName = fully.qualified.name.of.appender.class
#(如:log4j.appender.RollingFile = org.apache.log4j.RollingFileAppender)
# 1.org.apache.log4j.ConsoleAppender(控制台)
# 2.org.apache.log4j.FileAppender(檔案)
# 3.org.apache.log4j.DailyRollingFileAppender(每天産生一個日志檔案)
# 4.org.apache.log4j.RollingFileAppender(檔案大小到達指定尺寸的時候産生一個新的檔案)
# 5.org.apache.log4j.WriterAppender(将日志資訊以流格式發送到随意指定的地方)
#配置日志資訊的格式
#log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class
#(如:log4j.appender.RollingFile.layout = org.apache.log4j.HTMLLayout)
# 1.org.apache.log4j.HTMLLayout(以HTML表格形式布局)。
# 2.org.apache.log4j.PatternLayout(能夠靈活地指定布局模式),
# 3.org.apache.log4j.SimpleLayout(包括日志資訊的級别和資訊字元串),
# 4.org.apache.log4j.TTCCLayout(包括日志産生的時間、線程、類别等等資訊)
#日記記錄的優先級:priority,優先級由高到低分為
# OFF ,FATAL ,ERROR ,WARN ,INFO ,DEBUG ,ALL。
# Log4j建議僅僅使用FATAL ,ERROR ,WARN ,INFO ,DEBUG這五個級别。
# ERROR 為嚴重錯誤 主要是程式的錯誤
# WARN 為一般警告,比方session丢失
# INFO 為一般要顯示的資訊。比方登入登出
# DEBUG 為程式的調試資訊
#輸出格式:layout中的參數都以%開始,後面不同的參數代表不同的格式化資訊(參數按字母表順序列出):
# %c 輸出所屬類的全名,可在改動為 %d{Num} ,Num類名輸出的維(如:"org.apache.elathen.ClassName",%C{2}将輸出elathen.ClassName)
# %d 輸出日志時間其格式為 %d{yyyy-MM-dd HH:mm:ss,SSS},可指定格式 如 %d{HH:mm:ss}
# %l 輸出日志事件發生位置,包含類目名、發生線程,在代碼中的行數
# %n 換行符
# %m 輸出代碼指定資訊,如info(“message”),輸出message
# %p 輸出優先級,即 FATAL ,ERROR 等
# %r 輸出從啟動到顯示該log資訊所耗費的毫秒數
# %t 輸出産生該日志事件的線程名
#ConsoleAppender,控制台輸出
#FileAppender,檔案日志輸出
#SMTPAppender。發郵件輸出日志
#SocketAppender,Socket日志
#NTEventLogAppender,Window NT日志
#SyslogAppender。
#JMSAppender,
#AsyncAppender,
#NullAppender
第三步:配置容器起動時候載入log4j配置檔案:
建立一個servlet内容例如以下:
package com.tchzt.logTest;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import org.apache.log4j.PropertyConfigurator;
public class Log4jInit extends HttpServlet {
private static final long serialVersionUID = 1L;
public void destroy() {
super.destroy();
}
public Log4jInit() {
super();
/**
* Initialization of the servlet. <br>
*
* @throws ServletException if an error occurs
*/
public void init() throws ServletException {
String file =this.getInitParameter("log4j");//從web.xml配置讀取,名字一定要和web.xml配置一緻
if(file != null){
PropertyConfigurator.configure(file);
}
}
web.xml配置:
<servlet>
<servlet-name>Log4jInit</servlet-name>
<servlet-class>com.tchzt.logTest.Log4jInit</servlet-class>
<init-param>
<param-name>log4j</param-name>//這個是名字是下邊路徑配置的辨別(好像KEY一樣)
<param-value>/WEB-INF/classes/log4j.properties</param-value>//這是容器初始化時候載入log4j配置檔案的路徑(這好像一個value);
</init-param>
</servlet>
好了基本上配置完了開始下測試了:
測試類:建立一個servlet内容例如以下:
import java.io.IOException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.log4j.Logger;
public class Test extends HttpServlet {
* The doGet method of the servlet. <br>
* This method is called when a form has its tag value method equals to get.
*
* @param request the request send by the client to the server
* @param response the response send by the server to the client
* @throws ServletException if an error occurred
* @throws IOException if an error occurred
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//假設直接 className.class 日志輸出到全局的 即rootLogger 指定的檔案裡
Logger logger = Logger.getLogger(Test.class.getName());
//假設指定logger名字。則是把日志,輸出到pay-log 指定的日志檔案裡去
Logger logger = Logger.getLogger(“pay-log”);
MyLog4j.getSomething();
System.out.println("================97987==============");
logger.info("日志資訊開始!");
logger.info("日志資訊結束!");
try {
Integer.parseInt("a");
} catch (NumberFormatException e) {
logger.error("解析數字出現異常",e);
e.printStackTrace();
* The doPost method of the servlet. <br>
* This method is called when a form has its tag value method equals to post.
public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
this.doGet(request, response);
這個servlet 的web.xml配置例如以下:
<servlet-name>Test</servlet-name>
<servlet-class>com.tchzt.logTest.Test</servlet-class>
</servlet>