Spring AOP 基于注解实现通用日志打印

spring aop 注解打印log日志 首先要在springmvc的配置里面配置:                     然后写一个LogAnnotationAspect类: package com.ssz.aspectj; import org.apache.log4j.Logger; import org.aspectj.lang.JoinPoint; import org.aspectj.l 阅读详情

前言

我们在日常开发中,项目里日志是必不可少的,一般有业务日志,数据库日志,异常日志等,主要用于帮助程序猿后期排查一些生产中的bug。

有时候程序猿们在做代码调优的时候需要关注每个接口的响应速度,所以需要打印接口调用时间,如果在接口中每次写这段代码实在恶心,故基于Spring AOP面向切面编程使用注解解决该问题。


1.定义注解

value为对应的接口名称,默认为BaseController

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface OwnLog {
    String value() default "BaseController";
}

2.面向切面处理

@Aspect
@Component
@Slf4j
public class LogAspect {
    @Before(value = "@annotation(ownLog)")
    public void before(JoinPoint point, OwnLog ownLog) {
        //point.getArgs()获取请求参数
        log.info("服务{}调用开始,请求参数:{}", ownLog.value(), JSONObject.toJSONString(point.getArgs()));
    }

    @Around(value = "@annotation(ownLog)")
    public Object around(ProceedingJoinPoint point, OwnLog ownLog) {
        Object result = null;
        String name = ownLog.value();
        long start = System.currentTimeMillis();
        try {
            result = point.proceed();
        } catch (Throwable throwable) {
            throwable.printStackTrace();
        } finally {
            long end = System.currentTimeMillis();
            log.info(String.format("服务%s,耗时:%dms", name, (end - start)));
        }
        return result;
    }

    //设置rvt为返回参数
    @AfterReturning(value = "@annotation(ownLog)", returning = "rvt")
    public void afterReturning(JoinPoint point, OwnLog ownLog, Object rvt) {
        log.info("服务{}调用结束,response:{}", ownLog.value(), JSONObject.toJSONString(rvt));
    }
}

3.使用注解

	@OwnLog("sendMsg")
    @Idempotent
    @ApiOperation(value = "消息推送")
    @PostMapping(value = "/sendMsg")
    public BaseResp sendMessage(@ModelAttribute UserMsgHistoryDTO userMsgHistoryDTO) {
        userMsgHistoryService.sendMessage(findCurrentUser(), userMsgHistoryDTO);
        addUserLog(LOG_TYPE_USER, "用户消息推送", JSON.toJSONString(userMsgHistoryDTO));
        return new BaseResp<>(ResultStatus.SUCCESS);
    }

4.控台打印

服务addEnrolmentUser调用开始,request:[{"age":0,"country":"string","health":"一般","idNum":"12345","name":"string","phoneNum":"string","status":"审核中"}]
服务addEnrolmentUser,耗时:13ms
服务addEnrolmentUser调用结束,response:{"code":10000,"message":"操作成功","success":true}
Spring AOP + 注解实现日志Demo 目标 通过使用自定义注解+@AspectJ切面类实现简单的日志Demo,对使用自定义注解的方法入参和返回值进行日志管理。 实现 首先通过自动代理的方式实现,下文还会对使用自动代理构建器和手动为AspectJProxyFactory实例配置代理目标及切面类的方式使用作说明 1 自动代理 测试类 public class Test { public static void main(Stri... 阅读详情

相关推荐

通过AOP 实现打印全局日志

常用注解 1、@Before 修饰一个方法时,该方法将作为Before增强处理 使用@Before修饰事,需要指定一个value属性值,该属性值指定一个切入点表达式(既可以是一个已有的切入点,也可以直接定义切入点表达式),用于指定该增强处理将被织入哪些切入点 表示在切入点执行前需要进行的操作或者需要执行的方法 2、@After 同Before 表示在切入点执行后,进行哪些操作 通常用于资源释放 3、 @Around Around增强处理是功能比较强大的增强处理; 近似等于Before增强处理和AfterRe

优快云博客专家、华为云享专家、Java领域新星创作者 3158

【Java】SpringBoot使用AOP进行日志解析打印+系统异常全局处理配置

为了方便项目部署在服务器之后,当出现BUG以及某些特殊需求时,会因为无法看到日志或者出现异常无法快速及时处理的情况的时候,那么AOP日志拦截打印的作用就体现出来了。同时加上作者日志生成到服务器的工具,将会更加方便处理问题;

qq_42666609的博客 2357

使用Aop实现自定义注解 - 原理篇

自定义注解的实现 本次我们将使用Spring boot 和AOP 实现自定义注解,主要功能是自动打日志。 元注解 元注解的作用就是负责注解其他注解。Java5.0定义了4个标准的meta-annotation类型,它们被用来提供对其它 annotation类型作说明。Java5.0定义的元注解: 1.@Target,说明了Annotation所修饰的对象范围     2.@Retention,定义了该Annotation生命周期(编译/运行)     3.@Documented,是一个标记注解,没有成员

Mr.hu 5832

基于Spring的AOP快速实现通用日志打印

定义一个横切关注点(对方法拦截后的处理,前置后置通知),在applicationContext.xml中配置bean(横切关注点的类和service实现类),配置aop(横切关注点下定义切入点表达式、配置前置通知和后置通知)

qq_46033586的博客 633

Spring AOP实现统一日志打印框架

系统的使用过程中,经常需要去查看一些历史操作的记录,用于排错、追责、统计分析或一些其他的需求使用,所以定义一个易用的统一日志打印框架非常必要,此实例使用spring aop完成,可作参考。     首先,声明一个作为切点的注解RecordLog,注解带一个LogDict类型的参数,主要用于定义该接口的基本信息,比如:接口编号、接口功能、异常日志级别等。 package com.alien.co

qq_36397492的博客 940

SpringBoot学习之自定义注解AOP统一打印请求日志(六)

其实,小哈在之前就出过一篇关于如何使用 AOP 切面统一打印请求日志的文章,那为什么还要再出一篇呢?没东西写了? 哈哈,当然不是!原因是当时的实现方案还是存在缺陷的,原因如下: 不够灵活,由于是以所有 Controller 方法中的方法为切面,也就是说切死了,如果说我们不想让某个接口打印出入参日志,就办不到了; Controller包层级过深时,导致很多包下的接口切不到; 今天主要说说如何...

徐泗空的博客 2235

Spring的AOP快速实现通用日志打印

Spring的AOP快速实现通用日志打印

weixin_43432438的博客 778

Spring AOP注解式实现请求与返回日志自动打印

面向切面编程(Aspect-Oriented Programming,简称AOP)是一种编程范式,旨在提高代码的模块化,通过将横切关注点(如日志记录、安全控制、事务管理等)从业务逻辑中分离出来,从而降低系统的耦合度。其核心思想是“关注点分离”,使得开发者可以专注于核心业务逻辑的实现。在Spring框架中,AOP被广泛应用于实现日志记录、权限控制、性能监控等通用功能。相比传统的日志记录方式(如在每个方法中手动添加日志代码),AOP提供了更为优雅、统一和可维护的解决方案。

weixin_35516273的博客 877

@Aspect 注解使用详解

AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术.AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。 在spring AOP中业务逻辑仅仅只关注业务本身,将日志记录,性能统计,安全控制,事务处理,异常处理等代码从业务逻辑

weixin_44026997的博客 787

【AI智能体】Coze 搭建个人旅游规划助手实战详解

本文将详细介绍如何使用Coze平台搭建个人旅游规划助手。首先概述了AI智能体如何简化传统复杂任务的开发流程,然后重点介绍了Coze工作流的作用和核心节点类型(包括大模型、插件、知识库等)。通过实际操作演示,从创建智能体到配置多级工作流,逐步实现旅游规划功能:解析用户输入时间地点、查询必玩景点、获取景点详细信息等。该教程展示了如何利用Coze的可视化编排能力,即使非技术人员也能快速构建专业级AI应用。最终呈现的旅游助手可提供天气查询、行程建议等一站式服务。

Hello, New World! 2113

暗黑地牢modfiles.txt文件生成工具

暗黑地牢modfiles.txt文件生成工具引言方法工具源码基本步骤 引言 玩过暗黑地牢mod,并手动修改了mod中文件的话,如果不同步修改modfiles.txt文件,就会引起各种问题,典型的比如马车刷不出mod英雄,商店和boss都不再出现mod饰品,怪物贴图丢失出现黑块等,要解决这个问题,就要修正mod文件夹下的modfiles.txt文件 方法 针对修改量大小,一般有几种方法: 如果修改较少,而且你还记得修改了哪几个文件,找到这几个文件,右键属性,查看大小,要用的是括号里面的字节数,然后打开mod

lttclaw_的专栏 5002

实际项目中的SpringAOP实现日志打印

本篇主要借项目来巩固SpringAOP实现日志打印的功能。

qq_63218110的博客 2289

word2vector入门教程

摘要: 网上已经有许多对w2v的介绍了,这里只是做一个简单的概括。下面这篇文章我认为是关于W2V写的比较好的文章,读者有兴趣可以先参考一下: w2v参考文章1 另外一篇是关于Skip-Gram和CBow的介绍。 Skip-Gram&CBOW 逻辑比较清晰的综述文章: 综述文章 数学原理很清晰很短的一篇文章(也有关于负采样的简单说明) 参考文章 1.什么

SCUT_Sam 1万+

简单实现SpringBoot 记录API接口日志,基于AOP+自定义注解方式

/接口请求日志记录System.out.println("----------------------测试-----------"+s);

asdascca的博客 1633

windows 下AD9361的 no-os master 工程搭建

参考网站: https://wiki.analog.com/resources/fpga/docs/build#windows_environment_setup https://wiki.analog.com/resources/eval/user-guides/ad-fmcomms2-ebz/software/no-os-setup 参考博客: https://blog.youkuaiyun.com...

Bronceyang的博客 7292

天线学习笔记——HFSS简单阵列天线

在HFSS15.0版本中使用 Radiation --> Antenna Array Setup 设置天线阵列的参数时的设计列表如下: 值得注意的是,在该版本中所定义的是:第一个阵元的位置坐标(First Cell Position)、阵元之间的间距(Directions)和阵元的数量(Number of Cells) 这些参数。 在ANSYS中的HFSS仿真中定义天线阵列如下: 与老版本不同的是:中心点坐标(Center Position)和布局设置(Layout Setting)。在布局设置中

Ethan的博客 1万+

基于Spring AOP实现日志自动打印

通过使用Spring AOP,轻松实现日志自动打印、traceId、requestId……

谷美的互联网练摊记 1296

从零构建:openEuler WSL下的ARM交叉编译工具链自动化部署方案

本文详细介绍了在openEuler WSL环境下使用Ansible自动化部署ARM交叉编译工具链的方案。通过编写Ansible角色和Playbook,实现从基础环境配置到工具链安装、环境变量设置的一键部署,大幅提升嵌入式开发效率。方案支持多种ARM架构,并扩展了QEMU仿真、VS Code远程开发等实用功能,是嵌入式开发者的高效解决方案。

h3i4j的博客 382

Spring Boot AOP 实战:优雅实现 Controller 全局日志统一打印

Spring Boot AOP 实战:优雅实现 Controller 全局日志统一打印

weixin_42326851的博客 2311

【实验】Linux下完全卸载oracle单实例(亲身体验完整版)

停止oracle数据库服务 停止监听 卸载数据库实例 因为自己懒得再弄dbca图形化界面啥的,直接采用dbca静默删除数据库实例,命令如下 dbca -silent -deleteDatabase -sourcedb orclhq -sid orcl -sysDBAUserName orcl -sysDBAPassword zte [oracle@slave ~]$ dbca -silent ...

萝卜吃鱼914的博客 1945

使用同一个时钟源clki,做两个二分频时钟,得到div2_clk1和div2_clk2,这两个时钟都能跟源时钟clki同步,但是div2_clk1和div2_clk2的相位可能是相同的,也可能是反相

比如,触发器1的初始Q为0,而触发器2的初始Q为1(这可能由于芯片制造工艺的微小差异、上电过程的随机性、或没有全局复位信号导致)。这句话的意思是:虽然div2_clk1和div2_clk2都是由同一个妈妈(clki)生出来的,频率也都是妈妈的一半,但它们“起步”的时刻可能不同。所以,上面那段话是在提醒你注意这种潜在的、由分频产生的时钟相位关系的不确定性,这在异步电路设计或时钟管理中是必须考虑的关键因素。结果:div2_clk1和div2_clk2的波形完全重合,它们的上升沿和下降沿都发生在同一时刻。

m0_49540263的博客 591

通过AOP实现全局日志打印

本文系统的阐述了如何在项目中统一的、全局的处理日志。

小小张自由—>张有博 1万+

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Spring mvc项目自定义注解实现拦截器和aop实现日志打印

Spring mvc项目自定义注解实现拦截器和aop实现日志打印

qq_43290655的博客 3011

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Spring AOP与自定义注解实现的操作日志记录功能

做项目时,有一个记录操作日志的需求,比如某个用户进行了查询、删除、修改等操作,需要把这个操作所对应的各种信息记录下来,为了实现这个需求,采用Spring AOP的切面可以实现。 我采用的是@AfterReturning和自定义注解来实现的,AOP还有其他几个通知,我就不写了。自定义注解是为了描述这个方法具体是什么操作。 自定义注解: @Tar...

毅呀毅呀哟 2026

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

【java】通过spring通过AOP实现日志打印(二)

本人菜鸡一个,上一篇文章说了说自己对AOP的理解,并留下了一个用spring注解实现AOP的坑,本文就来填填这个坑 该系列暂时有两篇文章: 【java】java中的AOP思想(一):https://blog.youkuaiyun.com/lsr40/article/details/88642153 背景: 上一篇文章写了java中aop的思想,其实就是为了让某个方法运行的时候,(不用写多余...

lsr40的博客 2843

Spring Boot 实现AOP日志切面全流程教程

AOP(面向切面编程)是Spring框架的核心特性之一,常用于日志记录、权限校验、事务管理等场景。本文将手把手教你如何在Spring Boot项目中实现AOP日志切面功能,包括依赖引入、切点定义、切面实现、注解自定义等内容。

m0_73579391的博客 2388
上一篇: Java实现获取n个工作日后的日期
下一篇: Redis——单线程模型详解
_Romeo
_Romeo 优质创作者: 后端开发技术领域 优质创作者: 后端开发技术领域
博客等级 码龄8年 2万+粉丝 104原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_Romeo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值