LOG4J 的配置


公司啟動全國支票影像系統,有這樣一個功能是和消息中間件打交道,需要記錄每一個報文出錯情況,因為方便后期開發人員的調試,我選用了log4j作為日志記錄,好了廢話不多說了!

第一步:首先建立一個WEB工程,去log4j官網下log4j的JAR包導入到工程的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

解釋下幾個常用的,其它的在詳細的,請自己去網上查找資料:
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級別高的日志信息);

第三步:配置容器起動時候加載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內容如下:

package com.tchzt.logTest;

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.Logger;

public class Test extends HttpServlet {

 private static final long serialVersionUID = 1L;

 /**
  * 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 {
  Logger logger = Logger.getLogger(Test.class.getName());
  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.
  * 
  * @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 doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
  this.doGet(request, response);
 }

}


這個servlet 的web.xml配置如下:
<servlet>
    <servlet-name>Test</servlet-name>
    <servlet-class>com.tchzt.logTest.Test</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>Test</servlet-name>
    <url-pattern>/servlet/Test</url-pattern>
  </servlet-mapping>


啟動容器:輸出URL:http://localhost:8080/Log4jWebTest/servlet/Test
第二次關閉容器,修改系統時間;在啟動容器,最后生成日志文件如下:


免責聲明!

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



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