1

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

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

4

1 回答 1

1

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

  1. Log4j 将检查“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”。也许这个转换器可以帮助你。

还请查看文档(这就是我从中获得此列表的地方)。

于 2019-10-30T20:04:32.783 回答