实现用户操作日志记录 | 您所在的位置:网站首页 › 写代码怎么写日志内容 › 实现用户操作日志记录 |
Java记录操作日志
java自带的日志框架是java.util.logging(JUL),从JDK1.4(2002)开始捆绑在JDK中。可以使用JUL来记录操作日志。以下是使用JUL记录事务的示例: // java.util.logging java.util.logging.Logger logger = java.util.logging.Logger.getLogger (this.getClass ().getName ()); logger.info ("This is an info message"); logger.severe ("This is an error message"); // == ERROR 操作日志和系统日志的区别系统日志:统日志主要是为开发排查问题提供依据,一般打印在日志文件中;系统日志的可读性要求没那么高,日志中会包含代码的信息,比如在某个类的某一行打印了一个日志。 操作日志:主要是对某个对象进行新增操作或者修改操作后记录下这个新增或者修改,操作日志要求可读性比较强,因为它主要是给用户看的,比如订单的物流信息,用户需要知道在什么时间发生了什么事情。 实现操作日志共能一般有两种方法 第一种就是很传统的做法,就是在每个模块进行插入日志的操作,这种方法虽然实现巨鹿用户操作,但是很繁琐,基本是重复的工作。第二种就是使用spring的AOP来实现记录用户操作,也是现在最流行的写法。它的优势在于这种记录用户操作的代码独立于其他业务逻辑代码,不仅实现了解耦,而且避免了冗余代码。 操作日志表这里我就简单记录一下基本的信息。 获取Ip地址 package com.kl.util; import org.springframework.web.context.request.RequestAttributes; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; import javax.servlet.http.HttpServletRequest; import java.net.InetAddress; import java.net.UnknownHostException; /** * @author Wen先森 * @version 1.0 * @date 2023/2/28 10:25 */ public class IpUtils { /** * 获取Ip地址 * @return */ public static String getIpAddress() { HttpServletRequest request = null; try { RequestAttributes requestAttributes = RequestContextHolder.currentRequestAttributes(); request = ((ServletRequestAttributes)requestAttributes).getRequest(); } catch (Exception var2) { return null; } return getIpAddr(request); } /** * 获取Ip地址 * @param request * @return */ public static String getIpAddr(HttpServletRequest request) { if (request == null) { return "unknown"; } 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("X-Forwarded-For"); } 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("X-Real-IP"); } if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getRemoteAddr(); } return "0:0:0:0:0:0:0:1".equals(ip) ? "127.0.0.1" : ip; }获取浏览器和操作系统 eu.bitwalker UserAgentUtils 1.21 UserAgent userAgent = UserAgent.parseUserAgentString(ServletUtils.getRequest().getHeader("User-Agent")); // 获取客户端操作系统 String os = userAgent.getOperatingSystem().getName(); // 获取客户端浏览器 String browser = userAgent.getBrowser().getName(); 第一种:传统方法 新增日志实体类、dao层 接口这里我是将添加日志编写到工具类中 package com.kl.util; import com.kl.entity.IotMSUser; import com.kl.entity.OprLog; import com.kl.repo.OprLogRepo; import eu.bitwalker.useragentutils.UserAgent; import org.springframework.util.ObjectUtils; /** * @author Wen先森 * @version 1.0 * @date 2023/2/27 19:48 */ public class LogUtils { /** * 添加操作日志 * @param content */ public static void insertLog (String content) { UserAgent userAgent = UserAgent.parseUserAgentString(ServletUtils.getRequest().getHeader("User-Agent")); // 获取客户端操作系统 String os = userAgent.getOperatingSystem().getName(); // 获取客户端浏览器 String browser = userAgent.getBrowser().getName(); // 获取用户信息,可以从自己的项目中token中去取,这里就不再描写 Integer userId=1; // 获取Ip地址 String ipAddress = IpUtils.getIpAddress(); OprLog oprLog = new OprLog(); oprLog.setIp(ipAddress); oprLog.setUserAgent(browser); oprLog.setUserId(userId); oprLog.setContent(content); oprLog.setCreateTime(FormatUtil.formatDate()); // 这里我才用的是JPA,大家也可以换成自己熟悉的框架去添加 OprLogRepo oprLogRepo = SpringUtils.getBean(OprLogRepo.class); oprLogRepo.save(oprLog); } } 在controller层的某一个方法调用该工具类记录操作日志。![]() ![]() |
CopyRight 2018-2019 实验室设备网 版权所有 |