gpt4 book ai didi

java - 在 Web 应用程序中记录用户 Activity

转载 作者:行者123 更新时间:2023-12-01 16:22:44 25 4
gpt4 key购买 nike

我希望能够在网络应用程序中记录用户 Activity 。我目前正在使用 log4j,它可以很好地记录错误等,但我不确定记录用户、执行的 servlet 方法和方法参数的最佳方法是什么。我使用 spring security 进行身份验证。

典型的 servlet 可能如下所示:

public class BankAccountServlet {
@RequestMapping("/deposit")
public void deposit(double amount) {
...
}

@RequestMapping("/checkBalance")
public double checkBalance() {
...
}
}

如果有两个用户,foo 和 bar,其中 foo 检查他的余额,bar 存入两笔现金 10.00 和 5.00。我希望日志看起来像:

01/01/1970 23:59:59 - foo - checkBalance
02/01/1970 23:59:59 - bar - deposit - 10.00
02/01/1970 23:59:59 - bar - deposit - 5.00

如果有人可以提供一些建议,我将非常感谢他们的帮助。

最佳答案

使用 Log4J 内置的 MDC/NDC 功能实现实际上非常简单(SLF4J 和 Logback 仅支持 MDC)。

实现MDC过滤器

首先,实现一个 servlet 过滤器,将用户名添加到 MDC/NDC。 Logback提供方便MDCInsertingServletFilter ,Spring框架还添加了Log4jNestedDiagnosticContextFilter到商店。看看它们,但您需要一个像这样的自定义:

public class UserToMdcFilter implements javax.servlet.Filter
{
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
MDC.put("user", SecurityContextHolder.getContext().getAuthentication().getPrincipal());
try {
chain.doFilter(request, response);
} finally {
MDC.remove("user");
}
}

//...
}

将 MDC 值添加到您的日志记录模式

确保此过滤器在 Spring 安全过滤器之后应用于 web.xml 中。 MDC 功能非常灵活 - 如果需要,它会将 MDC 线程本地映射中保存的所有值添加到每个日志记录语句中。对于您的情况,只需添加以下内容:

%X{user}

到您的日志pattern .

不显眼的日志记录方法参数/值

记录方法名称、参数和返回值由您决定(用户名将自动添加),但是有一些优雅的方法可以完全删除样板记录代码。尝试这个 Spring 内置方面:

<bean id="customizableTraceInterceptor" class="org.springframework.aop.interceptor.CustomizableTraceInterceptor">
<property name="enterMessage" value="Entering $[methodName]($[arguments])"/>
<property name="exitMessage" value="Leaving $[methodName](): $[returnValue]"/>
</bean>
<aop:config>
<aop:advisor advice-ref="customizableTraceInterceptor" pointcut="execution(public * BankAccountServlet.*(..))"/>
</aop:config>

最终想法

关于java - 在 Web 应用程序中记录用户 Activity ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62228130/

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