Spring Boot+AOP记录日志

2023-11-04

1、pom.xml中加入web依赖

<dependency>  
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

2、编写测试Controller和Service

@RestController
public class TestController {
    @Autowired
    private TestService testService;

    @RequestMapping("/hello")
    public String doSomething(String name){
        return testService.hello(name);
    }
}
@Service
public class TestService {
    public String hello(String name){
        try{
            Thread.sleep(1000);
        }catch (Exception e){
            e.printStackTrace();
        }
        return "Hello "+name;
    }
}

3、pom.xml中加入aop依赖

<dependency>  
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-aop</artifactId>
</dependency>

4、编写切面

@Aspect
@Component
public class LogAspect {
    private static final Logger log = LoggerFactory.getLogger(LogAspect.class);
    ThreadLocal<Long> startTime = new ThreadLocal<>();

    @Pointcut("execution(* com.wz.controller..*.*(..))")
    public void logPointcut(){}

    @Before("logPointcut()")
    public void doBefore(JoinPoint joinPoint) {
        log.info("[CLASS_METHOD] : " + joinPoint.getSignature().getDeclaringTypeName() + "." + joinPoint.getSignature().getName());
        log.info("[ARGS] : " + Arrays.toString(joinPoint.getArgs()));
        startTime.set(System.currentTimeMillis());
    }

    @AfterReturning(returning = "ret", pointcut = "logPointcut()")
    public void doAfterReturning(Object ret) {
        log.info("[RESPONSE] : " + ret);
        log.info("[COST TIME] : " + (System.currentTimeMillis() - startTime.get()));
    }

    @AfterThrowing(throwing="ex", pointcut="logPointcut()")
    public void doAfterThrowing(Throwable ex) {
        log.error("[EXCEPTION] : " + ex);
    }

}

源码地址:点击打开链接

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring Boot+AOP记录日志 的相关文章

  • 从休眠乐观锁定异常中恢复

    我有一个这样的方法 Transactional propagation Propagation REQUIRES NEW public void doSomeWork Entity entity dao loadEntity do some
  • 集成 Spring Webflow 2 和 Apache Tiles [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我最近开始升级一些应用程序以使用 Spring Webflow 2 并且我想利用 Webflow 2
  • 如何从 Spring Boot 中排除依赖项

    我正在使用 Spring Boot 以下是我的 gradle 文件 buildscript ext springBootVersion 2 0 0 BUILD SNAPSHOT repositories mavenCentral maven
  • 组合 hibernate @Transactional 和 ehcache @Cacheable 总是创建数据库事务

    在对我们的应用程序进行负载测试时 我注意到如果您使用 Transactional 和 Cacheable 注释 hibernate 总是会创建一个数据库事务 有没有简单的方法可以防止这种情况发生 在 Spring 中解决这个问题的一种更详细
  • Spring MVC 将上下文路径附加到表单操作

    在 Spring 3 1 下运行相同的代码很好 刚刚升级到3 2 现在出现以下问题
  • 在 Spring 4 中干掉通用的 RedisTemplate

    我读到你可以拥有 Autowired从 Spring 4 开始泛型 这太棒了 我有一个摘要RedisService我想参加的课程 Autowired一个通用的 RestTemplate 如下所示 public abstract class
  • Java获取调用页面的URL

    为了让您了解情况 我们使用基于 Tomcat 6 0 29 的自定义服务器 我们正在使用 Java 和 Spring 进行开发 假设我有一个链接 您可以从http localhost 显示 http localhost display to
  • 将 ObjectId 字段正确映射到字符串

    我正在对 RDBMS 世界进行一些探索 进入 MongoDB 的神秘海洋 我正在使用 Spring Data 来帮助我进行冒险 我需要在两个集合中的文档之间创建手动引用 我读到 DBRef 很昂贵 我的 pojo 是这样的 public c
  • 需要 Spring 3 JSF 2 集成示例

    我想将 Spring 3 Web Flow 2 JSF 2 集成在一起 我需要您向我推荐一个好的教程或示例 提前致谢 UPDATE 我使用了以下示例 它对我来说运行良好 没有任何问题 http www mkyong com jsf2 jsf
  • Spring Boot data-jpa 和 nativeQuery Postgres 转换

    我有一个习惯 Query在一个看起来像这样的存储库中 SELECT FROM topicaudit c14001 WHERE auditdate gt NOW AND auditdate lt NOW 1 hour INTERVAL AND
  • Spring 非托管 bean 的依赖注入

    我有一个非托管的 JPA 域类 它是通过实例化的new操作员 UserAccount account new UserAccount userRepository save account In my UserAccount类 我有一个be
  • 配置文件上的 Spring 自动配置顺序/优先级

    我刚刚阅读了一些 Spring 文档 并且对自动配置的工作方式有疑问 因此 如果我们运行具有特定配置文件的 Java 应用程序 它将自动使用以下格式命名的配置文件 application profileName properties 假设我
  • Spring Redis 排序键

    我在 Redis Spring Data Redis 中有以下键 localhost gt Keys 1 id 1 Name C5796 Site DRG1 2 id 2 Name CX1XE Site DG1 3 id 3 Name C5
  • 使用 API 密钥和机密保护 Spring Boot API

    我想保护 Spring Boot API 的安全 以便只有拥有有效 API 密钥和秘密的客户端才能访问它 但是 程序内部没有身份验证 使用用户名和密码的标准登录 因为所有数据都是匿名的 我想要实现的目标是所有 API 请求只能用于特定的第三
  • Spring Boot 删除 Whitelabel 错误页面

    我正在尝试删除白色标签错误页面 所以我所做的是为 error 创建了一个控制器映射 RestController public class IndexController RequestMapping value error public
  • 从java应用程序发送电子邮件时出现异常:中继被拒绝

    我们正在使用 Spring Mail 从 java 应用程序发送电子邮件 org springframework mail javamail JavaMailSenderImpl Spring电子邮件配置是
  • Spring Hibernate中的@Transient方法调用

    我有一个 Pojo 类 在其中创建一个未与数据库表映射的字段 所以我必须声明字段Declaration和setter和getter方法 Transient 否则会显示错误 Transient private String docHistor
  • Spring MVC 和复选框

    我正在使用 Spring MVC 3 0 并且不能完全看到这个问题的所有部分 我的控制器将生成一个域对象列表 假设有一个简单的 User 对象 具有firstName lastName age 和role 属性 我想在表中输出该用户列表 每
  • 自定义存储库的 Spring Data Solr 优先级

    我需要在 Spring Data Solr 自定义存储库中实现以下内容 X 或 Y 和 Z 我当前的代码如下 Criteria criteria new Criteria x is X VALUE criteria criteria or
  • 在SPRING BOOT中配置多个数据库

    我正在尝试为我的 Spring Boot 应用程序连接 2 个不同的数据库 但出现此错误 应用程序无法启动 描述 com SyncFibertToolSpring SyncFibertTool MydbDB Config MydbDbCon

随机推荐

  • 超全面的语音交互知识总结:从原理、场景到趋势

    1 什么是语音交互 语音交互 VUI 指的是人类与设备通过自然语音进行信息的传递 一次完整的语音交互需要经历ASR NLP Skill TTS的流程 1 ASR 用于将声学语音进行分析 并得到对应的文字或拼音信息 语音识别系统一般分训练和解
  • where not exists 避免重复插入SQL语句

    项目场景 避免重复插入SQL语句 insert into TABLE2 select from TABLE1 where not exists select 1 from TABLE2 where TABLE2 id TABLE1 id a
  • Ubuntu下chgrp的用法

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 每天一个linux命令链接 http www cnblogs com peida archive 2012 12 03 2799003 html 实例1 改变文件的群组属性
  • Elasticsearch中 match、match_phrase、query_string和term的区别

    一 text字段和keyword字段的区别 以下给出一个例子 首先建立一个索引和类型 引入一个keywork的字段 PUT my index mappings products properties name type keyword 然后
  • 华为OD机试 Java 实现【计算日期到天数转换】【牛客练习题】

    一 题目描述 根据输入的日期 计算是这一年的第几天 保证年份为4位数且日期合法 二 输入描述 输入一行 每行空格分割 分别是年 月 日 三 输出描述 输出是这一年的第几天 四 Java算法源码 public static void main
  • 200行代码实现Mini ASP.NET Core

    前言 在学习ASP NET Core源码过程中 偶然看见蒋金楠老师的ASP NET Core框架揭秘 不到200行代码实现了ASP NET Core Mini框架 针对框架本质进行了讲解 受益匪浅 本文结合ASP NET Core Mini
  • 逆矩阵的概念、应用和求解

    目录 逆矩阵的概念 求解逆矩阵 应用例子 可能没有逆矩阵 求解逆 方法1 初等行运算 高斯 若尔当 求解逆 方法2 余子式 代数余子式和伴随 求解逆 方法3 程序库 逆矩阵的概念 矩阵运算中 是没有除法的 也就是不能除以一个矩阵 这时就需要
  • C++ 遍历驱动列表(应用层下)

    上代码咯 include stdafx h include
  • (android地图开发) 高德地图手势切换

    效果截图 相关布局文件 手势滑动第一个界面
  • Apache-Arrow是什么?

    Apache Arrow是什么 Arrow是一种数据存储格式 以及对这个格式的一系列API及多语言的SDK 当上层应用使用这个接口访问这些数据的时候 大家就不用在不同的私有格式之间转换 从而省去了大量的序列化和反序列化的计算资源 基础概念
  • PVE虚拟化平台之安装openEuler系统

    PVE虚拟化平台之安装openEuler系统 一 openEuler介绍 1 1 openEuler简介 1 2 openEuler的硬件要求 物理机的安装要求 虚拟机的安装要求 二 下载openEuler系统镜像 2 1 官方网址 2 2
  • MAVEN利器:一文带你了解MAVEN以及如何配置

    前言 强大的构建工具 Maven 作为Java生态系统中的重要组成部分 Maven为开发人员提供了一种简单而高效的方式来构建 管理和发布Java项目 无论是小型项目还是大型企业级应用 Maven都能帮助开发人员轻松处理依赖管理 编译 测试和
  • Jquery添加元素(append,prepend,after,before四种方法区别对比)

    jquery是一个平常比较喜欢用的js框架 因为上手比较简单吧 哈哈 下面呢 就介绍一下Jquery中如何添加元素 jquery添加元素一共有四个语句 分别是append prepend after before append的用法 这个方
  • 神经网络激活函数sigmoid relu tanh 为什么sigmoid 容易梯度消失

    什么是激活函数 为什么要用 都有什么 sigmoid ReLU softmax 的比较 如何选择 1 什么是激活函数 如下图 在神经元中 输入的 inputs 通过加权 求和后 还被作用了一个函数 这个函数就是激活函数 Activation
  • Python爬取58同城广州房源+可视化分析

    感谢关注天善智能 走好数据之路 欢迎关注天善智能 我们是专注于商业智能BI 人工智能AI 大数据分析与挖掘领域的垂直社区 学习 问答 求职一站式搞定 对商业智能BI 大数据分析挖掘 机器学习 python R等数据领域感兴趣的同学加微信 t
  • 如何在Mac电脑上编译Unity项目至iOS simulator (ipad/iphone)

    如何将Unity项目编译成iOS app 并在虚拟的ipad或者iphone上运行呢 大体步骤分为三步 使用Unity生成 xcodeproj 文件 在Xcode中运行 simulator 通过Xcode编译 xcodeproj 文件 并安
  • 结构体指针数组 内存分配 释放

    include
  • 【js】dayjs的用法

    导入dayjs库 import dayjs from dayjs 创建一个dayjs对象 const today dayjs 今天 console log today today 2023 08 28T05 19 09 296Z const
  • 如何实现人机融合的“即时聚优 ”

    即时聚优是指在某个特定时间段内 通过聚合和优选信息 为用户提供实时的 个性化的显示内容 即时聚优的目的是为了在短时间内向用户提供最有价值和最相关的信息 以提高用户体验和效率 它通常基于用户的偏好 历史行为 上下文信息等来进行内容的聚合和筛选
  • Spring Boot+AOP记录日志

    1 pom xml中加入web依赖