通过Slf4j中的MDC实现在日志中添加用户IP功能

一、slf4j中MDC是什么

slf4j除了trace、debug、info、warn、error这几个日志接口外,还可以配合MDC将数据写入日志。换句话说MDC也是用来记录日志的,但它的使用方式与使用日志接口不同。

在使用日志接口时我们一般这么做

java 复制代码
  log.debug("log debug");

MDC从使用方式上有些不同,我对它的理解是MDC可以将一个处理线程中你想体现在日志文件中的数据统一管理起来,根据你的日志文件配置决定是否输出。

比如以下但不限于以下场景可以考虑使用MDC来达到目的

1.我们想在日志中体现请求用户IP地址

2.用户使用http客户端的user-agent

3.记录一次处理线程的日志跟踪编号(这个编号目的是为了查询日志方便,结合grep命令能根据跟踪编号将本次的处理日志全部输出)

二、功能实现

java 复制代码
public class LogInterceptor implements HandlerInterceptor {
	
	private final static String IP_KEY = "ip";

	@Override
	public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3)
			throws Exception {
		// 删除用户IP
		MDC.remove(IP_KEY);
	}

	@Override
	public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView mav)
			throws Exception {
	}

	@Override
	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
			throws Exception {
		String ip = IPUtils.getIpAddr(request);
		MDC.put(IP_KEY, ip);
		return true;
	}
}

三、参考资料

slf4j中的MDC-CSDN博客

相关推荐
梓德原5 分钟前
【C语言】C语言如何向系统接要存
java·c语言·算法
WX-bisheyuange8 分钟前
基于Spring Boot的流浪动物管理系统
java·spring boot·后端
阿蔹9 分钟前
Selenium---控制窗口、manage()方法
java·selenium·测试工具·面试
0和1的舞者11 分钟前
Postman接口测试全攻略:传参技巧与实战解析
学习·测试工具·spring·springmvc·postman·web·开发
兩尛14 分钟前
HJ52 计算字符串的编辑距离
java·开发语言·算法
Mr-Wanter15 分钟前
底层架构设计浅解
java·分布式·微服务
ArabySide15 分钟前
【Spring Boot】Interceptor的原理、配置、顺序控制及与Filter的关键区别
java·spring boot·后端
武子康16 分钟前
Java-183 OSS 上传实战:Java 原生与 Spring Boot 集成
java·开发语言·spring boot·分布式·spring·阿里云·oss
爱笑的源码基地18 分钟前
智慧工地云平台源码,采用Java+SpringCloud+UniApp+MySql技术,支持多端展示,具备集团级多级权限管理。
人工智能·后端·spring·spring cloud·源码·智慧工地·工地智能管理
ALex_zry21 分钟前
Rust语言基础分析与C++对比:系统编程的现代演进
java·c++·rust