大量处理批次(10-12 小时)的 log4j 性能

log4j performance on huge treatment batch (10-12h)

我想知道是否有人观察到日志文件中的大量日志写入(如果处理 4 小时则为 30 万行)是否会影响批处理性能。

P1:批处理在日志文件中写入大量信息,我怀疑如果我们删除或注释源代码中的所有这些日志写入,批处理性能可能会提高并获得 15 分钟或更多的执行时间.

我们可以在一次完整的批处理(8-12 小时)中处理一百万行或更多行。

P2: 或者数据库检查和日志写入可以并行完成?但我认为我们的源代码不会那样做。

嗯,是的。过多的日志记录 影响性能。但要了解它对性能的影响有多大,唯一的方法就是对其进行测量。

P1: The batch writes a lot of info in the logfile and I'm in doubt if we delete or comment all this log writes in source code the batch performance could be increased and gain 15 min or more in time execution.

没有人能告诉你你会获得多少时间。 (如果你得到那么多我会感到惊讶,但我可能是错的。测量它!!)


P2: Or database check and log writes could be done in parallel ? But i thought our source code doesn't do that.

将并行日志显式编码到您的应用程序中可能不是一个好主意,因为这会使您的代码复杂得多。还有一种更好的方法来获得一些并行性:尝试使用异步附加程序。


您可以通过多种方式来调整日志记录性能,而不必竭尽全力。其中包括:

  • 切换到不同的日志库。例如,log4j 2.x 应该比 log4j 1.2.
  • 更高效
  • 不要记录太多。
  • 在适当的级别登录,并根据情况调整日志级别。
  • 确保您正在有效地创建日志消息。例如,避免生成因日志记录级别而不会被记录的复杂消息字符串。 (在 log4j 2.x 中,使用采用格式字符串的 Logger 方法。)
  • 避免在日志格式/格式化程序中使用昂贵的功能。例如记录 class / 方法相对昂贵。
  • 尝试使用异步日志附加器。

有关日志记录性能的一些背景信息,请查看 log4j2 Performance 页面。