我希望在JSON HTTP响应正文中返回每个请求的调试信息。这个调试信息将在我的应用程序中收集,包括数据,例如数据库查询,它们花了多长时间,进行外部调用,是否满足某些条件,显示应用程序流的一般消息等。
我已经研究过Java日志框架,而我正在使用的Play框架有一个内置的记录器,非常适合将信息记录到文件中。但我似乎无法找到处理请求级别日志记录的任何内容,即存储此特定HTTP请求的调试消息,然后将其与此请求一起返回,然后销毁。
我当然可以创建一个Debug类,实例化它并在我的应用程序中为每个请求传递它,但这似乎不是一个很好的方法来处理它,因为我需要将它传递给我的应用程序中有很多类。
有没有更好的方法/设计模式/库可以做我正在寻找的东西,而不必在我的整个应用程序中传递一个Debug对象?
答案 0 :(得分:1)
这不是常用用法,因此我认为您不会找到实施该产品的产品。你基本上有两种可能性:
无论哪种方式,后端部分都应该:
应修改控制器的所有servlet以将日志记录内容添加到json响应主体。
答案 1 :(得分:1)
我找到了一个解决方案,Play Framework使用Http.Context.current().args
为任意对象提供请求级存储我使用此HashMap存储我的自定义调试存储类,以便我可以在任何地方的任何请求中访问它我的申请。
答案 2 :(得分:1)
为什么不使用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);
答案 3 :(得分:1)
您无需为其使用日志记录框架。在json响应中返回调试信息的最佳方法是使用与返回json其余部分相同的方法。
这样,您可以通过-Dsomevar = debug或通过HTTP请求参数(如debug = true
)将其设置为在调试模式下工作