servlet配置log4J


用Spring配置Log4j比較簡單。但是servlet配置的時候會因為項目啟動后沒加載log4j而報錯

這篇隨筆就主要處理這些。

第一步:導入jar包,在src目錄下創建src/log4J.properties 文件。

文件內容如下:

 ###設置###
 log4j.rootLogger = debug,stdout,D,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 = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n

### 輸出DEBUG 級別以上的日志到=E://logs/error.log ###
log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File = E://logs/log.log
log4j.appender.D.Append = true
log4j.appender.D.Threshold = DEBUG 
log4j.appender.D.layout = org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n

### 輸出ERROR 級別以上的日志到=E://logs/error.log ###
log4j.appender.E = org.apache.log4j.DailyRollingFileAppender
log4j.appender.E.File =E\://logs/error.log 
log4j.appender.E.Append = true
log4j.appender.E.Threshold = ERROR 
log4j.appender.E.layout = org.apache.log4j.PatternLayout
log4j.appender.E.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n

該配置可以在控制台或者后台文件中輸出日志記錄。info,error,debug都可以輸出。導出文件路徑自己可以修改,格式內容自己也可以修改。

上方格式輸出如下:[INFO ] 2017-10-25 15:21:24,025 method:com.dhh.day1.HelloServlet.doGet(HelloServlet.java:29)

在類中創建日志對象如下:

    public  Logger log=Logger.getLogger(HelloServlet.class);

 

但是單單靠這些會產生一個錯誤:

log4j:WARN No appenders could be found for logger (com.dhh.day1.HelloServlet).
log4j:WARN Please initialize the log4j system properly.

 

第二步:這個錯誤的核心在於項目啟動之后log4j並沒有與配置文件產生關聯,所以這個時候需要再servlet增加配置信息讓log4J加載

代碼如下如下:

 <servlet>  
    <servlet-name>log4j-init</servlet-name>  
    <servlet-class>com.dhh.Util.Log4jInit</servlet-class>  
    <init-param>  
        <param-name>log4j-init-file</param-name>  
        <param-value>\WEB-INF\classes\log4j.properties</param-value>  
    </init-param>  
    <load-on-startup>1</load-on-startup>  
</servlet>  

加載的類文件是一個servlet:核心在於log4j的一個靜態類方法

PropertyConfigurator.configure(String URL); 
package com.dhh.Util;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.log4j.PropertyConfigurator;

public class Log4jInit extends HttpServlet {  
    private static final long serialVersionUID = 1L;  
  
    @Override  
    protected void doGet(HttpServletRequest req, HttpServletResponse resp)  
            throws ServletException, IOException {  
        // TODO Auto-generated method stub  
        super.doGet(req, resp);  
    }  
  
    @Override  
    protected void doPost(HttpServletRequest req, HttpServletResponse resp)  
            throws ServletException, IOException {  
        // TODO Auto-generated method stub  
        super.doPost(req, resp);  
    }  
  
    @Override  
    public void init() throws ServletException {  
        // TODO Auto-generated method stub  
        super.init();  
        String prefix = getServletContext().getRealPath("/");  
        String file = getInitParameter("log4j-init-file");  
        if (file != null) {  
            System.out.println("read log4j.properties:"+prefix + file);  
            PropertyConfigurator.configure(prefix + file);  
        }  
    }  
  
}  

 

這樣servlet配置log4J才算完成。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM