Log4j2 每个用户会话一个文件
Log4j2 one file per user session
在我的 vaadin 应用程序中,我想为每个用户会话创建一个日志文件。我开始创建一个客户文件附加程序,但随后决定对 ThreadContexts 进行更多调查。我现在将用户的 uid 存储在 ThreadContext 中,这在我的 PatternLayout (%X{uid}
) 中工作正常,但不幸的是不在 FileAppender 中(也许我有点天真)。
对于这样的事情,你会选择哪种方式?简单的说,我想暂时得到这个结果:
- 用户未登录 -> 文件名=debug.log
- 用户登录 -> 文件名=[用户名]_debug.log
非常感谢任何想法或指示!
问题解决和经验教训:
- 要写入不同的日志文件,我需要路由器,如 FAQ 中所述。不知道为什么我在谷歌搜索时没有遇到这个问题。
- 不需要自定义 appender 来解决这个问题。
- Log4j2 对目录不可写非常非常挑剔。如果发生这种情况,请向上滚动堆栈跟踪:
ERROR Unable to invoke factory method in class org.apache.logging.log4j.core.appender.RollingFileAppender
。你会找到罪魁祸首,google 不会。
- 此外,Log4j2 关心附加程序出现的顺序。它在 FAQ 和 appender 文档中多次说明,但我仍然多次阅读它。
在我的 vaadin 应用程序中,我想为每个用户会话创建一个日志文件。我开始创建一个客户文件附加程序,但随后决定对 ThreadContexts 进行更多调查。我现在将用户的 uid 存储在 ThreadContext 中,这在我的 PatternLayout (%X{uid}
) 中工作正常,但不幸的是不在 FileAppender 中(也许我有点天真)。
对于这样的事情,你会选择哪种方式?简单的说,我想暂时得到这个结果:
- 用户未登录 -> 文件名=debug.log
- 用户登录 -> 文件名=[用户名]_debug.log
非常感谢任何想法或指示!
问题解决和经验教训:
- 要写入不同的日志文件,我需要路由器,如 FAQ 中所述。不知道为什么我在谷歌搜索时没有遇到这个问题。
- 不需要自定义 appender 来解决这个问题。
- Log4j2 对目录不可写非常非常挑剔。如果发生这种情况,请向上滚动堆栈跟踪:
ERROR Unable to invoke factory method in class org.apache.logging.log4j.core.appender.RollingFileAppender
。你会找到罪魁祸首,google 不会。 - 此外,Log4j2 关心附加程序出现的顺序。它在 FAQ 和 appender 文档中多次说明,但我仍然多次阅读它。