【发布时间】:2016-09-05 18:01:37
【问题描述】:
我想记录我的网络应用程序的当前用户。我用自己的 StrLookup 接口实现尝试了这个,我调用了 Environment.getCurrentUser() 之类的东西,但是在记录器的初始化期间只执行一次查找。是否有线程特定的查找功能,每次都会执行,例如模式中的关键字?
【问题讨论】:
我想记录我的网络应用程序的当前用户。我用自己的 StrLookup 接口实现尝试了这个,我调用了 Environment.getCurrentUser() 之类的东西,但是在记录器的初始化期间只执行一次查找。是否有线程特定的查找功能,每次都会执行,例如模式中的关键字?
【问题讨论】:
我所做的是使用 servlet 过滤器或 Spring Interceptor 并在请求之前将项目添加到 Log4j2 ThreadContext,然后在请求之后将其删除。这将导致信息包含在每个记录事件中,并且可以通过 %X 转换器在模式布局中引用。
有关示例,请参阅 http://logging.apache.org/log4j/2.x/manual/eventlogging.html。
如果您想编写一个必须对所涉及的客户或客户敏感但又不想通过每个方法都传递客户或客户 ID 的应用程序,这可能会很有用。
【讨论】: