(一)log4j2 maven配置

 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><exclusions><!-- 切换log4j2日志读取 --><exclusion><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-logging</artifactId></exclusion></exclusions></dependency>

 <!-- 配置 log4j2 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-log4j2</artifactId></dependency><!-- 加上这个才能辨认到log4j2.yml文件 --><dependency><groupId>com.fasterxml.jackson.dataformat</groupId><artifactId>jackson-dataformat-yaml</artifactId></dependency>

在resources 文件夹下创建log4j2.yml 文件

Configuration:status: warnProperties: # 定义全局变量Property: # 缺省配置(用于开发环境)。其他环境需要在VM参数中指定,如下:#测试:-Dlog.level.console=warn -Dlog.level.xjj=trace#生产:-Dlog.level.console=warn -Dlog.level.xjj=info- name: log.level.consolevalue: trace- name: log.level.xjjvalue: trace- name: log.pathvalue: D:/Logs/log- name: project.namevalue: my-spring-bootAppenders:Console:  #输出到控制台name: CONSOLEtarget: SYSTEM_OUTThresholdFilter:level: ${sys:log.level.console} # “sys:”表示:如果VM参数中没指定这个变量值,则使用本文件中定义的缺省全局变量值onMatch: ACCEPTonMismatch: DENYPatternLayout:pattern: "%d{yyyy-MM-dd HH:mm:ss,SSS}:%4p %t (%F:%L) - %m %X{REQUESTID} %n"RollingFile: # 输出到文件,超过128MB归档- name: ROLLING_FILEignoreExceptions: falsefileName: ${log.path}/${project.name}.logfilePattern: "${log.path}/$${date:yyyy-MM}/${project.name}-%d{yyyy-MM-dd}-%i.log.gz"PatternLayout:pattern: "%d{yyyy-MM-dd HH:mm:ss,SSS}:%4p %t (%F:%L) - %m %X{REQUESTID} %n"Policies:SizeBasedTriggeringPolicy:size: "128 MB"DefaultRolloverStrategy:max: 1000Loggers:Root:level: infoAppenderRef:- ref: CONSOLE- ref: ROLLING_FILELogger: # 为com.xjj包配置特殊的Log级别,方便调试- name: com.xjjadditivity: falselevel: ${sys:log.level.xjj}AppenderRef:- ref: CONSOLE- ref: ROLLING_FILE

其中 %X{REQUESTID} 为MDC设定的请求标识,每个请求都会有,用于跟踪日志。

(二)MDC和AOP 环绕增强、自定义注解

创建日志类

public class tools_log {public static Logger getLogger(Class class_) {Logger logger = LoggerFactory.getLogger(class_);return logger;}
}//end

AOP、MDC

@Aspect
@Component
@Slf4j
public class LogAspect {@Pointcut("execution(public * 包路径..*.*(..))")public void LogHelp() {}@Pointcut("@annotation(自定义注解路径)")public void noAnnotation() {}final Logger logger = tools_log.getLogger(this.getClass());@Around("LogHelp()&&!noAnnotation()")public Object arround(ProceedingJoinPoint joinPoint) {MDC.put("REQUESTID", UUID.randomUUID().toString());logger.info("方法环绕start.....");// 接收到请求,记录请求内容ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();HttpServletRequest request = attributes.getRequest();// 记录下请求内容logger.info("URL : " + request.getRequestURL().toString());logger.info("HTTP_METHOD : " + request.getMethod());logger.info("IP : " + request.getRemoteAddr());logger.info("CLASS_METHOD : " + joinPoint.getSignature().getDeclaringTypeName() + "." + joinPoint.getSignature().getName());logger.info("ARGS : " + JSON.toJSONString(joinPoint.getArgs()));try {Object o = joinPoint.proceed();logger.info("方法环绕proceed,结果是 :" + o);return o;} catch (Throwable e) {logger.error(e.toString());return null;} finally {MDC.clear();}}
}//end

.. 表示匹配多个参数

*  表示匹配一个参数

.* 表示匹配多个类

自定义注解

@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface noAroundAnno {
}//end

定义在方法上

转载于:https://www.cnblogs.com/hcfan/p/9986185.html

springBoot AOP环绕增强、自定义注解、log4j2、MDC相关推荐

  1. 在SpringBoot项目中,自定义注解+拦截器优雅的实现敏感数据的加解密!

    在实际生产项目中,经常需要对如身份证信息.手机号.真实姓名等的敏感数据进行加密数据库存储,但在业务代码中对敏感信息进行手动加解密则十分不优雅,甚至会存在错加密.漏加密.业务人员需要知道实际的加密规则等 ...

  2. SpringBoot系列之使用自定义注解校验用户是否登录

    记得今年年初刚开始面试的时候,被问的最多的就是你知道Spring的两大核心嘛?那你说说什么是AOP,什么是IOC?我相信你可能也被问了很多次了. 1.到底是什么是AOP? 所谓AOP也就是面向切面编程 ...

  3. 22-09-20 西安 谷粒商城(04)Redisson做分布式锁、布隆过滤器、AOP赋能、自定义注解做缓存管理、秒杀测试

    Redisson 1.Redisson做分布式锁  分布式锁主流的实现方案: 基于数据库实现分布式锁 基于缓存(Redis),性能最高 基于Zookeeper,可靠性最高 Redisson是一个在Re ...

  4. 如何在springboot项目中使用自定义注解实现系统操作日志的功能

    通常我们的项目中都需要记录操作日志,方便回溯问题,找到根源. 因为给项目添加日志记录功能是属于系统级别的功能,所以这个问题我们马上会想到spring的AOP,可以通过切面的形式.那么怎么来实现呢? 先 ...

  5. SpringBoot+拦截器+自定义异常+自定义注解+全局异常处理简单实现接口权限管理...

    点击关注公众号,实用技术文章及时了解 来源:blog.csdn.net/weixin_44102992/article/ details/107335702 前言 提到权限管理这块肯定很多人第一想到的 ...

  6. springboot集成es7.2自定义注解创建索引

    各位好,我们把之前的坑填一下,我在上上篇文章中写了springboot集成es7 的方法,并且集成了es原生客户端  High  Level Rest Client, 也说明了原因, 我用的版本较高, ...

  7. SpringBoot 拦截器和AOP自定义注解进行数据拦截实例

    声明:本文纯属个人随手笔记,如果对您有参考价值我十分开心,如果有存在错误,或者有更好的解决办法也麻烦您留言告诉我,大家共同成长,切勿恶言相. 欢迎加入资源共享QQ群:275343679,一起发现知识. ...

  8. Java AOP自定义注解

    一.背景 在之前文章:Java注解详解中,主要介绍了注解的含义.作用.以及常用的各类注解.今天主要介绍在Springboot中如何实现一个自定义注解,通过自定义注解去实现一些定制化的需求. 二.了解元 ...

  9. springboot项目中自定义注解的使用总结、java自定义注解实战(常用注解DEMO)

    初学spring的时候使用注解总觉得使用注解很神奇,加一个注解就能实现想要的功能,很好奇,也想自己根据需要写一些自己实现的自定义注解.问题来了,自定义注解到底是什么?肯定会有人和我一样有这个疑惑,我根 ...

最新文章

  1. Vue.js 进入/离开 列表过渡
  2. 下列关于物理层设备的叙述中,错误的是( )
  3. [css] display有哪些值?分别说明他们的作用是什么?
  4. 干货收藏!639页《深度学习:Deep Learning》图文并茂课程PPT
  5. 360互联网技术训练营第18期——AIOps落地实践探索 火热报名中!
  6. python django下载_简单了解django文件下载方式
  7. [转载] 2011 ScrumGathering大会简要记录 - 周金根
  8. iphone x php兼容吗,有关iOS11和iPhoneX的适配问题
  9. 题目244-16进制的简单运算
  10. 慎用 JSON.stringify
  11. c语言作业与实验报告,c语言实验报告
  12. 直观理解图片的EXIF orientation
  13. 在Quartus中调用Modelesim时仿真出现“Error:Failed to find design unit work“可能的解决方法
  14. 2022-2027年中国精华素行业市场深度分析及投资战略规划报告
  15. 阿里知产研究院报告:侵犯知识产权行为的罪与罚 | 湖畔新知汇
  16. 现代战争——僵尸网络的历史 上篇
  17. 树莓派配置文件config.txt详细介绍
  18. Python批量处理表格有用吗_python批量读入图片、处理并批量输出(可用于深度学习训练集的制作)...
  19. 苹果的黑科技:如何让按不动的触控板产生点按的感觉
  20. Android中 根据电话号码获取联系人姓名

热门文章

  1. 小学奥数 7830 求小数的某一位 python
  2. python的集成开发环境搭建_Window版本 - Python数据分析集成开发环境 Anaconda安装(超详细)...
  3. 人工智能python课程总结1500字_李开复的《人工智能》读后感1500字
  4. Python笔记-类的单例模式及重载打印
  5. Spring Boot文档阅读笔记-exception handling–@ExceptionHandler解析与实例
  6. Qt文档阅读笔记-QLibrary基本概念及实例
  7. Leaflet文档阅读笔记-Leaflet on Mobile笔记
  8. VS2012生成C的dll并调用以及Python调用C的DLL
  9. C++ opengl 对OpenGL中矩阵设置的初步认识
  10. Qt工作笔记-使用QGraphicsItem加载图片并实现碰撞