我有一个 Java 服务器(基于 Java 的 Socket.IO,但这不是问题的一部分),它接受来自 Web 客户端的请求,进行一些计算,然后将结果发回。
服务器使用一些库,这些库使用 log4j 进行日志记录。
由于计算很长,我想发送给客户,不仅是最终结果,还有日志。
当然,我想发送每个客户端,只发送与其请求相关的日志行。
所以,我的问题是:如何配置 log4j,以便在特定函数调用期间生成的所有日志都转到特定记录器?
是的,有可能。首先,您需要熟悉 MDC(映射诊断上下文)的概念 - 基本上它是一个用于存储内容的每个线程的日志记录上下文(读取 - 哈希图)。log4j 可以配置为根据 MDC 值将日志输出发送到不同的目的地 - 因此您可以将每个用户的日志输出发送到以用户命名的文件。因此,您要做的是在开始长操作时在 MDC 中设置用户名(或某些标识符),所有操作的日志记录都将进入特定位置(文件,取决于配置的记录器),然后清除 MDC当操作完成时。
这里和这里有一个两部分的使用 MDC 的教程。
理想情况下,我也会为此目的编写自己的 log4j 记录器,如此处所建议的:在 log4j 中使用 MDC 动态命名日志文件