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>WEB-INF/log4j.properties</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>
- <!-- ************************************************** -->
- <context-param>
- <param-name>webAppRootKey</param-name>
- <param-value>myWebApp.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 =${myWebApp.root}/logs/info/infoLog.txt
- 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 =${myWebApp.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 =${myWebApp.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("InfoLogger");
- private static Logger error = Logger.getLogger("ErrorLogger");
- 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);
- }
- }
- 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)。