【问题标题】:Returning debug information in HTTP response body - Java在 HTTP 响应正文中返回调试信息 - Java
【发布时间】:2014-10-07 16:31:34
【问题描述】:

我希望在 JSON HTTP 响应正文中返回每个请求的调试信息。此调试信息将在我的整个应用程序中收集,包括数据库查询及其花费的时间、进行的外部调用、是否满足某些条件、显示应用程序流程的一般消息等数据。

我研究了 Java 日志框架,我正在使用的 Play Framework 有一个内置的记录器,非常适合将信息记录到文件中。但我似乎找不到任何处理请求级别日志记录的方法,即存储此特定 HTTP 请求的调试消息,以便与此请求一起返回然后销毁。

我当然可以创建一个 Debug 类,对其进行实例化并在我的应用程序中为每个请求传递它,但这似乎不是处理这个问题的好方法,因为我需要将它传递给很多我的应用程序中的类。

有没有更好的方法/设计模式/库可以做我正在寻找的事情,而不必在我的整个应用程序中传递一个 Debug 对象?

【问题讨论】:

  • 这可能不是您想要的,但我建议您查看LogStash。根据您的 Web 容器,您可能可以在那里设置请求级别的日志记录。例如在 tomcat 中有一个 AccessLogValve,它会打印出很多关于请求本身的信息。

标签: java debugging playframework-2.0


【解决方案1】:

这不是一个常见的用法,所以我认为你不会找到实现它的产品。你基本上有两种可能性:

  • 完全实现自定义记录器并在整个应用程序中使用它
  • 使用众所周知的本地 api(slf4j、apache commons logging)并实现专用后端

不管怎样,后端部分应该:

  • 启动一个缓冲区以在请求接收时收集日志(可能在过滤器中)并将其放入 ThreadLocal 变量中
  • 在请求帮助期间收集所有日志到 ThreadLocal 变量
  • 在请求结束时释放 ThreadLocal 变量(在分配它的同一过滤器中)

并且所有控制器的servlet都应该被修改为将日志内容添加到json响应体中。

【讨论】:

  • 我很惊讶听到这不是一个常见的用例,我一直发现将调试信息作为请求的一部分返回非常有用。
  • 通常,服务器应用程序的调试信息保留在服务器中,供服务器人员使用。工作人员可能必须为任何请求使用日志,而客户通常不使用此类信息。但这只是我的意见:-)
  • 是的,这是有道理的,此调试信息仅供我们用于调试等,但我发现在该请求中返回特定请求的调试信息要容易得多,而不必去挖掘通过日志文件。
【解决方案2】:

我找到了一个解决方案,Play 框架使用 Http.Context.current().args 为任意对象提供请求级存储我正在使用这个 HashMap 来存储我的自定义调试存储类,以便我可以在应用程序中的任何位置通过请求访问它。

【讨论】:

    【解决方案3】:

    为什么不使用 Http.Context,而不是在层与层之间传递 Debug 对象?它在 Controller 类中定义:

    public abstract class Controller extends Results implements Status, HeaderNames {
    
        ...
    
        public static Context ctx() {
            return Http.Context.current();
        }
    
    }
    

    用法:

    ctx().args.put(key, value)
    ctx().args.get(key);
    

    【讨论】:

      【解决方案4】:

      您不需要为此使用日志框架。在 json 响应中返回调试信息的最佳方法是使用与返回 json 其余部分相同的方法。

      这样,您可以通过 -Dsomevar=debug 或通过 HTTP 请求参数(如 debug=true)将其设置为在调试模式下工作

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-11-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-03-11
        相关资源
        最近更新 更多