Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Logging 如何在log4j中创建新模式?_Logging_Log4j - Fatal编程技术网

Logging 如何在log4j中创建新模式?

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); 如何区分每个客户机各自的日志语句? 为了避免

一旦客户端登录到我的protal,我就在消息中附加用户id,用于为用户打印的所有日志消息。是否有任何方法可以将用户id附加到公共位置?而不是在行中追加

这是我现在想要做的

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”。这就像从会话对象获取值一样