【问题标题】:How to log messages in Java web app and view logs by session, request, in a tree?如何在 Java Web 应用程序中记录消息并在树中按会话、请求查看日志?
【发布时间】:2014-05-08 15:50:14
【问题描述】:

目前,在我的 Web 应用程序日志中,我有一个充满消息的大文本文件。它们很难用于调试和分析。我正在想象以下内容,我想知道它是否已经存在,还是我需要构建它?

我希望将日志消息与当前请求和会话相关联,以便我可以在 UI 中将日志作为可折叠树查看。在摘要级别,我可能会按用户/会话查看,并在这些查看请求以及请求中花费的总时间。从那里我可以深入到一个请求并查看更深层次的日志消息。包含警告或错误的请求将通过过滤器突出显示或选择。

我还希望系统是可扩展的,而不是黑匣子。我想将异步任务连接到会话/请求,即使这些事情发生在其他线程中。我想将此与客户端 Javascript 错误集成。这是另一个问题,但重点是我需要一些可扩展的东西。

【问题讨论】:

    标签: java logging web-applications log-analysis


    【解决方案1】:

    我正在使用以下模式:

    • 我的 Log4j 模式正在使用 MDC - %d{ISO8601} %p [%X{REQUEST_ID}][%X{SESSION_ID}][%X{USER}] %class %m%n
    • 在每个请求的应用程序中,我使用MDC.put() 方法设置REQUEST_ID、SESSION_ID、USER

      MDC.put("SESSIONION_ID", sessionId);
      MDC.put("REQUEST_ID", requestId);
      MDC.put("USER", user);
      
    • 我在OtrosLogViewer 中定义了这个日志模式。您的日志模式定义应如下所示:

      type=log4j
      pattern=TIMESTAMP LEVEL [PROP(REQUEST_ID)][PROP(SESSION_ID)][PROP(USER)] CLASS MESSAGE
      dateFormat=yyyy-MM-dd HH:mm:ss,SSS
      name="MyAppLog"
      charset=UTF-8
      
    • 我使用 OtrosLogViewer 打开日志,这使我可以轻松地按属性 REQUEST_ID、SESSIONS_ID 或 USER_ID 进行过滤。它还可以按类别、日期、线程等过滤日志。日志可以从remote servers using SFTP, FTP, SMB打开

    • 此外,您还可以集成OtrosLogViewer with your Intellij。请参阅 Youtube 上的示例:https://www.youtube.com/watch?v=SbOFF56_7-A?hd=1

    免责声明:我是 OtrosLogViewer 的作者

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多