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)。
spring配置log4j