我需要记录连接到我的服务器的用户的 Activity ,我应该使用 log4j 吗?或者 log4j 仅在开发阶段有用?
最佳答案
它们实际上在开发过程中并不是特别有用,System.out.println 对于大多数开发调试日志记录来说非常好,但是一旦部署以下功能就会变得非常有用:
- 滚动日志文件,使其不会变得太大,从而实现连续的免维护操作
- 添加时间/日期,以便您可以查看特定时间段的日志
- 动态更改详细信息(您并不总是需要跟踪或调试信息,但能够在系统运行不佳时打开它可能是一个救星)
- 将日志文件重新路由到更易于访问的位置...当您实际上无法直接访问服务器时,Log4j 可以将您的日志发送到各种数据库或其他位置。
我们的一些代码在每个重要行上都有跟踪语句。如果我们在开发时遇到问题,我们会保留调试/跟踪语句,并能够在生产中需要时打开它们——几乎相当于单步执行已部署的代码。此外,大多数方法在顶部都有跟踪或调试语句,显示传入的参数和程序流程——同样,仅对调试器不可用的已部署系统真正有用。
所以简而言之,是的,它在开发后很有用。
编辑(回应评论问题)--
举个例子。我正在开发的应用程序现在有 20 条左右的日志。一个是“性能”,它记录传入的数据,包括时间——有时每秒不止一行。该日志文件以 10mb(大约每小时)的速度“滚动”,但我们用它来查找数据传输中的滞后情况。有时我们甚至使用其他软件来分析此日志,以寻找数据计时的模式。
我们有一个单独的“错误”日志,用于记录所有错误级别的 Activity 。该日志的滚动速度不会太快,以至于当我们获取大量其他日志信息时会丢失数据。
还有另一日志记录与 Hibernate/SQL 相关的问题,另一日志记录与消息队列相关的问题,另一日志记录与应用程序间缓存相关的问题......
这些也都通过 log4j 配置文件组合成“主”日志。我们可以将任何一个日志重新配置到不同的级别(例如,我们遇到了数据源的身份验证问题,因此我们调高了该源的调试级别,以找出导致我们服务器环境发生变化的原因)
尽管有些日志在一小时内滚动 10mb(我们的最大文件大小)。 Log4j 会将它们分为 .1 和 .2 文件,因此我们可以根据需要保留其中 10-50 个。
所有这些都是通过配置文件完成的,并且可以在部署后进行更改,而无需重建系统。
编辑2--另一个想法
使用 log4j 和 java 日志记录接口(interface)的另一个有用点是,像 hibernate 这样使用它的库可以通过 xml 文件进行配置,而无需重建。
如果没有 Log4j/java 的日志记录 API,您将 A) 有一个自定义 API 来控制日志,B) 仅具有默认日志记录,或者 C) 没有来自该子系统的日志记录。然而,由于 Hibernate 使用 java 的 API,因此您可以在标准的、记录的 xml 配置文件中设置“Hibernate”日志信息的日志级别,甚至将其日志重新路由到数据库或其他日志记录设备。
关于java - 像 log4j 这样的日志记录工具只在开发阶段有用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38017416/