log4j等日志工具是否仅在开发阶段有用?

时间:2016-06-24 15:51:54

标签: java logging log4j log4j2

我需要记录连接到我服务器的用户的活动,我应该使用log4j吗?或者log4j仅在开发阶段有益吗?

4 个答案:

答案 0 :(得分:3)

它们在开发过程中实际上并不是特别有用,System.out.println对于大多数dev调试日志记录都非常有用,但是一旦部署了以下功能就变得非常有用:

  • 滚动日志文件,以便它们不会变得太大,从而允许持续免维护操作
  • 添加时间/日期,以便查看特定时间段的日志
  • 动态更改详细程度(您并不总是想要跟踪或调试信息,但是当系统运行不正常时能够将其打开可以成为救星)
  • 将日志文件重新路由到更易于访问的位置...当您无法直接访问服务器时,Log4j可以将您的日志发送到各种数据库或其他位置。

我们的一些代码在每条重要行上都有跟踪语句。如果我们在开发过程中遇到问题,我们将调试/跟踪语句留在其中,并且能够在我们需要生产时打开它们 - 几乎等同于单步执行已部署的代码。此外,大多数方法在顶部都有跟踪或调试语句,显示传入的参数和程序流 - 再次仅对调试器不可用的已部署系统非常有用。

简而言之,是的,它在开发后很有用。

编辑(回应评论问题) -

仅作为一个例子。我正在处理的应用程序现在有20个日志。一个是“性能”,它记录包含时间的数据 - 有时每秒超过一行。这个日志文件“滚动”在10mb(大约每小时),但是我们使用它来查找数据传输中的滞后。我们甚至使用其他软件来分析此日志,以便在数据计时中查找模式。

我们有一个单独的“错误”日志,记录所有错误级别的活动。此日志的滚动速度不会太快,以至于当我们收到大量其他日志信息时会丢失数据。

还有另一个日志来解决与Hibernate / SQL相关的问题,还有一个用于与我们的消息队列相关的问题,还有一个用于我们的应用程序间缓存......

这些都通过log4j配置文件合并到“主”日志中。我们可以将任何一个日志重新配置到不同的级别(例如,我们遇到了数据源的身份验证问题,因此我们调高了该源的调试级别,以找出我们的服务器环境中发生了哪些变化导致这种情况)

即使一些日志在一小时内滚动10mb(我们的最大文件大小)。 Log4j会将它们转换为.1和.2文件,因此我们可以根据需要保留10-50个文件。

所有这些都是通过配置文件完成的,可以在部署后更改,无需重建系统。

编辑2 - 另一个想法

关于使用log4j和java日志记录界面的另一个有用的观点是像hibernate这样的库可以通过xml文件配置而无需重建。

如果没有Log4j / java的日志API,您可以A)拥有一个自定义API来控制日志,B)只有默认日志记录,或者C)没有来自该子系统的日志记录。但是,由于Hibernate使用java的API,因此您可以在标准的文档化xml配置文件中设置“Hibernate”日志信息的日志级别,甚至可以将其日志重新路由到数据库或其他日志记录设备。

答案 1 :(得分:1)

日志记录对于查找生产代码中发生的错误特别有用。在开发过程中,您可以使用更强大的工具,如调试器。

当然,您必须意识到日志记录可能会影响性能,并且可能会创建大量文件。这就是为什么像log4j这样的工具可以配置为打开和关闭日志记录或控制其详细程度的原因。

使用log4j是可以的,因为它是Java最常用的库。但是我个人认为它的配置有点单一直观。

答案 2 :(得分:1)

使用Log4j等记录器的另一个原因是允许不同组件的不同日志记录级别。如果您为所有内容打开DEBUG,日志可能变得非常庞大和混乱。如果您知道要在日志中“放大”的代码区域,则可以单独调整该区域的日志记录。

答案 3 :(得分:0)

  1. 是(或任何其他日志框架/ SLF4J
  2. 没有