String uri = request.getRequestURI();
String contextPath = request.getContextPath();
if (StringUtils.length(contextPath) > 0) {
contextPath = StringUtils.substring(uri, contextPath.length());
}
TbLogging tbLogging = (TbLogging) request.getAttribute(LOGGER_ENTITY);
//获取请求错误码
int status = response.getStatus();
//当前时间
long currentTime = System.currentTimeMillis();
//请求开始时间
long time = Long.valueOf(request.getAttribute(LOGGER_SEND_TIME).toString());
//获取本次请求日志实体
tbLogging.setState(status+“”);
//设置请求时间差
tbLogging.setLong_time((currentTime - time)+“”);
tbLogging.setEnd_time(DateUtil.date(currentTime));
tbLogging.setCreate_time(DateUtil.date(currentTime));
// Long longId = IdUtil.createSnowflake(1, 1).nextId();
Long longId = incr(redisKey);
tbLogging.setId(longId.intValue());
if(tbLogging.getClass_name().indexOf(“TbLoggingController”) == -1){
if (contextPath.indexOf(“search_”) == -1
&& !tbLogging.getMethod_name().startsWith(“search”)
&& !tbLogging.getMethod_name().startsWith(“get”)
&& !tbLogging.getMethod_name().startsWith(“query”)
&& !tbLogging.getMethod_name().startsWith(“find”)
&& !tbLogging.getMethod_name().startsWith(“select”)
&& !tbLogging.getMethod_name().equals(“index”)) {
//执行将日志写入数据库,可以根据实际需求进行保存
// sysLogRepo.save(sysLog);
tbLoggingMapper.insertTbLogging(tbLogging);
}else {
TbLoggingSelect select = new TbLoggingSelect();
//把tbLogging的值给select
BeanUtils.copyProperties(select,tbLogging);
tbLoggingSelectMapper.insertTbLoggingSelect(select);
}
}
}catch (Exception e){
LOGGER.info(“日志添加失败”);
}
}
public int difference(Date nowDate, String decrypted){
return Math.abs((int)(nowDate.getTime()-Long.valueOf(decrypted))/1000);
}
/**
-
@Title: getRemoteHost
-
@Description: 获取Ip地址
-
@return: String
-
@version V1.0
*/
public String getRemoteHost(HttpServletRequest request) {
String ip = request.getHeader(“x-forwarded-for”);
if (ip == null || ip.length() == 0 || “unknown”.equalsIgnoreCase(ip)) {
ip = request.getHeader(“Proxy-Client-IP”);
}
if (ip == null || ip.length() == 0 || “unknown”.equalsIgnoreCase(ip)) {
ip = request.getHeader(“WL-Proxy-Client-IP”);
}
if (ip == null || ip.length() == 0 || “unknown”.equalsIgnoreCase(ip)) {
ip = request.getHeader(“HTTP_CLIENT_IP”);
}
if (ip == null || ip.length() == 0 || “unknown”.equalsIgnoreCase(ip)) {
ip = request.getHeader(“HTTP_X_FORWARDED_FOR”);
}
if (ip == null || ip.length() == 0 || “unknown”.equalsIgnoreCase(ip)) {
ip = request.getRemoteAddr();
}
return ip.equals(“0:0:0:0:0:0:0:1”) ? “127.0.0.1” : ip;
}
}
以下操作用于查询
mapper.xml
/**
-
用于分表分页查询
-
@param map
-
@return
*/
List pageListTbLoggingSelectByObj(Map<String,Object> map);
int pageListTbLoggingSelectByObjCount(Map<String,Object> map);
SELECT
FROM tb_logging_select
is_delete = 0
AND date_format(create_time,‘%Y-%m-%d’) = #{create_time}
AND id > #{maxId}
AND id < #{minId}
order by id asc
order by id desc
order by id desc
LIMIT #{pageSize}
SELECT count(1)
FROM tb_logging_select
is_delete = 0
AND date_format(create_time,‘%Y-%m-%d’) = #{create_time}
/**
-
用于分表分页查询
-
@param map
-
@return
*/
List pageListTbLoggingByObj(Map<String,Object> map);
int pageListTbLoggingByObjCount(Map<String,Object> map);
SELECT
FROM tb_logging
is_delete = 0
AND date_format(create_time,‘%Y-%m-%d’) = #{create_time}
AND id > #{maxId}
AND id < #{minId}
order by id asc
order by id desc
order by id desc
LIMIT #{pageSize}
SELECT count(1)
FROM tb_logging
is_delete = 0
AND date_format(create_time,‘%Y-%m-%d’) = #{create_time}
service
package web.service.logging;
import com.web.common.util.PropertyValueChangeUtil;
import com.web.common.util.web.BeanRefUtil;
import com.web.entity.TbLogging;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import web.dao.hsdao.TbLoggingMapper;
import web.dao.hsdao.TbLoggingSelectMapper;
import web.util.ResultUtils;
import java.util.*;
/**
-
项目名称:
-
类 名 称:TbLoggingService
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Java)
写在最后
为了这次面试,也收集了很多的面试题!
以下是部分面试题截图
一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!
AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算
QU62X56U-1712351620975)]
写在最后
为了这次面试,也收集了很多的面试题!
以下是部分面试题截图
[外链图片转存中…(img-L5HzXbmD-1712351620975)]
一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!
AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算