Springboot开发系统记录操作日志

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: Springboot开发系统记录操作日志

在我们开发一个系统的时候,遇到问题总要去服务器获取日志,分析日志,这样总感觉会很麻烦,所以想想怎么方便快捷的查看系统的日志信息呢?

这边是本篇文章的初衷。日志入库,日志入库也有很多方法,这里只介绍其中一种最为简单的方法——切面日志入库

1、依赖jar包

<dependency>
    <groupId> org.aspectj</groupId >
    <artifactId> aspectjweaver</artifactId >
    <version> 1.8.7</version >
</dependency>

2、具体切面实现类

切面实现类如何定义与实现呢?接下来我们具体分析一下代码逻辑:
首先创建切入点,注解中“ @Pointcut("execution(public com.xxx.www.manage.controller...*(..))")”这部分内容是指引我们哪些包下的什么级别可以进行日志记录。
“ @Around("controllerLogInfo()")” 是定义具体的执行日志记录方法。此方法中获取了入库所需的各个参数值,然后将每个值赋值给日志对象,然后组装入库
ini复制代码

@Aspect
@Component
public class LogAspect extends BaseController {
   
    private Logger logger = LoggerFactory.getLogger(LogAspect.class);
    @Autowired
    private JournalService journalService;
    /**
     * 切入点描述 这里是controller包的切入点
     * 签名,可以理解成这个切入点的一个名称
     */
    @Pointcut("execution(public * com.xxx.www.manage.controller..*.*(..))")
    public void controllerLogInfo(){
   }


    @Around("controllerLogInfo()")
    public Object handleControllerMethodLog(ProceedingJoinPoint joinPoint) throws Throwable {
   
        long beginTime = System.currentTimeMillis();
        // 获取方法签名
        MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature();
        // 获取方法
        Method method = methodSignature.getMethod();
        //获取请求的类名
        String className = joinPoint.getTarget().getClass().getName();
        //获取请求的方法名
        String methodName = method.getName();
        //请求的参数
        Object[] args = joinPoint.getArgs();
        //将参数所在的数组转换成json
        String params = JSON.toJSONString(args,SerializerFeature.IgnoreNonFieldGetter);

        //获取ip地址
        RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes();//这个RequestContextHolder是Springmvc提供来获得请求的东西
        HttpServletRequest request = ((ServletRequestAttributes)requestAttributes).getRequest();
        //获取ip地址
        String ip = request.getRemoteAddr();
        try {
   
            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.getRemoteAddr();
            }
        } catch (Exception e) {
   
            e.printStackTrace();
        }
        User user = getUser(request);
        //保存日志
        Journal journal = new Journal(); 
        journal.setCreateTime(new Date());
        int k = className.lastIndexOf(".");
        String substring = className.substring(k+1, className.length());
        String nWrod = StringUtils.findNWrod(substring, 1);
        journal.setMethod(nWrod.toLowerCase() + "_" + methodName);
        journal.setName(user.getUsername());
        journal.setIpAddress(ip);
        journal.setRemark(className + "=========" + params);
        Object result = null;
        result = joinPoint.proceed();
        journalService.insertSelective(journal);
        return result;
    }
}

好了,这样就轻松搞定日志入库,觉得有帮助,帮小编点个赞吧!

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
2月前
|
XML Java 数据格式
SpringBoot入门(8) - 开发中还有哪些常用注解
SpringBoot入门(8) - 开发中还有哪些常用注解
62 0
|
2月前
|
Java 中间件
SpringBoot入门(6)- 添加Logback日志
SpringBoot入门(6)- 添加Logback日志
116 5
|
1天前
|
前端开发 JavaScript Java
springboot图书馆管理系统前后端分离版本
springboot图书馆管理系统前后端分离版本
29 12
|
3天前
|
Java 应用服务中间件 API
【潜意识Java】javaee中的SpringBoot在Java 开发中的应用与详细分析
本文介绍了 Spring Boot 的核心概念和使用场景,并通过一个实战项目演示了如何构建一个简单的 RESTful API。
22 5
|
3天前
|
前端开发 Java 数据库连接
Java后端开发-使用springboot进行Mybatis连接数据库步骤
本文介绍了使用Java和IDEA进行数据库操作的详细步骤,涵盖从数据库准备到测试类编写及运行的全过程。主要内容包括: 1. **数据库准备**:创建数据库和表。 2. **查询数据库**:验证数据库是否可用。 3. **IDEA代码配置**:构建实体类并配置数据库连接。 4. **测试类编写**:编写并运行测试类以确保一切正常。
14 2
|
7天前
|
开发框架 运维 监控
Spring Boot中的日志框架选择
在Spring Boot开发中,日志管理至关重要。常见的日志框架有Logback、Log4j2、Java Util Logging和Slf4j。选择合适的日志框架需考虑性能、灵活性、社区支持及集成配置。本文以Logback为例,演示了如何记录不同级别的日志消息,并强调合理配置日志框架对提升系统可靠性和开发效率的重要性。
|
15天前
|
存储 安全 Java
Spring Boot 3 集成Spring AOP实现系统日志记录
本文介绍了如何在Spring Boot 3中集成Spring AOP实现系统日志记录功能。通过定义`SysLog`注解和配置相应的AOP切面,可以在方法执行前后自动记录日志信息,包括操作的开始时间、结束时间、请求参数、返回结果、异常信息等,并将这些信息保存到数据库中。此外,还使用了`ThreadLocal`变量来存储每个线程独立的日志数据,确保线程安全。文中还展示了项目实战中的部分代码片段,以及基于Spring Boot 3 + Vue 3构建的快速开发框架的简介与内置功能列表。此框架结合了当前主流技术栈,提供了用户管理、权限控制、接口文档自动生成等多项实用特性。
62 8
|
1月前
|
存储 JavaScript 前端开发
基于 SpringBoot 和 Vue 开发校园点餐订餐外卖跑腿Java源码
一个非常实用的校园外卖系统,基于 SpringBoot 和 Vue 的开发。这一系统源于黑马的外卖案例项目 经过站长的进一步改进和优化,提供了更丰富的功能和更高的可用性。 这个项目的架构设计非常有趣。虽然它采用了SpringBoot和Vue的组合,但并不是一个完全分离的项目。 前端视图通过JS的方式引入了Vue和Element UI,既能利用Vue的快速开发优势,
130 13
|
1月前
|
JavaScript 安全 Java
java版药品不良反应智能监测系统源码,采用SpringBoot、Vue、MySQL技术开发
基于B/S架构,采用Java、SpringBoot、Vue、MySQL等技术自主研发的ADR智能监测系统,适用于三甲医院,支持二次开发。该系统能自动监测全院患者药物不良反应,通过移动端和PC端实时反馈,提升用药安全。系统涵盖规则管理、监测报告、系统管理三大模块,确保精准、高效地处理ADR事件。
|
2月前
|
XML Java 数据格式
SpringBoot入门(8) - 开发中还有哪些常用注解
SpringBoot入门(8) - 开发中还有哪些常用注解
54 2

热门文章

最新文章