通过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博客

相关推荐
老华带你飞34 分钟前
社区互助|基于SSM+vue的社区互助平台的设计与实现(源码+数据库+文档)
java·前端·数据库·vue.js·小程序·毕设·社区互助平台
007php0071 小时前
Go 错误处理:用 panic 取代 err != nil 的模式
java·linux·服务器·后端·ios·golang·xcode
阿华的代码王国1 小时前
【Android】OkHttp发起GET请求 && POST请求
android·java·okhttp·网络连接
island13142 小时前
【Redis#7】Redis 数据结构 -- Set 类型
java·数据结构·redis
3Cloudream2 小时前
互联网大厂Java面试:从基础到微服务的深度解析
java·spring·微服务·面试·技术解析·电商场景
接着奏乐接着舞。2 小时前
前端RSA加密遇到Java后端解密失败的问题解决
java·开发语言·前端
Yeats_Liao3 小时前
物联网平台中的Swagger(一)介绍与基础注解使用
java
柯南二号3 小时前
【Java后端】SpringBoot配置多个环境(开发、测试、生产)
java·开发语言·spring boot
C++chaofan4 小时前
Spring Task快速上手
java·jvm·数据库·spring boot·后端·spring·mybatis