【问题标题】:migrating a project from log4j to slf4j+log4j将项目从 log4j 迁移到 slf4j+log4j
【发布时间】:2011-07-13 10:11:23
【问题描述】:

我有一个直接使用 log4j 的大型网络项目,以及许多 3rd-party 库和日志库的组合。

  • 我们的代码库 - 直接使用 log4j。
  • Hibernate - 使用 slf4j 和 slf4j-log4j 绑定。
  • Spring - 使用公共日志记录。因此,它使用 jcl-over-slf4j 桥 api、slf4j 本身和 slf4j-log4j 绑定。
  • 其他众多库,使用公共日志记录或 log4j。

我正在考虑将我们自己的代码库迁移到 slf4j api,但我不确定好处是否足够强大并且值得付出努力。目前我知道以下好处:

  • 更清洁的 api。
  • 性能改进 - 即使用参数化日志记录方法的能力。
  • 将来能够轻松切换到 logback(目前无法使用 logback)。
  • 不需要额外的罐子,因为我已经有了。

还有其他好处吗?有什么我不知道的缺点吗?

【问题讨论】:

  • Spring 不使用 SLF4J,它使用 Apache Commons Logging
  • Java 日志记录及其 350,000 种不同的实现:多么棒的 PITA。祝你好运@Yoni。
  • 就我个人而言,我认为像 String.format 这样的日志记录方法语义值得付出一些努力。 isDebugEnabled() 不再用于昂贵的日志调用:)
  • @skaffman,也许我也在使用 jcl-over-slf4j 桥接器。我不得不承认我记不太清了,而且我现在无法访问代码。

标签: java logging log4j slf4j


【解决方案1】:

我看到切换的唯一好处是,您可以通过一个框架汇集所有日志记录框架,这可能会简化您的配置。

我迁移到 slf4j(这仅适用于 slf4j + logback)的主要原因可能是您可以reload the configuration via JMX,当您遇到问题并随着服务器重启而消失时,这非常棒。

【讨论】:

  • 感谢您对 jmx 和 logback 的深入了解。虽然这不是我要问的,但仍然非常有用的输入
【解决方案2】:

对我来说,除了你已经提到的那些之外,还有四个“杀手级”功能值得迁移到 Logback 的痛苦(我个人切换了我当前的主要项目,工作完美无缺):

  • 自动重新加载配置文件。 这对于生产系统来说非常棒。如果您只想将“调试”设置为一个类,而不是关闭整个系统,那么这个是无价的。
  • 能够在配置中使用包含文件。这允许您为所有服务/JVM 拥有一组“主”日志记录设置,然后您可以指定任何可能需要特殊处理的包。我们目前有大约 10 个服务,它们都有一个很大但大部分相似的 log4j.xml 副本。我们现在将其更改为一个主 logback 配置文件,并将该文件包含在每个服务的 logback 配置文件中。主文件仍然很大,但特定于服务的文件应该非常小。更易于维护。
  • 条件处理。这样您可以指定诸如“如果 QAServer => 然后将日志记录级别设置为“DEBUG”,否则设置为“INFO”。同样,非常适合拥有不需要的单个配置在生产服务器和开发/QA 服务器之间进行更改。
  • 自动压缩和删除旧日志文件。您可以指定要保留多少归档文件,也可以选择压缩它们。创建n+1个文件后,它会检测到一个太多,并删除最旧的一个。同样,可根据文件/服务进行配置,无需执行任何特定于系统的操作(批处理文件和/或脚本)。

顺便说一句,在进行此更改后,切换回 log4j 非常容易。由于迁移到 Logback 需要使用 Log4j 也支持的 SLF4J,因此来回切换只需要您选择要删除的 jar 文件(Log4j 或 Logback)。只要相应的 log4j.xml 或 logback 配置文件在类路径中,日志记录就会正常工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-20
    • 1970-01-01
    • 1970-01-01
    • 2018-05-08
    • 1970-01-01
    • 2012-04-10
    相关资源
    最近更新 更多