采用线程池保存日志及优化

This commit is contained in:
thinkgem
2019-11-06 00:33:06 +08:00
parent 345b21c102
commit d07d90c4ab
2 changed files with 9 additions and 8 deletions

View File

@@ -15,6 +15,7 @@ import org.springframework.web.servlet.ModelAndView;
import com.jeesite.common.lang.ByteUtils;
import com.jeesite.common.lang.DateUtils;
import com.jeesite.common.lang.TimeUtils;
import com.jeesite.common.network.IpUtils;
import com.jeesite.common.service.BaseService;
import com.jeesite.modules.sys.utils.LogUtils;
import com.jeesite.modules.sys.utils.UserUtils;
@@ -35,8 +36,8 @@ public class LogInterceptor extends BaseService implements HandlerInterceptor {
long beginTime = System.currentTimeMillis();// 1、开始时间
startTimeThreadLocal.set(beginTime); // 线程绑定变量(该数据只有当前请求的线程可见)
if (logger.isDebugEnabled()){
logger.debug("开始计时: {} URI: {}", new SimpleDateFormat("hh:mm:ss.SSS")
.format(beginTime), request.getRequestURI());
logger.debug("开始计时: {} URI: {} IP: {}", new SimpleDateFormat("hh:mm:ss.SSS")
.format(beginTime), request.getRequestURI(), IpUtils.getRemoteAddr(request));
}
return true;
}
@@ -52,9 +53,9 @@ public class LogInterceptor extends BaseService implements HandlerInterceptor {
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response,
Object handler, Exception ex) throws Exception {
long beginTime = startTimeThreadLocal.get();// 得到线程绑定的局部变量(开始时间)
Long beginTime = startTimeThreadLocal.get();// 得到线程绑定的局部变量(开始时间)
long endTime = System.currentTimeMillis(); // 2、结束时间
long executeTime = endTime - beginTime; // 3、获取执行时间
long executeTime = beginTime == null ? 0 : endTime - beginTime; // 3、获取执行时间
startTimeThreadLocal.remove(); // 用完之后销毁线程变量数据
// 保存日志

View File

@@ -45,7 +45,7 @@ import eu.bitwalker.useragentutils.UserAgent;
*/
public class LogUtils {
//采用线程池优化性能
// 采用线程池优化性能
private static ExecutorService logThreadPool = new ThreadPoolExecutor(5, 20,
60L, TimeUnit.SECONDS, new LinkedBlockingQueue<>(),
new DefaultThreadFactory("log-save"));
@@ -113,19 +113,19 @@ public class LogUtils {
}
// 异步保存日志
logThreadPool.submit(new SaveLogTask(log, handler, request.getContextPath(), throwable));
logThreadPool.submit(new SaveLogThread(log, handler, request.getContextPath(), throwable));
}
/**
* 保存日志线程
*/
public static class SaveLogTask extends Thread{
public static class SaveLogThread extends Thread{
private Log log;
private Object handler;
private String contextPath;
private Throwable throwable;
public SaveLogTask(Log log, Object handler, String contextPath, Throwable throwable){
public SaveLogThread(Log log, Object handler, String contextPath, Throwable throwable){
this.log = log;
this.handler = handler;
this.contextPath = contextPath;