记录特定的函数 - 调用特定的日志

时间:2013-01-01 11:24:33

标签: java logging log4j

我有一个Java服务器(基于Socket.IO for Java,但这不是问题的一部分)接受来自Web客户端的请求,进行一些计算,然后将结果发送回去。

服务器使用一些使用log4j进行日志记录的库。

由于计算时间很长,我不仅要向客户发送最终结果,还要发送日志。

当然我想发送每个客户端,只发送与其请求相关的日志行。

所以,我的问题是:如何配置log4j,以便在特定函数调用期间生成的所有日志都转到特定的记录器?

1 个答案:

答案 0 :(得分:3)

是的,它可能。 首先,您需要熟悉MDC(映射诊断上下文)的概念 - 基本上它是存储内容的每线程日志记录上下文(读取 - 散列映射)。 log4j可以配置为根据MDC值将日志记录输出发送到不同的目标 - 因此您可以将每个用户的日志输出发送到以用户命名的文件。所以你要做的是在你开始长操作时在MDC中设置用户名(或一些标识符),所有操作的日志记录将进入特定位置(文件,具体取决于配置的记录器),然后清除MDC当操作完成时。

有一个关于使用MDC herehere的两部分教程 理想情况下,我也会为此目的编写自己的log4j记录器,如下所示:Using MDC in log4j to dynamically name the log file