java - 像 log4j 这样的日志记录工具只在开发阶段有用吗?

标签 java logging log4j log4j2

我需要记录连接到我的服务器的用户的 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/

相关文章:

java - 父类(super class)中没有可用的构造函数(Java)

java - log4j 不写入 tomcat7(ubuntu 服务器)上的日志文件

apache - 无法解析 Log4j-core 2.3 上的 BasicConfigurator 类

java - String赋值会导致内存泄漏吗?

java - 如何在android中制作完整 ScrollView 的图像

c# - 如何在同一解决方案中使用来自多个项目的 NLog

c++ - 每个类(class)都有不同的 boost 日志接收器

java - 为在 yarn 模式下运行的每个 spark 作业配置 log4j

java - String[] 到 BigDecimal[]

wolfram-mathematica - 对数间隔数