繁体   English   中英

用Thymeleaf在Spring Boot中记录活动的最佳方法是什么?

[英]What is the best way to log Activity in Spring Boot with Thymeleaf?

我想记录用户在我的Web服务上发出的请求。 用户登录后,用户可以针对服务器api发出请求。 我想记录哪个用户发出了哪个请求,输入和输出是什么,等等。

可以说用户通过将新对象提交到将要更新的服务器来编辑某些内容,我想知道是谁做的,之前是什么。

这是我目前使用的功能,但效果不是很好。

logging.level.org.thymeleaf=DEBUG
logging.level.org.springframework.boot=TRACE

我有一个主意是添加method(....,String Username),这样我就可以记录所有内容。 这是一个好主意,还是有更好的方法呢?

您可以通过启用以下属性来使用普通访问日志记录(Tomcat):

server.tomcat.access-log-enabled=true

这使您可以记录AccessLogValve文档中指定的任何内容。

您还可以编写自己的过滤器,例如:

@Component
@Ordered(Ordered.LOWEST_PRECEDENCE)
public class LogFilter extends OncePerRequestFilter {
    @Override
    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)
        throws ServletException, IOException {
        // Log the info you need
        // ...
        filterChain.doFilter(request, response);
    }
}

如果确保此过滤器在Spring Security过滤器链之后执行,则可以访问用户主体。 您还拥有HttpServletRequestHttpServletResponse对象,这将允许您同时记录请求正文和响应正文,尽管我认为这将是非常昂贵的操作。

  • 可以使用request.getServletPath()记录路径
  • 可以通过多种方式记录用户名,例如SecurityContextHolder.getContext().getAuthentication().getName() 只需通过更改顺序来确保您的安全过滤器已执行(有关更多信息,请参阅此问题
  • 可以通过获取request.getReader()并记录它来记录请求正文(有关更多信息, request.getReader() 问题
  • 也可以通过创建您自己的Writer包装器并重写HttpServletResponse来检索响应主体,以便它返回您的作家而不是默认作家(有关更多信息, HttpServletResponse 问题

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM