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

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

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

  log.debug("log debug");

MDC从使用方式上有些不同,我对它的理解是MDC可以将一个处理线程中你想体现在日志文件中的数据统一管理起来,根据你的日志文件配置决定是否输出。
比如以下但不限于以下场景可以考虑使用MDC来达到目的
1.我们想在日志中体现请求用户IP地址
2.用户使用http客户端的user-agent
3.记录一次处理线程的日志跟踪编号(这个编号目的是为了查询日志方便,结合grep命令能根据跟踪编号将本次的处理日志全部输出)

二、功能实现

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

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-06 21:52:05       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-06 21:52:05       100 阅读
  3. 在Django里面运行非项目文件

    2024-06-06 21:52:05       82 阅读
  4. Python语言-面向对象

    2024-06-06 21:52:05       91 阅读

热门阅读

  1. BOOT ISO和DVD ISO的区别

    2024-06-06 21:52:05       30 阅读
  2. nacos增加修改配置实时生效

    2024-06-06 21:52:05       31 阅读
  3. redis集群

    2024-06-06 21:52:05       31 阅读
  4. VOJ 圣诞树 题解 最短路径 dijkstra算法

    2024-06-06 21:52:05       32 阅读
  5. Amazon Web Services 问题咨询笔记

    2024-06-06 21:52:05       29 阅读
  6. USB - Linux Drivers介绍

    2024-06-06 21:52:05       32 阅读
  7. 服务器硬件介绍(1)

    2024-06-06 21:52:05       24 阅读
  8. 【Linux】多进程基础

    2024-06-06 21:52:05       23 阅读
  9. AIGC笔记--Stable Diffusion源码剖析之FrozenCLIPEmbedder

    2024-06-06 21:52:05       34 阅读