加入POM引用 org.springframework.boot

spring-boot-starter-aop

ch.qos.logback

logback-classic

自定义切点 package cn.wuhg.climbing.service.design.patterns.sessionid.aspect;

import java.lang.annotation.*;

/**

* 自定义日志注解

*/

@Target(ElementType.METHOD)

@Retention(RetentionPolicy.RUNTIME)

@Documented

public @interface LogId {

String value() default "";

}

自定义日志切面 package cn.wuhg.climbing.service.design.patterns.sessionid.aspect;

import org.aspectj.lang.JoinPoint;

import org.aspectj.lang.annotation.*;

import org.slf4j.MDC;

import org.springframework.stereotype.Component;

import java.util.UUID;

/**

* 自定义日志切面

*/

@Aspect

@Component

public class LogAspect {

private final static String SESSION_ID = "sessionId";

/**

* 自定义切点

*/

@Pointcut("@annotation(cn.wuhg.climbing.service.design.patterns.sessionid.aspect.LogId)")

public void pointCut() {

}

/**

* 前置通知-记录请求信息

* @param joinPoint

*/

@Before("pointCut()")

public void doBeforeAdvice(JoinPoint joinPoint) {

// MDC容器增加requestId

String uuid = UUID.randomUUID().toString().replaceAll("-", "");

MDC.put(SESSION_ID, uuid);

}

/**

* 后置通知-记录返回信息

* @param joinPoint

* @param result

*/

@AfterReturning(pointcut = "pointCut()", returning = "result")

public void doAfterReturningAdvice(JoinPoint joinPoint, Object result) {

MDC.remove(SESSION_ID);

}

/**

* 后置异常通知-记录返回出现异

* @param joinPoint

* @param exception

*/

@AfterThrowing(value = "pointCut()", throwing = "exception")

public void doAfterThrowingAdvice(JoinPoint joinPoint, Throwable exception) {

MDC.remove(SESSION_ID);

}

}

logback配置 SpringBootDemo

${LOG_PATH}/${APPDIR}/logs.log

${LOG_PATH}/${APPDIR}/logs-%d{yyyy-MM-dd}.%i.log

20MB

true

%d{yyyy-MM-dd HH:mm:ss.SSS} [%X{sessionId}] %-5level %class.%method Line:%-3L - %msg%n

utf-8

%d{yyyy-MM-dd HH:mm:ss.SSS} [%X{sessionId}] %-5level %class.%method Line:%-3L - %msg%n

utf-8

debug

Controller接口 @LogId

@GetMapping("/log")

public void logId(){

log.info("测试slf4j日志线程ID");

}

日志截图,红框处是会话ID

整体切面过滤

可以通过制定路径范围,来整体过滤,去除了@LogId注解的限制,仅需将自定义切面替换即可 @Pointcut("execution(public * cn.wuhg.climbing.service.design.patterns..*(..))")

public void pointCut() {

}

java打印前线程的id_logback打印日志输出线程ID:切面模式相关推荐

  1. java输出日志_java代码中如何正确使用loggger日志输出

    java代码中如何正确使用loggger日志输出 发布时间:2019-06-28作者:spider阅读(2980) 当你遇到问题的时候,只能通过debug功能来确定问题,你应该考虑打日志,良好的系统, ...

  2. 【Java从0到架构师】日志处理 - SLF4J、Logback、Log4j 2.x

    日志处理 - SLF4J.Logback.Log4j 2.x SLF4J + Log4j 1.x SLF4J + Logback Logback - 配置文件 Logback - 控制台彩色打印 Lo ...

  3. log4j日志输出性能优化

    1.log4j已成为大型系统必不可少的一部分,log4j可以很方便的帮助我们在程序的任何位置输出所要打印的信息,便于我们对系统在调试阶段和正式运行阶段对问题分析和定位.由于日志级别的不同,对系统的性能 ...

  4. log4j日志输出性能优化-缓存、异步

    1.log4j已成为大型系统必不可少的一部分,log4j可以很方便的帮助我们在程序的任何位置输出所要打印的信息,便于我们对系统在调试阶段和正式运行阶段对问题分析和定位.由于日志级别的不同,对系统的性能 ...

  5. log4j 打印线程号配置_Log4J日志整合及配置详解

    一.Log4j简介 Log4j有三个主要的组件:Loggers(记录器),Appenders (输出源)和Layouts(布局).这里可简单理解为日志类别,日志要输出的地方和日志以何种形式输出.综合使 ...

  6. log4j 打印线程号配置_日志配置log4j 打印线程号

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 # Set root logger level to WARN and a ...

  7. 使用Java线程并发库实现两个线程交替打印的线程题

    背景:是这样的今天在地铁上浏览了以下网页,看到网上一朋友问了一个多线程的问题.晚上闲着没事就决定把它实现出来. 题目: 1.开启两个线程,一个线程打印A-Z,两一个线程打印1-52的数据. 2.实现交 ...

  8. java项目统一打印入参出参等日志

    java项目统一打印入参出参等日志 1.背景 2.设计思路 3.核心代码 3.1 自定义注解 3.2 实现BeanFactoryPostProcessor接口 3.3 实现MethodIntercep ...

  9. java日志优雅打印格式_优雅编程之日志排查Log4j

    背景 程序开发调试中,不可缺少的便是日志管理,常用的日志管理框架有如下几种: Log4j:Apache Log4j是一个基于Java的日志记录工具.它是由Ceki Gülcü首创的,现在则是Apach ...

最新文章

  1. windows 切换 默认 jdk 版本
  2. 求求你使用Tab键好吗
  3. windows部署微服务jar包 yml_杰克布开源项目,低代码开发框架,Docker快速部署
  4. 用 Go 构建一个区块链 -- Part 6: 交易(2)
  5. Python 入门之格式化输出
  6. django1.4.9 pythoon manage.py --help 子命令解析
  7. 东方卫视演得泰坦机器人_东方卫视《笑傲江湖4》今晚开播,郭德纲、陈赫过招喜剧新人,机器人脱口秀惊艳全场...
  8. 重读经典:《Generative Adversarial Nets》
  9. Azure Cosmos DB(Azure 宇宙数据库)--地球已无法阻止微软玩数据库了
  10. Java多线程_JUC包下的阻塞队列
  11. 基于相关系数的影像匹配_论文推送 | 基于最优匹配算法的像控点电子点之记制作研究...
  12. pyspark调用spark以及执行带in语句参数的hql示例
  13. java webmldn,MLDN李兴华JAVA WEB视频教程(30集)_源雷技术空间
  14. 今天来告诉你caj文件怎么打开
  15. 锐捷密码忘了!-锐捷密码查看器
  16. 【Excel神技】之 快速填充
  17. 让横向纵向分辨率都一致
  18. 大数据工程师四能力你拥有几种?
  19. JBDC[mysql][java]
  20. c语言空循环的作用是什么意思,C语言空循环和无穷循环有的区别

热门文章

  1. 机器学习——对三种模式的看法
  2. 如何在openGauss 2.1.0中使用Job?
  3. Oracle数据库迁移:异构传输表空间TTS HP-UX迁移至Redhat Linux 7.7
  4. ORA-12547: TNS:lost contact导致数据库无法启动
  5. LiteOS内核源码分析:消息队列Queue
  6. 云原生势不可挡,华为云GaussDB加速企业数字化转型
  7. Developer 转型记:一个开发平台的“魔力”
  8. 盘点 8 种最坑的 SQL 错误用法
  9. Hadoop分布式文件系统HDFS
  10. 红橙Darren视频笔记 网络请求优化方案 OOP面向对象 6大基本原则