试图让log4j1.x与log4j2.x一起工作

时间:2015-12-14 17:16:34

标签: log4j2

我已成功将我们的应用程序从log4j 1.x迁移到log4j 2.x. 但是有一个外部组件无法迁移。对log4j 1.x的意义调用应保持原样。

我的应用程序有log4j2.xml,外部组件有旧的log4j.properties。我在log4j2.xml中获取了appender的日志,但没有为log4j.properties中定义的日志。我看了帖子 - Mixing log4j 1.x and log4j 2

并添加了所需的罐子。之前使用log4j 1.x我们曾经有2个log4j.properties - 一个用于applciation,另一个用于使用PropertyConfigurator的外部组件。现在使用log4j2.xml我不知道如何实现这一点。

Configuring log4j2 and log4j using a single log4j2 xml file 这篇文章说我们不能在类路径中有log4j.properties。这是否意味着我需要将log4j.properties中定义的所有appender传输到log4j2.xml?我是否可以为外部组件设置单独的log4j2.xml。

1 个答案:

答案 0 :(得分:1)

您不能有两个log4j2.xml配置(好吧,单独的Web应用程序可以有单独的配置,但通常每个进程都有一个配置)。

选项1:最简单的方法是使用网桥log4j-1.2-api-2.x.jar并将log4j.properties配置合并到log4j2.xml 。然后所有日志记录都由lo4j 2完成,它应该都可以工作。

如果你想以艰难的方式做事,你可能会取得成功,但这可能需要一些小事。

选项2:如果通过"将我们的应用程序从log4j 1.x迁移到log4j 2.x"你的意思是你的应用程序现在使用log4j 2 API,那么你应该能够同时使用log4j 1.x到log4j 2。 (外部组件的log4j 1.x。)

在这种情况下,不使用网桥log4j-1.2-api-2.x.jar 。如果您使用网桥,它会将对log4j 1.x API的调用路由到log4j 2.通常这就是您想要的,但在这种情况下,听起来您的外部组件想要使用log4j 1.x内部。 (这是真的吗?如果没有,请考虑选项1.)

如果您的应用程序现在使用log4j 2 API(外部组件除外),则将这些jar和配置文件放在类路径中:

  • 的log4j-API-2.x.jar
  • log4j的核 - 2.x.jar
  • 的log4j-1.2.x.jar
  • log4j2.xml - 应用程序的log4j 2配置
  • log4j.properties - 外部组件的log4j 1.x配置

但同样,简单地合并配置可能更容易维护。