3

我的 JSF 应用程序使用最新版本的 Glassfish 进行部署,使用 EclipseLink 作为 JPA 提供程序。我编写了一个相当简单的日志记录工具,将日志记录存储在 JPA 数据库中。Log 表的列包括时间戳(当然)、日志记录类型的枚举键字段、当前用户 ID、网络地址和字符串消息。

这些都没有坏,所以我自然想去修复它。(开玩笑)我真正想知道的是,我是否因为不使用已建立的日志 API 和包之一以及使用 Glassfish 之外的设施而遗漏了什么?我有兴趣了解我选择退出的任何日志阅读和分析工具。任何评论将不胜感激。

更新到问题: 如果我转换为 java.util.Logging,是否有将日志数据捕获到我的 SQL 后端的路径?搜索和查找内容非常方便,并且现有的日志记录工具似乎面向输出到文本文件。

4

2 回答 2

2

这个问题一直在我脑海中转来转去,而且——就像很多人一样——它只是引出了更多的问题。从哪儿开始?

java.util.logging (jul)、commons-logging、Log4J 等以及所有其他变体传统上都是面向诊断和管理日志的(我真的很努力不说是有意的)。它们不适合应用程序“事件”日志 - 取决于您对事件的定义。该声明背后的主要论点是,这些工具严格面向从代码中捕获文本字符串。

那么,你的听众是谁

如果:

  • 开发商;帮助诊断问题 - 对分类为 FINE*/TRACE/DEBUG/INFO/WARN/SEVERE的自由格式文本使用 jul 和 family
  • 管理员;监控系统的健康状况 - 使用 jul & family 来获取分类为 INFO/WARN/SEVERE的自由格式文本。
  • 用户(包括支持人员);应用报告、统计等。您是否需要特定列的数据(用户名、公司、IP 地址、操作/事件等)。- 建立您自己的数据表,特别是如果您需要实时数据表。

如果您需要比一行文本更多的“带宽”,那么 jul & family 不适合您。

一些诊断记录器将允许您创建自定义类别 - 例如,我相信 Log4J 可以。大多数常见的替代品都没有(如果有的话,尤其是 jul 做得不好)。

最后说明

通过调用适当的 log.info() 语句将 DB/表驱动的日志详细信息捕获到诊断日志记录工具中是微不足道的,反向进行会有点困难。不要因为对另一个的简单好奇而扔掉一个。

于 2012-07-31T17:27:32.613 回答
1

您主要错过了对 Java 工具箱中两种最流行的登录方式的理解。那些是 java.util.logging 和使用 log4j 的 commons 日志记录。是的,还有其他的,但如果你想让你的应用程序闻起来像 Java EE 应用程序,你会想要使用其中的一个。我相信 Glassfish 利用了 JUL,因此您可能想从那里开始。这些库具有可配置的附加程序,用于记录到数据库、文件甚至发送 SMS 文本消息。如果您坚持这些库提供的规定配置方法,您还将拥有其他开发人员已经知道如何使用的细粒度日志控制。

于 2012-07-30T04:31:11.563 回答