【问题标题】:Using log4j for logging with logback [closed]使用 log4j 通过 logback 进行日志记录 [关闭]
【发布时间】:2020-08-28 13:27:06
【问题描述】:

我想使用 log4j(不是 slf4j)和 logback.jar 一起进行日志记录。反正有这样做吗?我正在开发一个使用 log4j 的 Web 服务,我打算同时使用 logback.jar。

【问题讨论】:

  • 所以你想在你的代码中使用 Log4j API,但你实际上并不想要 Log4j 完成 logging,而是想要Logback 完成的日志记录?您想使用 Log4j 1.2 还是 Log4j 2 API?
  • 不,我正在使用 log4j API 进行日志记录,但我想将 logback 用于其他实现。
  • 其他的实现是什么? Log4j 和 Logback 都是完整的记录器实现,相互竞争。为什么要同时实现两个完整的单独的 logger 实现?
  • 实际上,现有代码使用 Log4j 1.2,我想添加一个将使用 Logback API 的新 jar。是否可以添加一些像 log4j-over-slf4j 这样的 jar 来继续使用相同的记录器而不更改以前的代码?
  • 新jar直接使用Logback,不是SLF4J?这是非常不寻常的。我什至不知道 Logback 有它自己的 API,我以为它总是使用 SLF4J 作为它的 API。

标签: java logging logback


【解决方案1】:

slf4j 项目提供了一些用于处理遗留日志的“桥接”jar。根据http://www.slf4j.org/legacy.html#log4j-over-slf4j:

log4j-over-slf4j


SLF4J 附带一个名为 log4j-over-slf4j 的模块。它允许 log4j 用户将现有应用程序迁移到 SLF4J,而无需更改一行代码,只需将 log4j.jar 文件替换为 log4j-over-slf4j.jar,如下所述。

它是如何工作的?


log4j-over-slf4j 模块包含最广泛使用的 log4j 类的替换,即 org.apache.log4j.Category、org.apache.log4j.Logger、org.apache.log4j.Priority、org.apache.log4j。级别、org.apache.log4j.MDC 和 org.apache.log4j.BasicConfigurator。这些替换类将所有工作重定向到其对应的 SLF4J 类。

要在您自己的应用程序中使用 log4j-over-slf4j,第一步是找到 log4j.jar,然后将其替换为 log4j-over-slf4j.jar。请注意,您仍然需要 SLF4J 绑定及其依赖项才能使 log4j-over-slf4j 正常工作。

在大多数情况下,从 log4j 迁移到 SLF4J 只需要替换一个 jar 文件。

请注意,由于此次迁移,log4j 配置文件将不再被拾取。如果您需要将 log4j.properties 文件迁移到 logback,log4j 转换器可能会有所帮助。配置logback,请参考其手册。

什么时候不工作?


当应用程序调用桥接器中不存在的 log4j 组件时,log4j-over-slf4j 模块将不起作用。例如,当应用程序代码直接引用 log4j 附加程序、过滤器或 PropertyConfigurator 时,log4j-over-slf4j 将不足以替代 log4j。但是,当通过配置文件配置 log4j 时,无论是 log4j.properties 还是 log4j.xml,log4j-over-slf4j 模块都应该可以正常工作。

在您的情况下,您需要将log4j-over-slf4j 与log4j12、logback-classic 和logback-core JAR 一起添加。您还需要在 logback 配置中重新实现 log4j 日志记录配置文件的相关部分。

【讨论】:

    【解决方案2】:

    你可以这样做。在您的情况下,它将是 log4j 和 SLF4j 的组合。 SLF4j 是一个外观库,它为 log4j、logback、java.util.logger 等日志库提供抽象,并且不执行实际日志记录。 因此,基本上 SLF4j 充当各种日志框架的简单外观或抽象,允许最终用户在部署时插入所需的日志框架。
    具体实现可以参考:https://medium.com/@krishankantsinghal/logback-slf4j-log4j2-understanding-them-and-learn-how-to-use-d33deedd0c46

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-05-06
      • 1970-01-01
      • 2014-10-25
      • 1970-01-01
      • 2014-04-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多