Springboot开发系统记录操作日志

简介: 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日志并进行多维度分析。
目录
相关文章
|
18天前
|
小程序 前端开发 API
微信小程序全栈开发中的异常处理与日志记录
【4月更文挑战第12天】本文探讨了微信小程序全栈开发中的异常处理和日志记录,强调其对确保应用稳定性和用户体验的重要性。异常处理涵盖前端(网络、页面跳转、用户输入、逻辑异常)和后端(数据库、API、业务逻辑)方面;日志记录则关注关键操作和异常情况的追踪。实践中,前端可利用try-catch处理异常,后端借助日志框架记录异常,同时采用集中式日志管理工具提升分析效率。开发者应注意安全性、性能和团队协作,以优化异常处理与日志记录流程。
|
1天前
|
分布式计算 DataWorks 关系型数据库
DataWorks操作报错合集之在DataWorks中设置了一个任务节点的调度时间,并将其发布到生产环境,但到了指定时间(例如17:30)却没有产生运行实例和相关日志如何解决
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
13 0
|
3天前
|
Dubbo Java Serverless
Serverless 应用引擎操作报错合集之Nacos中nacos启动正常,访问白页,启动日志显示正常如何解决
Serverless 应用引擎(SAE)是阿里云提供的Serverless PaaS平台,支持Spring Cloud、Dubbo、HSF等主流微服务框架,简化应用的部署、运维和弹性伸缩。在使用SAE过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
8 0
Serverless 应用引擎操作报错合集之Nacos中nacos启动正常,访问白页,启动日志显示正常如何解决
|
4天前
|
Java 数据安全/隐私保护 开发者
【SpringBoot】讲清楚日志文件&&lombok
【SpringBoot】讲清楚日志文件&&lombok
16 5
|
7天前
|
监控 JavaScript Java
|
11天前
|
小程序 JavaScript Java
基于SpringBoot+Vue+uniapp微信小程序的医院核酸检测服务系统的详细设计和实现
基于SpringBoot+Vue+uniapp微信小程序的医院核酸检测服务系统的详细设计和实现
35 0
|
11天前
|
人工智能 移动开发 前端开发
Springboot医院智慧导诊系统源码:精准推荐科室
医院智慧导诊系统是在医疗中使用的引导患者自助就诊挂号,在就诊的过程中有许多患者不知道需要挂什么号,要看什么病,通过智慧导诊系统,可输入自身疾病的症状表现,或选择身体部位,在经由智慧导诊系统多维度计算,精准推荐科室,引导患者挂号就诊,实现科学就诊,不用担心挂错号。
23 2
|
12天前
|
JavaScript Java 测试技术
基于Java的公司员工工作日志办公系统的设计与实现(源码+lw+部署文档+讲解等)
基于Java的公司员工工作日志办公系统的设计与实现(源码+lw+部署文档+讲解等)
32 3
|
12天前
|
人工智能 前端开发 Java
Java语言开发的AI智慧导诊系统源码springboot+redis 3D互联网智导诊系统源码
智慧导诊解决盲目就诊问题,减轻分诊工作压力。降低挂错号比例,优化就诊流程,有效提高线上线下医疗机构接诊效率。可通过人体画像选择症状部位,了解对应病症信息和推荐就医科室。
158 10
|
12天前
|
Java 关系型数据库 MySQL
一套java+ spring boot与vue+ mysql技术开发的UWB高精度工厂人员定位全套系统源码有应用案例
UWB (ULTRA WIDE BAND, UWB) 技术是一种无线载波通讯技术,它不采用正弦载波,而是利用纳秒级的非正弦波窄脉冲传输数据,因此其所占的频谱范围很宽。一套UWB精确定位系统,最高定位精度可达10cm,具有高精度,高动态,高容量,低功耗的应用。
一套java+ spring boot与vue+ mysql技术开发的UWB高精度工厂人员定位全套系统源码有应用案例