项目实训—日志

登录日志

实体类:

public class LoginLog {

    private Long id;

    private String account;

    private String loginIp;

    @JsonFormat(shape=JsonFormat.Shape.STRING, pattern="yyyy-MM-dd HH:mm:ss", timezone="GMT+8")
    private Date loginTime;

    private String address;


    private String lat;

    private String lng;

}

登录日志有关的一些方法:

@Autowired
	private LoginLogMapper<LoginLog, LoginLogQuery> loginLogMapper;

	@Override
	public void addLoginLog(LoginLog loginLog) {
		loginLogMapper.insert(loginLog);
	}

	@Override
	public List<LoginLog> findLoginLog() {
		LoginLogQuery loginLogQuery = new LoginLogQuery();
		return loginLogMapper.selectList(loginLogQuery);
	}

	@Override
	public List<LoginLog> findLoginLogGroupByIp() {
		LoginLogQuery loginLogQuery = new LoginLogQuery();
		return loginLogMapper.selectListGroupByIp(loginLogQuery);
	}

接口:

@Repository
public interface LoginLogMapper<T,Q> extends BaseMapper<T, Q> {
   
	List<T> selectListGroupByIp(Q q);
}

系统日志:

方便调试,可以知道调用了哪一个类的什么方法,方便检查报错

实体类

public class SysLog {
    private Long id;

    private String account;

    private String opContent;

    private String clientIp;

    private String address;

    @JsonFormat(shape=JsonFormat.Shape.STRING, pattern="yyyy-MM-dd HH:mm:ss", timezone="GMT+8")
    private Date createTime;

}

具体的方法调用:

获取用户IP,打印使用的方法以及传入的参数

@Around("cutController()")
	public Object recordLog(ProceedingJoinPoint point) throws Throwable {
		// 获取HttpServletRequest
		HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();

		executorService.execute(new Runnable() {
			@Override
			public void run() {

				// 获取执行类名称
				String strClassName = point.getTarget().getClass().getName();
				// 获取执行方法名称
				String strMethodName = point.getSignature().getName();
				// 获取执行方法参数
				Object[] params = point.getArgs();
				StringBuffer bfParams = new StringBuffer();
				Enumeration<String> paraNames;
				if (params != null && params.length > 0) {
					paraNames = request.getParameterNames();
					String key;
					String value;
					while (paraNames.hasMoreElements()) {
						key = paraNames.nextElement();
						value = request.getParameter(key);
						bfParams.append(key).append("=").append(value);
						if (paraNames.hasMoreElements()) {
							bfParams.append("&");
						}
					}
					if (StringUtil.isEmpty(bfParams.toString())) {
						// 获取查询字符串, 只对get请求有效
						bfParams.append(request.getQueryString());
					}
				}

				// 如果请求方法为登录
				if (strMethodName.equals("logindo")) {
					LoginLog loginLog = new LoginLog();
					// 获取ip地址
					String ip = IpUtil.getIpAddr(request);
					loginLog.setLoginIp(ip);
					loginLog.setLoginTime(new Date());
					Point ipPoint = PointUtil.getPoint(ip);
					if(ipPoint != null) {
						Data data = ipPoint.getData();
						if (data != null) {
							// 纬度
							loginLog.setLat(data.getLat());
							// 城市
							loginLog.setAddress(data.getCity());
							// 经度
							loginLog.setLng(data.getLnt());
						}
					}

					// 截取用户名
					loginLog.setAccount(bfParams.substring(8,bfParams.indexOf("&")));
					loginLogService.addLoginLog(loginLog);
				} else {
					// 系统日志记录
					SysLog sysLog = new SysLog();
					String ip = request.getRemoteAddr();
					String strMessage = String.format("[类名]:%s,[方法]:%s,[参数]:%s", strClassName, strMethodName,
							bfParams.toString());
					HttpSession session = request.getSession();
					SessionUser sessionUser = null;
					if(session != null) {
						sessionUser = (SessionUser) session.getAttribute(userConfig.getSession_User_Key());
					}
					Point ipPoint = PointUtil.getPoint(ip);
					if(ipPoint != null) {
						Data data = ipPoint.getData();
						if (data != null) {
							sysLog.setAddress(data.getCity());
						}
					}
					sysLog.setCreateTime(new Date());
					sysLog.setClientIp(ip);
					sysLog.setOpContent(strMessage);
					if (sessionUser != null) {
						String account = sessionUser.getUserName();
						sysLog.setAccount(account);
					}
					sysLogService.addSysLog(sysLog);
				}
				try {
					Thread.sleep(1*100);
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
			}
		});
		//调用目标方法
		return point.proceed();
	}

}

猜你喜欢

转载自blog.csdn.net/vincy_yeha/article/details/125107250