java – 如何收集与单个请求相关的jboss中的日志?
发布时间:2020-12-15 08:29:51 所属栏目:Java 来源:网络整理
导读:我正在开发一个在JBoss下运行的 Java EE Web应用程序. 我想做以下事情: 当用户发送http请求(通过打开页面或通过AJAX)时,将收集与此请求相关的所有日志,然后将其保存到数据库中.相关的意思是他们在处理当前请求的过程中被记录.最难的部分是收集与单个请求相
我正在开发一个在JBoss下运行的
Java EE Web应用程序.
我想做以下事情: 我正在研究这个解决方案: JBoss使用log4j进行日志记录.当应用程序启动时,启动侦听器会注册一个log4j appender,它将所有日志收集到ThreadLocal字段中.在请求处理结束时,日志将从字段中获取并保存到DB中. 但是,现在看来,log4j appender在其他线程中工作.这使得这个解决方案变得不可能. 你有什么想法,怎么做? 谢谢, 解决方法
您可以使用log4j
MDC class(映射的诊断上下文)将某些数据与当前线程相关联.
我经常使用它来将会话ID添加到日志输出中,以便进行该会话的任何日志记录: public class AddSessionIdToLogFilter implements Filter { public void doFilter(ServletRequest request,ServletResponse response,FilterChain filterChain) throws IOException,ServletException { if (request instanceof HttpServletRequest) { HttpServletRequest httpRequest = (HttpServletRequest) request; String sessionID = httpRequest.getSession().getId(); MDC.put("SessionID",sessionID); } ... 然后,您只需在PatternLayout中按键引用MDC即可.不确定DB appender是如何工作的,但我认为它也可以记录MDC字段…… log4j.appender.LOGFILE.layout.ConversionPattern= ... [SessionID=%X{SessionID}] ... (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |