Play框架堆栈跟踪日志记录和日志配置

3

使用Play框架的默认日志记录器,我可以在Play应用程序日志中获取完整的异常堆栈跟踪信息,在控制台中获取同样的缩写版本。我有三个基本问题关于日志记录:

  1. 在某些情况下,我觉得可能有一些信息丢失了。像 ...3个公共帧被省略 这样的信息实际上是什么意思?我是否可以通过某种方式配置以查看那些被省略的帧?

  2. 如何控制控制台显示完整堆栈跟踪、部分堆栈跟踪或仅显示一些异常标题而不显示堆栈跟踪?

  3. 我可以将默认日志记录器替换为以下任何一个,还是应该仅将这些记录器用于我的日志记录,但保留框架日志记录不变?切换到这些日志记录器会破坏Play的非阻塞特性吗?scala-logginglog4szero-log

希望您的答案能让我更专注于我的应用程序,而不是日志记录基础设施,提前感谢!

1个回答

3
  1. Logback(就像JRE一样)在打印堆栈跟踪时省略常见框架。请参阅JRE描述如何删除帧

  2. Play使用Logback,您可以更改配置。请查看logback布局文档Play日志记录配置文档。特别注意xException设置。

  3. 如果需要,您可以尝试TypeSafe的scala-logging框架。如果它与Logback或slf4j集成,则可能很好地与Play配合使用。默认情况下,Play不使用Logback的异步附加程序(尽管也许应该?),因此无需担心阻塞或非阻塞问题。


我并没有真正理解JRE术语中关于常见帧省略的解释。这是否意味着被省略的“帧”总是重复的? - matanster
那么第三个和其他提到的日志框架呢?我可能会咨询谷歌小组并在这里回复。 - matanster
1
是的,这些帧是重复的,因为异常嵌套在彼此之内。想象一下f调用g,g调用h。然后h抛出一个异常,然后g捕获它并将其包装在另一个异常中抛出。g和h都有f作为共同的堆栈帧,因此它只需要显示一次。 - Rich Dougherty
抱歉,我不了解其他日志框架以便做出推荐。个人而言,我会使用Play的日志记录或Logback,或者自己编写一个小的Logback封装器。 - Rich Dougherty
谢谢澄清!这就是我在日志记录方面的计划 :) - matanster

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接