如何在Tomcat控制台日志中记录sessionId?

如何在Tomcat控制台日志中记录sessionId?,tomcat,logging,Tomcat,Logging,当tomcat中出现服务器(500)错误时,我们至少会得到2个日志条目: 一个在访问日志中 控制台日志中的一条或多条消息(和/或堆栈跟踪) 为了将控制台中的错误与访问错误关联起来,我们希望使用访问日志中通过%S(server.xml)获得的会话id 如何在控制台中获取会话id?使用本文档中给出的示例配置激活 正如您希望在控制台日志中看到的(比专用日志更好吗?),您需要将处理程序更改为: org.apache.catalina.filters.RequestDumperFilter.handler

当tomcat中出现服务器(500)错误时,我们至少会得到2个日志条目:

  • 一个在访问日志中
  • 控制台日志中的一条或多条消息(和/或堆栈跟踪)
  • 为了将控制台中的错误与访问错误关联起来,我们希望使用访问日志中通过
    %S
    (server.xml)获得的会话id

    如何在控制台中获取会话id?

    使用本文档中给出的示例配置激活

    正如您希望在控制台日志中看到的(比专用日志更好吗?),您需要将处理程序更改为:

    org.apache.catalina.filters.RequestDumperFilter.handlers = java.util.logging.ConsoleHandler
    
    然后,您将在catalina.out中看到类似的内容,它同时给出了JSESSIONDID和状态代码(在您的示例中为500):


    您也可以看看这一点。

    如果我可以建议另一种相关解决方案的话。。您可以将控制台中显示的线程名称与可显式登录的线程名称关联起来,该属性通常为x-threadname,代码失控或技术债务过多会导致关联需要。谢谢,这有助于缩小范围,但当然,同一个线程服务于许多不同的会话。一个线程同时服务于一个客户机。您可以使用连接器设置来增加线程池,并使其不太可能出现异常,从而无法在两个日志之间进行匹配。分治通常有效。没错,但是访问和控制台日志中的时间并不完全匹配。如果是这样的话,threadId+timestamp将是一个很好的相关键。
    06-Feb-2019 16:59:40.499 INFO [http-nio-8080-exec-1] org.apache.catalina.filters.RequestDumperFilter.doLog http-nio-8080-exec-1             header=Set-Cookie=JSESSIONID=E44588D6574AB1489540509E2A710934; Path=/manager; HttpOnly
    ..
    06-Feb-2019 16:59:40.499 INFO [http-nio-8080-exec-1] org.apache.catalina.filters.RequestDumperFilter.doLog http-nio-8080-exec-1             status=200