Java:进行漂亮格式化日志输出的库

5

我找不到一个能够以比通常更好的方式格式化日志输出语句的库。我记得其中一个功能是,它可以根据日志语句出现的“嵌套程度”来“偏移”日志消息。

也就是说,不是这样:

DEBUG | DefaultBeanDefinitionDocumentReader.java| 86 | Loading bean definitions
DEBUG | AbstractAutowireCapableBeanFactory.java| 411 | Finished creating instance of bean 'MS-SQL'
DEBUG | DefaultSingletonBeanRegistry.java| 213 | Creating shared instance of singleton bean 'MySQL'
DEBUG | AutowireCapableBeanFactory.java| 383 | Creating instance of bean 'MySQL'
DEBUG | AutowireCapableBeanFactory.java| 459 | Eagerly caching bean 'MySQL' to allow for resolving potential circular references
DEBUG | AutowireCapableBeanFactory.java| 789 | Another debug message

它会显示类似于这样的内容:
DEBUG | DefaultBeanDefinitionDocumentReader.java| 86  | Loading bean definitions
DEBUG | AbstractAutowireCapableBeanFactory.java | 411 | Finished creating instance of bean 'MS-SQL'
DEBUG | DefaultSingletonBeanRegistry.java       | 213 | Creating shared instance of singleton bean 'MySQL'
DEBUG | AutowireCapableBeanFactory.java         | 383 | Creating instance of bean 'MySQL'
DEBUG | AutowireCapableBeanFactory.java         | 459 | |__ Eagerly caching bean 'MySQL' to allow for resolving potential circular references
DEBUG | AutowireCapableBeanFactory.java         | 789 |     |__ Another debug message

这是我刚编造的一个例子(非常长的驼峰类名不是我的)。但我记得看过这样干净格式化的日志输出,它们比我以前见过的任何东西都要好,而且除了更加美观之外,它们还更容易阅读,因为它们再现了代码的某些逻辑组织。
然而,我现在找不到那个库了。
我很确定它完全兼容于log4jsl4j

2
你看过log4j的PatternLayout吗?似乎它涵盖了你想要的格式。http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/PatternLayout.html - marklai
@marklai:对你的评论点赞,很有趣,因为显然它可以进行填充,但我真正想要的是一个库/API(适用于Java),但我却找不到了。它可以根据缩进级别记录日志。我正在尝试使用snap.com的可视化模式找回项目的网页,但我无法找到它:( - SyntaxT3rr0r
不确定这个库是什么,但你应该注意性能问题。如果这个库自己缩进东西,那么它可能使用堆栈来计算需要缩进的深度。问题在于,为了获取堆栈,它必须抛出异常,捕获并从中获取堆栈跟踪。这可能是log4j输出调用方法名称的方式,并且它也警告存在严重的性能问题(http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/PatternLayout.html)。 - Tomislav Nakic-Alfirevic
@Tomislav Nakic-Alfirevic:是的,那是一个非常好的观点...但我仍然希望能找到那个API :) - SyntaxT3rr0r
1
一个日志框架如何准确地知道如何缩进某些语句? - mP.
1个回答

1

我在您的代码示例中看到了两件事:

  1. 根据最长名称填充类名
  2. 根据“嵌套”修改消息。

对于第一点,我很难想象如何做到这一点,因为您永远不知道哪个类将来会被记录。当然,您可以根据已经被记录过的最长类名添加填充,但是一旦记录了更长的类名,文件就不会像您的样本那么好看。

对于第二点,可以实现一个筛选器(有关logback文档中的筛选器,请参见这里),该筛选器将研究调用者数据并添加某种“嵌套在”的前缀,就像您在示例中编写的那样。我想这不是太难的任务。

希望这可以帮助到您...尽管我没有向您提供正在寻找的库的链接... :-(


我无法弄清楚为什么日志中包含了带有类名的.java文件...这似乎并没有什么帮助。 - mP.

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