你有没有看过一个能在Log4j中根据NDC分离文件的appender?

时间:2009-05-08 15:38:21

标签: java logging log4j

我们只有极少数客户(少于50个),我们希望每个客户都有自己独立的日志文件,其所有服务器端日志信息都会记录在其中。我知道您可以使用NDC和过滤器使用Log4j中的标准appender将日志语句定向到不同的文件,但这需要更多的设置(为所有现有客户创建记录器)并且它不会自动适应添加的新客户进入系统。

你见过一个appender会根据Log4j NDC值将日志语句拆分成单独的文件吗?我想我可以建立一个新的appender来做到这一点,但我不能说如果我能够得到一些效果很好的东西我想要。

4 个答案:

答案 0 :(得分:5)

带有logback(log4j的后继者)的SiftingAppender正是为处理这种情况而设计的。

顾名思义,SiftingAppender可用于根据给定的运行时属性分离(或筛选)日志记录。例如,SiftingAppender可以根据用户会话分隔日志记录事件,以便每个用户生成的日志进入不同的日志文件,每个用户一个日志文件。例如,SiftingAppender可以将日志记录事件分成不同的日志文件,每个用户一个文件。

documentation for SiftingAppender包含根据用户ID分隔日志的示例。

答案 1 :(得分:1)

我不知道任何标准甚至是第三方的appender可以做到这一点,而你是正确的,你可以编写自己的,我倾向于只使用一个标准的文件appender(滚动或其他)和使用一个可以过滤文本行的工具(即从视图中排除任何与模式不匹配的行)来读取日志。大多数可以过滤的编辑器也可以设置过滤器集,以便您可以重用现有模式。我不会讨论使用哪个编辑器,因为我甚至不知道你正在使用什么操作系统,每个人都有自己的偏好。

答案 2 :(得分:1)

听起来你想要一个多文件追加器的东西,你给出一部分文件名,其余部分用NDC填充。我不知道这样的事情。可能你必须自己动手。

如果你自己动手,你可能想要创建一个Appender,它在内部使用动态创建的Map RollingFileAppender个{{1}}。但是,我不知道Appender是否可以访问NDC。这可能是一件非常重要的事情。

答案 3 :(得分:1)

我也从未见过这样的追随者,但我认为编写自己的东西并不重要。如果你想自己做 - 看看AppenderSkeleton,你必须做的最少是覆盖append(..)方法。当您的appender被调用时,您将获得完整形成的事件,其中包含所需的一切,包括NDC。随便做任何你喜欢的事情..我认为你的案例中的MDC(映射诊断上下文)是可行的替代方案,它更灵活恕我直言。

如果您正在寻找商业解决方案 - 请查看logFaces,它是专为处理类似情况而设计的。 披露:我是该产品的作者。