首页 > 代码库 > spring配置log4j

spring配置log4j

1.配置基本的springMVC+hibernate环境。网上有很多这种例子。

2.需要使用log4j,首先就要在web.xml中配置log4j.方法有两种:

         1.我们可以自己写一个servlet,服务器启动的时候自动加载,让该servlet加载log4j的配置文件(properties或者xml文件),这种方法百度百科讲log4j有详细说明。

         2.加入spring自带的关于log4j的监听器。个人推荐使用第二种方法。

          在web.xml文件中的配置为:

          

        <!-- Spring的log4j监听器****************************************** -->
	<!-- 设置log4j配置文件路径 -->
	<context-param>
		<param-name>log4jConfigLocation</param-name>
		<param-value><span style="color:#ff0000;">WEB-INF/log4j.properties</span></param-value>
	</context-param>
	<!-- 开一条watchdog线程每60秒扫描一下配置文件的变化 -->
	<context-param>
		<param-name>log4jRefreshInterval</param-name>
		<param-value>600000</param-value>
	</context-param>
	<listener>
		<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
	</listener> 
	<!-- ************************************************** -->
3. 但是为了后期配置log4j的便利,这里还需药设置一个webAppRootKey,所以还需在web.xml文件中加入这样一段,后面会对其进行解释:

<context-param>
	<param-name>webAppRootKey</param-name>
	<param-value<span style="color:#ff0000;">>myWebApp</span>.root</param-value>
</context-param>


4.现在服务器启动就能够进行日志监听了,但是我们还得进行log4j的详细配置,这里使用的是一个log4j.properties文件。放在WEB-INF文件夹下。其内容为:

#log4j.rootLogger = [ level ] , appenderName, appenderName, ...
log4j.rootLogger = ALL, console,allR

#branch logger
log4j.logger.InfoLogger = INFO,infoR
log4j.logger.ErrorLogger = ERROR,errorR

log4j.logger.org.springframework=ERROR
log4j.logger.org.hibernate.ps.PreparedStatementCache=WARN
log4j.logger.org.hibernate=DEBUG

#console 
log4j.appender.console = org.apache.log4j.ConsoleAppender
log4j.appender.console.layout = org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [%c]-[%p] %m%n

#infoR
log4j.appender.infoR = org.apache.log4j.RollingFileAppender
log4j.appender.infoR.File =${<span style="color:#ff0000;">myWebApp</span><span style="font-family: Arial, Helvetica, sans-serif;">.root}/logs/info/infoLog.txt</span>log4j.appender.infoR.MaxFileSize = 50MB
log4j.appender.infoR.MaxBackupIndex = 1000
log4j.appender.infoR.layout = org.apache.log4j.PatternLayout
log4j.appender.infoR.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} [%c]-[%p] - %m%n

#errorR
log4j.appender.errorR = org.apache.log4j.RollingFileAppender
log4j.appender.errorR.File =${<span style="color:#ff0000;">myWebApp</span>.root}/logs/error/errorLog.txt
log4j.appender.errorR.MaxFileSize = 50MB
log4j.appender.errorR.MaxBackupIndex = 1000
log4j.appender.errorR.layout = org.apache.log4j.PatternLayout
log4j.appender.errorR.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} [%c]-[%p] - %m%n

#allR
log4j.appender.allR = org.apache.log4j.RollingFileAppender
log4j.appender.allR.File =${<span style="color:#ff0000;">myWebApp</span>.root}/logs/all/allLog.txt
log4j.appender.allR.MaxFileSize = 500MB
log4j.appender.allR.MaxBackupIndex = 1000
log4j.appender.allR.layout = org.apache.log4j.PatternLayout
log4j.appender.allR.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} [%c]-[%p] - %m%n
说明:

   在这个配置文件中,如果有不懂其中内容的同学,情查看百度百科,对log4j.properties的配置有详细的说明.

   我在配置文件中指明,对于所有的日志信息都回打印到控制台,同时输出到/logs/all/allLog.txt文件中。

   配置文件中除了一个根记录器(rootLogger),我还配了两个分支(InfoLogger和ErrorLogger),这三个logger的内容分别写到,与对应的日志文件对应为:

    rootLogger  -->    /logs/all/allLog.txt

    InfoLogger   -->       /logs/info/infoLog.txt

    ErrorLogger  -->      /logs/error/errorLog.txt
   其中infoLogger,和ErrorLogger因为是继承于rootLogger,所以他们的内容也会同时输出到/logs/all/allLog.txt文件中

  在该配置文件中myWebApp.root就是我们在第三步中配置的内容。名字可以自己更改。在第三步配置webAppRootKey还有一个作用就是避免在同一个web容器中(例如tomcat)有多个web项目而产生混乱。


5.如果是用eclipse进行开发,还需要在WebContenet(如果是myeclipse就是WebRoot)下建立好文件结构:


6.此时就可以启动该项目了。

启动后到服务器下找到该项目,在该项目下可以发现有一个logs文件夹,但是只有allLog.txt中有内容,其余的两个文件是空的。因为我errorLog和infoLog都不是从根记录器来的,这两个文件是通过调用errorLog和infoLog才会记录内容的。下面就来看一下例子。

    1.在src下新建util包,同时在util包下面新建LogRecord类:

    

package utils;

import org.apache.log4j.Logger;
public class LogRecord {
	private static Logger info = Logger.getLogger("<span style="color:#ff0000;">InfoLogger</span>");
	private static Logger error = Logger.getLogger("<span style="color:#ff0000;">ErrorLogger</span>");
	public LogRecord(){}
	
	/**
	 * 一般情况记录到/logs/infoLog.txt
	 */
	public static void info(String infomation){
		info.info(infomation);
	}
	
	/**
	 * 错误信息记录到/logs/errorLog.txt
	 */
	public static void error(String infomation){
		error.error(infomation);
	}
}
在这个工具类中,我分别载入了info记录器和error记录器。只要通过这两个记录器记录日志,那么日志肯定就会根据log4j.properties的配置,写入到/logs/info/infoLog.txt和/logs/error/errorLog.txt中。下面来写一个servlet调用这个工具类。

package servlet;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class servletDemo1 extends HttpServlet {
    public servletDemo1() {
        super();
    }

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doPost(request, response);
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//向控制台和/logs/info/infoLog.txt中写内容
		LogRecord.info("用户登录成功!");
		
		//向控制台和/logs/error/errorLog.txt中写内容
		LogRecord.error("这个用户长得太丑了!");
	}

}

现在假设我的项目名称为webApp.那么此时通过浏览器访问http://localhost:8080/webApp/servletDemo1

现在再到/logs/文件夹下面去看,可以看到info文件和error文件中都已经有内容了。

在开发过程中,如果需要有日志记录,就可以直接调用静态方法LogRecord.info(String str)或者LogRecord.error(String str)。