【问题标题】:What is the best way to log Activity in Spring Boot with Thymeleaf?使用 Thymeleaf 在 Spring Boot 中记录 Activity 的最佳方法是什么?
【发布时间】:2017-04-27 07:51:43
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • 看看这个问题:stackoverflow.com/questions/23325389/… -- 这是你想要的吗?
  • 可能是这样,但还有其他选择吗?
  • 我怎样才能用表单 [[${#httpServletRequest.remoteUser}]] 发布这个尝试 th:value=*{[[${#httpServletRequest.remoteUser}]]}

标签: java spring logging spring-boot thymeleaf


【解决方案1】:

您可以通过启用此属性来使用正常的访问日志记录 (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

【讨论】:

    猜你喜欢
    • 2018-11-10
    • 1970-01-01
    • 2018-12-24
    • 2017-06-04
    • 2021-10-26
    • 2021-02-22
    • 1970-01-01
    • 2018-12-13
    • 1970-01-01
    相关资源
    最近更新 更多