使用 Thymeleaf 在 Spring Boot 中记录 Activity 的最佳方法是啥?
Posted
技术标签:
【中文标题】使用 Thymeleaf 在 Spring Boot 中记录 Activity 的最佳方法是啥?【英文标题】: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
我的一个想法是添加方法(....,字符串用户名),这样我就可以记录所有内容。这是一个可靠的想法,还是有更好的方法来做到这一点?
【问题讨论】:
看看这个问题:***.com/questions/23325389/… -- 这是你想要的吗? 可能是这样,但还有其他选择吗? 我怎样才能用表单 [[$#httpServletRequest.remoteUser]] 发布这个尝试 th:value=*[[$#httpServletRequest.remoteUser]] 【参考方案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 过滤器链之后执行此过滤器,则您可以访问用户主体。您还拥有HttpServletRequest
和HttpServletResponse
对象,这将允许您同时记录请求正文和响应正文,尽管我认为这将是一项非常昂贵的操作。
request.getServletPath()
记录路径
用户名可以通过多种方式登录,例如SecurityContextHolder.getContext().getAuthentication().getName()
。只需通过更改顺序确保您的安全过滤器已被执行(更多信息请查看this question)
可以通过获取request.getReader()
记录请求正文并将其记录下来(有关更多信息,请查看this question)
也可以通过创建您自己的 Writer
包装器并覆盖 HttpServletResponse
来检索响应正文,以便它返回您的作者而不是默认作者(有关更多信息,请查看 this question)
【讨论】:
以上是关于使用 Thymeleaf 在 Spring Boot 中记录 Activity 的最佳方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章