博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
log4j 将web请求 日志输入到数据库
阅读量:4992 次
发布时间:2019-06-12

本文共 3017 字,大约阅读时间需要 10 分钟。

最近做的项目出现了某些功能打开太慢的问题,为了方便统计并优化,想到可以在系统中加个拦截器,记录每个请求的处理时间,并打印耗时,结合log4j ,将日志如初到数据库,方便进行统计。

 

首先创建自己的拦截器:

 

package com.tera.sys.filter;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.apache.log4j.Logger;import org.springframework.core.NamedThreadLocal;import org.springframework.web.servlet.HandlerInterceptor;import org.springframework.web.servlet.ModelAndView;import org.apache.log4j.MDC;/** * 日志拦截器 * @author sun * @version 2018-9-21 */public class LogInterceptor  implements HandlerInterceptor {    private final static Logger logger = Logger.getLogger("LogInterceptor");    private static final ThreadLocal
startTimeThreadLocal = new NamedThreadLocal
("ThreadLocal StartTime"); @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { if (logger.isDebugEnabled()){ long beginTime = System.currentTimeMillis();//1、开始时间 startTimeThreadLocal.set(beginTime); //线程绑定变量(该数据只有当前请求的线程可见) } return true; } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { if (modelAndView != null){ logger.info("ViewName: " + modelAndView.getViewName()); } } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { if (logger.isDebugEnabled()){ long beginTime = startTimeThreadLocal.get();//得到线程绑定的局部变量(开始时间) long endTime = System.currentTimeMillis(); //2、结束时间 MDC.put("url",request.getRequestURI()); logger.debug( endTime - beginTime ); } }}

  在sping 配置文件中新增如下配置:

               
              

说明:

  1)mvc:mapping 拦截器路径配置

  2)mvc:exclude-mapping 拦截器不需要拦截的路径

 

 如果提示没有mvc,则需要在beans 里增加mvc,我的配置如下:

  红色 部分即为mvc配置。

下面配置log4j.properties

 

log4j.logger.LogInterceptor = DEBUG, LogInterceptor# Define the DB appenderlog4j.appender.LogInterceptor=org.apache.log4j.jdbc.JDBCAppender# Set JDBC URLlog4j.appender.LogInterceptor.URL=jdbc:mysql://127.0.0.1:3306/test# Set Database Driverlog4j.appender.LogInterceptor.driver=com.mysql.jdbc.Driver# Set database user name and passwordlog4j.appender.LogInterceptor.user=rootlog4j.appender.LogInterceptor.password=root# Set the SQL statement to be executed.log4j.appender.LogInterceptor.sql=INSERT INTO %d{yyyyMM}LOGS  VALUES('%X{url}','%d{yyyy-MM-dd HH:mm:ss}','%C','%p','%m')# Define the layout for file appenderlog4j.appender.LogInterceptor.layout=org.apache.log4j.PatternLayout

其中表名是按月分的变量,例如201809LOGS,后面的 '%X{url}'是获取拦截器中定义的url,对应

 

MDC.put("url",request.getRequestURI());

转载于:https://www.cnblogs.com/arcticBoiledWater/p/9700293.html

你可能感兴趣的文章
仿迅雷播放器教程 -- 基于VLC的MFC播放器 (6)
查看>>
Python之数据结构基础
查看>>
WPF:如何高速更新Model中的属性
查看>>
hdu 1010(DFS) 骨头的诱惑
查看>>
(转)Android SDK Manager国内无法更新的解决方案
查看>>
SQL语句修改表
查看>>
ubutnu 挂载磁盘
查看>>
continue 和 break的实例
查看>>
Java学习笔记()ArrayList
查看>>
redis缓存清除
查看>>
django Highcharts制作图表--显示CPU使用率
查看>>
文本处理 tr ,col,join,paste
查看>>
oracle权限
查看>>
java方法的虚分派和方法表
查看>>
【转】字符串和浮点数格式化输出小结
查看>>
Android开发 - Retrofit 2 使用自签名的HTTPS证书进行API请求
查看>>
对测试人员或开发人员来说相互沟通有多重要?
查看>>
解释器、编译器以及他们之间的差别。
查看>>
MongoDB的快速手动安装
查看>>
JS制作简单的日历控件【JS Date对象操作实例演示】
查看>>