【问题标题】:Creating Uber/Fat Jars with Log4j使用 Log4j 创建 Uber/Fat 罐子
【发布时间】:2019-10-30 19:33:53
【问题描述】:

我正在使用 maven 程序集插件创建一个 uber jar。我的程序的依赖项之一是一个应用程序,它既可以通过线程在我的程序内部启动,也可以独立启动,因为它是它自己的 uberjar。

我的问题是两个应用程序都使用 log4j2 并且在资源文件夹中都有一个 log4j2.xml。当 maven 使我的应用程序成为 uberjar 时,它会用依赖项中的配置文件覆盖我的应用程序 log4j.xml 配置文件。有没有办法解决这个问题,同时仍然允许两个应用程序在资源文件夹中拥有配置文件?

【问题讨论】:

  • uber-jar 是不是 fat-jar 的新名字? maven 插件中有一种方法可以在制作 fat-jar IIRC 时排除某些依赖项
  • 是的,我一直交替使用它们。
  • @maksimov 是的,但这不包括整个依赖项。我只需要从其中一个依赖项中排除特定资源。

标签: java maven log4j2 uberjar runnable-jar


【解决方案1】:

Log4j 启​​动时会按照从高到低的加权顺序定位配置:

  1. Lo​​g4j 将检查“log4j.configurationFile”系统属性,如果设置,将尝试使用与文件扩展名匹配的 ConfigurationFactory 加载配置。
  2. 如果未设置系统属性,则 ConfigurationFactory 将在类路径中查找 log4j2-test.properties。
  3. 如果未找到此类文件,YAML ConfigurationFactory 将在类路径中查找 log4j2-test.yaml 或 log4j2-test.yml。
  4. 如果未找到此类文件,JSON ConfigurationFactory 将在类路径中查找 log4j2-test.json 或 log4j2-test.jsn。
  5. 如果未找到此类文件,XML ConfigurationFactory 将在类路径中查找 log4j2-test.xml。
  6. 如果找不到测试文件,属性 ConfigurationFactory 将在类路径中查找 log4j2.properties。
  7. 如果找不到属性文件,YAML ConfigurationFactory 将在类路径中查找 log4j2.yaml 或 log4j2.yml。
  8. 如果找不到 YAML 文件,JSON ConfigurationFactory 将在类路径中查找 log4j2.json 或 log4j2.jsn。
  9. 如果找不到 JSON 文件,XML ConfigurationFactory 将尝试在类路径中找到 log4j2.xml。
  10. 如果找不到配置文件,将使用 DefaultConfiguration。这将导致日志输出转到控制台。

因此,最简单的方法是将 log4j.xml 移动到资源目录中的子文件夹,并使用属性“log4j.configurationFile”定义这个。否则只需切换到属性基础配置文件“log4j2.properties”。也许这个converter 可以帮助你。

还请查看documentation(我从那里获得此列表)。

【讨论】:

  • 请注意,我修改了名称使用: static { System.setProperty("log4j.configurationFile", "log4j2config.xml"); }
猜你喜欢
  • 1970-01-01
  • 2015-04-12
  • 2016-12-30
  • 1970-01-01
  • 1970-01-01
  • 2021-08-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多