我们只有极少数的客户(少于 50 个),我们希望每个客户都有自己独立的日志文件,所有服务器端日志信息都存放在其中。我知道您可以使用 NDC 和过滤器使用 Log4j 中的标准附加程序将日志语句定向到不同的文件,但这需要更多的设置(为所有现有客户创建记录器)并且它不会自动适应添加新客户进入系统。
您是否见过一个附加程序,它会根据 Log4j NDC 值将日志语句拆分为单独的文件?我想我可以构建一个新的 appender 来做到这一点,但我不能说如果我能得到一些已经构建好的东西,我想这样做。
与 logback(log4j 的继任者)一起提供的 SiftingAppender 正是为处理这种情况而设计的。
顾名思义,aSiftingAppender
可用于根据给定的运行时属性分离(或筛选)日志记录。例如,SiftingAppender
可以根据用户会话分离日志事件,使每个用户生成的日志进入不同的日志文件,每个用户一个日志文件。例如,SiftingAppender
可以将日志记录事件分成不同的日志文件,每个用户一个文件。
SiftingAppender的文档包含一个基于用户 ID 分离日志的示例。
我不知道有任何标准甚至 3rd 方附加程序可以做到这一点,虽然你是正确的,你可以编写自己的,但我倾向于只使用标准文件附加程序之一(滚动或其他方式)并使用一个工具可以过滤文本行(即从视图中排除与模式不匹配的任何行)以读取日志。大多数可以过滤的编辑器也可以设置过滤器集,以便您可以重用现有模式。我不会讨论使用哪个编辑器,因为我什至不知道您使用的是什么操作系统,而且每个人都有自己的偏好。
听起来你想要一个多文件附加程序之类的东西,你提供文件名的一部分,其余部分用 NDC 填充。我不知道这样的事情。可能你必须自己动手。
如果您自己滚动,您可能希望创建一个Appender
内部使用动态创建的 a Map
of RollingFileAppender
s。但是,我不知道 Appender 是否可以访问 NDC。这可能是一项不平凡的工作。
我也从未遇到过这样的附加程序,但我认为编写自己的附加程序没什么大不了的。如果你想自己做 - 看看AppenderSkeleton,你至少要做的是重写 append(..) 方法。当您的 appender 被调用时,您将获得完整的事件,其中将包含所需的一切,包括 NDC。然后随心所欲地使用它。我认为在您的情况下,MDC(映射诊断上下文)是可行的替代方案,恕我直言,它更灵活。
如果您正在寻找商业解决方案 - 查看logFaces,它是为处理类似情况而设计的。披露:我是该产品的作者。