【问题标题】:A unique ID per User / Session in logs on all levels? Log4J?所有级别的日志中每个用户/会话的唯一 ID?日志4J?
【发布时间】:2011-08-19 13:41:18
【问题描述】:

我们正在做一些性能测试,以确定我们的应用程序的哪些步骤需要多少时间。当然,使用正则表达式易于解析/过滤日志是一种魅力。 问题:我们的 jsf 应用程序被拆分成几个项目,供其他(非 jsf)应用程序使用。 我的第一种方法是:

if(logger.isDebugEnabled())
        logger.debug("Service call took: " + (System.currentTimeMillis() - time)+ " JSESSIONID="+CookieUtil.getJsessionId(FacesContext.getCurrentInstance())) ;

(CookieUtil 会从 HttpServletRequest 中读取 sessionId)

但是...显然其他项目不喜欢依赖 JSF 库,也不喜欢我整洁的 CookieUtil。 log4j 提供什么吗? 有其他工具/概念吗?

【问题讨论】:

  • 其他项目是否在 servlet 容器中运行?如果是这样,您可以将 CookieUtil 更改为采用 HttpServletRequest 而不是 FacesContext。
  • 遗憾的是它们没有在 servlet 容器中使用
  • Crosspost 以避免有人遇到编码错误的麻烦:stackoverflow.com/questions/6071882/…
  • 添加额外信息的好电话。

标签: jsf logging log4j uniqueidentifier


【解决方案1】:

您可以使用 log4j MDC 完成您正在寻找的内容: Log4j MDC

并使用类似于此示例的 Servlet 过滤器: MDCServletFilter

【讨论】:

  • 是的。我最近被一位同事介绍给它。这是一些甜酱。
  • 还有一个办法是在不添加代码的情况下添加当前正在运行的线程的一些信息:The full pattern: Date MS Priority [Category] (Thread:NDC) Message\n <param name="ConversionPattern" value="%d %-5r %-5p [%c] (%t:%x) %m%n"/> 看起来像2011-05-12 11:21:35,880 264509 DEBUG [org.some.package.class] (http-127.0.0.1-8080-5:)使用线程有什么缺点吗?可能当用户注销并且线程被重用时
  • ndc 的范围是每个线程,因此在每个请求的线程中,范围将以请求结束。因此,该线程不会在该请求之外的相同上下文中被重用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多