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