java打印前线程的id_logback打印日志输出线程ID:切面模式
加入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:切面模式相关推荐
- java输出日志_java代码中如何正确使用loggger日志输出
java代码中如何正确使用loggger日志输出 发布时间:2019-06-28作者:spider阅读(2980) 当你遇到问题的时候,只能通过debug功能来确定问题,你应该考虑打日志,良好的系统, ...
- 【Java从0到架构师】日志处理 - SLF4J、Logback、Log4j 2.x
日志处理 - SLF4J.Logback.Log4j 2.x SLF4J + Log4j 1.x SLF4J + Logback Logback - 配置文件 Logback - 控制台彩色打印 Lo ...
- log4j日志输出性能优化
1.log4j已成为大型系统必不可少的一部分,log4j可以很方便的帮助我们在程序的任何位置输出所要打印的信息,便于我们对系统在调试阶段和正式运行阶段对问题分析和定位.由于日志级别的不同,对系统的性能 ...
- log4j日志输出性能优化-缓存、异步
1.log4j已成为大型系统必不可少的一部分,log4j可以很方便的帮助我们在程序的任何位置输出所要打印的信息,便于我们对系统在调试阶段和正式运行阶段对问题分析和定位.由于日志级别的不同,对系统的性能 ...
- log4j 打印线程号配置_Log4J日志整合及配置详解
一.Log4j简介 Log4j有三个主要的组件:Loggers(记录器),Appenders (输出源)和Layouts(布局).这里可简单理解为日志类别,日志要输出的地方和日志以何种形式输出.综合使 ...
- 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 ...
- 使用Java线程并发库实现两个线程交替打印的线程题
背景:是这样的今天在地铁上浏览了以下网页,看到网上一朋友问了一个多线程的问题.晚上闲着没事就决定把它实现出来. 题目: 1.开启两个线程,一个线程打印A-Z,两一个线程打印1-52的数据. 2.实现交 ...
- java项目统一打印入参出参等日志
java项目统一打印入参出参等日志 1.背景 2.设计思路 3.核心代码 3.1 自定义注解 3.2 实现BeanFactoryPostProcessor接口 3.3 实现MethodIntercep ...
- java日志优雅打印格式_优雅编程之日志排查Log4j
背景 程序开发调试中,不可缺少的便是日志管理,常用的日志管理框架有如下几种: Log4j:Apache Log4j是一个基于Java的日志记录工具.它是由Ceki Gülcü首创的,现在则是Apach ...
最新文章
- windows 切换 默认 jdk 版本
- 求求你使用Tab键好吗
- windows部署微服务jar包 yml_杰克布开源项目,低代码开发框架,Docker快速部署
- 用 Go 构建一个区块链 -- Part 6: 交易(2)
- Python 入门之格式化输出
- django1.4.9 pythoon manage.py --help 子命令解析
- 东方卫视演得泰坦机器人_东方卫视《笑傲江湖4》今晚开播,郭德纲、陈赫过招喜剧新人,机器人脱口秀惊艳全场...
- 重读经典:《Generative Adversarial Nets》
- Azure Cosmos DB(Azure 宇宙数据库)--地球已无法阻止微软玩数据库了
- Java多线程_JUC包下的阻塞队列
- 基于相关系数的影像匹配_论文推送 | 基于最优匹配算法的像控点电子点之记制作研究...
- pyspark调用spark以及执行带in语句参数的hql示例
- java webmldn,MLDN李兴华JAVA WEB视频教程(30集)_源雷技术空间
- 今天来告诉你caj文件怎么打开
- 锐捷密码忘了!-锐捷密码查看器
- 【Excel神技】之 快速填充
- 让横向纵向分辨率都一致
- 大数据工程师四能力你拥有几种?
- JBDC[mysql][java]
- c语言空循环的作用是什么意思,C语言空循环和无穷循环有的区别
热门文章
- 机器学习——对三种模式的看法
- 如何在openGauss 2.1.0中使用Job?
- Oracle数据库迁移:异构传输表空间TTS HP-UX迁移至Redhat Linux 7.7
- ORA-12547: TNS:lost contact导致数据库无法启动
- LiteOS内核源码分析:消息队列Queue
- 云原生势不可挡,华为云GaussDB加速企业数字化转型
- Developer 转型记:一个开发平台的“魔力”
- 盘点 8 种最坑的 SQL 错误用法
- Hadoop分布式文件系统HDFS
- 红橙Darren视频笔记 网络请求优化方案 OOP面向对象 6大基本原则