Java中的结构化HTML日志记录

时间:2014-04-04 11:27:21

标签: java spring java-ee log4j slf4j

基于文本的日志记录具有难以阅读和理解的缺点。是否有一个库可以让我生成结构化和视觉美学的日志文件?

例如,在日志声明后面的问题:

logger.log('Request received from gateway', request)

输出可能是这样的:

<p>Request received from gateway. <a href='detail.html#163'>Details</a></p>

以便日志文件log.html显示:

Thursday 14th March 04:8:13 - Request received from gateway. Details

这里的细节可能是一个锚定超链接到另一个html文件,其中包含请求对象的String转储。

这种方法的优点是可以减少冗长度。我们不会立即将所有细节转储到屏幕上,而只会看到概述。如果需要查看详细信息,详细信息将显示在弹出窗口中。

我如何用Java创建更具可读性的结构化日志?

1 个答案:

答案 0 :(得分:0)

我找不到任何适合我需要的东西。因此,我创建了一个名为log4j-weblayout的小open source library

log4j中有一个org.apache.log4j.HTMLLayout,但我觉得它没用。它只是将您的语句转储到HTML表中。虽然这比文本转储更好,但它并没有利用HTML功能,如字体颜色和弹出窗口。

有关介绍和使用信息,请查看project website

功能列表(将在添加更多功能时更新):

  1. 更好的时间戳处理。日志文件中的主要冗长来源是重复的时间戳。基于文本的文件具有每个日志语句的完整时间戳,如:Sat Jul 23 2005 02:16:57 150ms。这增加了冗长度。如果您打印一个较短的表单,如02:16:57,您将失去必要的细节。 Weblayout通过打印简洁易读的形式并在弹出窗口中显示鼠标中的完整日期来达到最佳位置。
  2. 通过颜色编码区分等级。不同级别的陈述相互脱颖而出。
  3. 在运行时切换日志级别。使用文本文件可以在运行应用程序之前设置日志级别。查看日志时无法更改级别。 Weblayout在屏幕顶部提供了一个小工具箱,可以使用Javascript切换级别。
  4. 更好的异常处理。将多个异常组合在一起以显示问题的单个连贯描述。例如,它会将ConnectExceptionIllegalArgumentExceptionParseException合并为:Did not receive response from server, because The request is not valid, because Date cannot be in the past
  5. 更好的堆栈跟踪处理。默认情况下,logger.info(exception)将仅记录消息而不记录堆栈跟踪。如果您手动将stacktrace提取为字符串并将其传递给log4j,那么它将无法读取。 log4j-weblayout将自动执行此操作,并以与IDE相同的方式打印它。