使用log4j在多租户应用程序中基于租户将日志写入不同日志文件的方法

时间:2016-01-29 18:21:53

标签: java log4j log4j2

在多租户应用程序中,我希望使用log4j为不同的租户创建单独的文件。在没有混乱代码的情况下,最好的模式可能是什么。

2 个答案:

答案 0 :(得分:1)

如果您的所有“租户”都有一个应用程序,则可以使用MDC和MDCSiftingAppender:

log4j.appender.sift=org.apache.log4j.sift.MDCSiftingAppender
log4j.appender.sift.key=tenant
log4j.appender.sift.default=default
log4j.appender.sift.appender=org.apache.log4j.FileAppender
log4j.appender.sift.appender.layout=org.apache.log4j.PatternLayout
log4j.appender.sift.appender.layout.ConversionPattern=%d{ISO8601} | %-5.5p | %-16.16t | %-32.32c{1} | %m%n
log4j.appender.sift.appender.file=log/$\\{tenant\\}.log
log4j.appender.sift.appender.append=true

并在您的代码中,围绕“租户”的代码(理想情况下,Web请求过滤器或类似内容):

MDC.put("tenant", xxx)
...
MDC.remove("tenant")

答案 1 :(得分:0)

只是更新,如果使用Log4j 2,一个选项是使用RoutingAppender

http://logging.apache.org/log4j/2.x/manual/appenders.html#RoutingAppender

可以将基于用户的不同日志文件设置为ThreadContext。