gpt4 book ai didi

logging - Seam log4j 凭证日志

转载 作者:行者123 更新时间:2023-12-04 06:52:02 25 4
gpt4 key购买 nike

在 Seam 中,使用 log4,我希望我的信息、警告和错误始终记录登录的用户(如果是)名称,无论日志消息是什么。

作为一个一致的事情,我不想必须获取登录的用户名,并在消息前面加上前缀。所以我尝试填充 log4j NDC 以将其作为日志消息的字段。
成功登录时推送用户名:

NDC.push(credentials.getUsername());

这是可行的,但 NDC 是按线程管理的,因此一旦另一个线程处理来自同一登录用户的请求,该用户名的跟踪就会丢失。
我在想应该有一个共同的模式来完成这个简单的任务,即将每个日志消息附加到登录的用户,是否使用 NDC,以确切知道哪个用户触发了什么操作。

任何人都知道实现这一目标的适当方法吗?

最佳答案

Seam LoggingFilter 满足您的需求

Binds the username of the authenticated user to the Log4j Mapped Diagnostic Context (MDC),a referenced using the literal pattern %X{username}



但是否启用 Log4j 位于类路径 - org.apache.log4j.Logger - 你有一个启用的身份组件 - org.jboss.seam.security.identity

这是 LoggingFilter 的一些代码
HttpSession session = ((HttpServletRequest) servletRequest).getSession(false);
if (session != null) {
Object attribute = session.getAttribute("org.jboss.seam.security.identity");
if (attribute instanceof Identity) {
Identity identity = (Identity) attribute;
Credentials credentials = identity.getCredentials();

String username = credentials != null ? credentials.getUsername() : null;
if (username != null)
MDC.put("username", username);
}
}

关于logging - Seam log4j 凭证日志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2982234/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com