Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中的结构化HTML日志记录_Java_Spring_Jakarta Ee_Log4j_Slf4j - Fatal编程技术网

Java中的结构化HTML日志记录

Java中的结构化HTML日志记录,java,spring,jakarta-ee,log4j,slf4j,Java,Spring,Jakarta Ee,Log4j,Slf4j,基于文本的日志记录的缺点是难以阅读和理解。是否有一个库可以让我生成结构化的、直观的日志文件 例如,在发出以下日志声明时: logger.log('Request received from gateway', request) 输出可以是这样的: <p>Request received from gateway. <a href='detail.html#163'>Details</a></p> 从网关接收到请求 因此,日志文件log.htm

基于文本的日志记录的缺点是难以阅读和理解。是否有一个库可以让我生成结构化的、直观的日志文件

例如,在发出以下日志声明时:

logger.log('Request received from gateway', request)
输出可以是这样的:

<p>Request received from gateway. <a href='detail.html#163'>Details</a></p>
从网关接收到请求

因此,日志文件
log.html
显示:

3月14日星期四04:8:13-从网关收到请求。

这里的详细信息可以是指向另一个html文件的锚定超链接,其中包含请求对象的字符串转储

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


我如何用Java创建更可读、结构化的日志?我没有找到任何适合我需要的东西。因此,我创建了一个名为
log4jweblayout
的小程序

log4j中有一个
org.apache.log4j.HTMLLayout
,但我没有发现它有用。它所做的只是将语句转储到HTML表中。虽然这比文本转储要好,但它没有利用诸如字体颜色和弹出窗口之类的HTML功能

有关介绍和使用信息,请参阅

功能列表(将随着更多功能的添加而更新):

  • 更好的时间戳处理。日志文件中冗长的主要来源是重复的时间戳。基于文本的文件具有每个日志语句的完整时间戳,例如:
    Sat Jul 23 2005 02:16:57 150ms
    。这增加了冗长。如果打印一个较短的表单,如
    02:16:57
    ,则会丢失重要的细节。Weblayout通过打印简明可读的表单并在鼠标悬停的弹出窗口中显示完整的日期来达到最佳效果
  • 通过颜色编码区分级别。不同级别的语句相互突出
  • 在运行时切换日志级别。对于文本文件,您可以在运行应用程序之前设置日志级别。查看日志时不能更改级别。Weblayout在屏幕顶部提供了一个小工具箱,可以使用Javascript切换级别
  • 更好的异常处理。将多个异常组合在一起,以显示问题的单一一致描述。例如,它会将
    ConnectException
    IllegalArgumentException
    ParseException
    合并成如下内容:
    未收到服务器的响应,因为请求无效,因为日期不能在过去
    
  • 更好的堆栈跟踪处理。默认情况下
    logger.info(异常)
    只记录消息,不记录堆栈跟踪。如果您手动将stacktrace提取为字符串并将其传递给log4j,那么它的可读性将非常差。log4jweblayout将自动执行此操作,并以与IDE相同的方式漂亮地打印它

  • 看起来是个好主意me@Leo我正在考虑按照这些思路开发一个开源项目。想知道类似的东西是否已经存在。只是小心不要在你的文件系统中有太多的文件。请看@Leo,您会注意到我编写了
    detail.html#467
    而不是
    detail467.html
    。可能会有一个包含多个部分的文件,而不是每个细节都有一个文件。在继续您的项目之前,请考虑您可以提供哪些Splunk和其他备选方案尚未提供的内容,然后如果您仍然觉得您有一些东西,请继续。您是否使用了与本教程解释的相同的实现逻辑?