Logging 如何在log4j中创建新模式?
一旦客户端登录到我的protal,我就在消息中附加用户id,用于为用户打印的所有日志消息。是否有任何方法可以将用户id附加到公共位置?而不是在行中追加 这是我现在想要做的Logging 如何在log4j中创建新模式?,logging,log4j,Logging,Log4j,一旦客户端登录到我的protal,我就在消息中附加用户id,用于为用户打印的所有日志消息。是否有任何方法可以将用户id附加到公共位置?而不是在行中追加 这是我现在想要做的 LOGGER.info("client_id: "+client_id + " : Saving options..); LOGGER.debug("client_id: "+client_id + " : return options are "+optionList); 如何区分每个客户机各自的日志语句? 为了避免
LOGGER.info("client_id: "+client_id + " : Saving options..);
LOGGER.debug("client_id: "+client_id + " : return options are "+optionList);
如何区分每个客户机各自的日志语句?
为了避免日志语句混用,我们可以在日志语句中添加用户名(或对每个客户机都是唯一的一些其他数据)。要做到这一点,我们必须确保将这个用户名数据明确地传递给每个日志语句,这是一项繁琐而重复的工作。但是,不用担心!Log4j有一个很好的方法来克服这个问题。它被称为MDC或映射诊断上下文
那么,什么是Log4j MDC(映射诊断上下文)
简单地说,MDC是一个映射,它存储运行上下文的特定线程的上下文数据。为了解释这一点,请回到我们的简单应用程序——每个客户端请求都将由MyServlet的不同线程提供服务。因此,如果您使用log4j进行日志记录,那么每个线程都可以有自己的MDC,它对整个线程是全局的。作为该线程一部分的任何代码都可以轻松访问线程MDC中存在的值
那么,我们如何使MDC区分来自多个客户机的日志记录语句呢?简单:在代码中启动任何业务流程之前,获取用户名(对于我们的Servlet,我们可以从请求对象获取用户名)并将其放入MDC。现在,用户名将可用于进一步处理。在定义“conversionPattern”时,在log4j.properties中添加模式%X{key},以检索MDC中存在的值。在我们的示例中,密钥将是“userName”。这就像从会话对象获取值一样