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

时间:2016-12-12 12:29:50

标签: java spring logging spring-boot thymeleaf

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

让我们说用户编辑了一些东西,通过向服务器提交将要更新的新对象,我想知道是谁做的,之前是什么。

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

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

我有一个想法是添加方法(....,字符串用户名),以便我可以记录所有内容。这是一个坚实的想法,还是有更好的方法来做到这一点?

1 个答案:

答案 0 :(得分:0)

您可以通过启用此属性来使用正常访问日志记录(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()。只需通过更改订单确保您的安全过滤器已经执行(有关详细信息,请查看this question
  • 可以通过获取request.getReader()并记录请求正文(有关详细信息,请查看this question
  • 也可以通过创建自己的Writer包装并覆盖HttpServletResponse来检索响应正文,以便它返回您的编写器而不是默认编写器(有关详细信息,请查看this question })