Java 如何在Maven下管理多个log4j.properties文件中的依赖关系?

Java 如何在Maven下管理多个log4j.properties文件中的依赖关系?,java,maven,log4j,Java,Maven,Log4j,我有一个maven项目,它有几个依赖项,并使用log4j.properties控制输出。在某些情况下,同一类可能在具有不同参数的不同属性文件中引用。是否定义了“覆盖”属性的协议,或者它是否取决于加载包的顺序 (我正在查找所有log4j.properties直接位于src/main/resources-这是正确的位置吗?) 更新: 我已经接受了@Assen的答案,因为它是有道理的,尽管它不能使解决方案变得简单。本质上,他建议从jar中排除log4j.properties。原则上我同意,但是它给用户

我有一个maven项目,它有几个依赖项,并使用
log4j.properties
控制输出。在某些情况下,同一类可能在具有不同参数的不同属性文件中引用。是否定义了“覆盖”属性的协议,或者它是否取决于加载包的顺序

(我正在查找所有
log4j.properties
直接位于
src/main/resources
-这是正确的位置吗?)

更新: 我已经接受了@Assen的答案,因为它是有道理的,尽管它不能使解决方案变得简单。本质上,他建议从jar中排除log4j.properties。原则上我同意,但是它给用户带来了控制输出的负担,我的大多数用户都不知道Java是什么,更不用说属性文件了。
也许有一种方法可以重命名每个jar中的属性文件,并使用开关(可能带有-D)激活属性

我经常就项目进行类似的讨论。我认为log4j.properties通常是您希望将其排除在应用程序之外的东西,而不是将其打包并与代码一起交付。日志记录配置:

  • 是特定于环境的。编写应用程序时,无法定义所需的附加器、文件位置等
  • 它的生命周期与应用程序的生命周期完全不同。部署应用程序后,日志属性可以每天更改几次。重新部署应用程序不应覆盖上次的日志记录设置
那么,为什么要将日志记录配置与代码一起打包?我通常会在某个地方保存一个配置文件夹,其中包含“dev”、“test-server-01”、“macbook john”等soubfolder。每个子文件夹都包含自己的log4j.properties副本。它们都不包括在构建工件中——jar或war

部署时,其中一个子文件夹将单独交付。对于测试服务器1,这将是test-server-01子文件夹的内容。根据所使用的应用程序服务器,在类路径上放置一些文件是一种不同的技巧


开发时,我会注意在路径上设置其中一个子文件夹。当John在他的macbook上开发时,他可能希望将“macbook jihn”放在类路径上,或者创建一个新的类路径。他可以更改日志设置并提交,而不会产生冲突。

您可以发布一些示例吗?是的,应用程序资源最合适的位置是
src/main(或者test,如果它们属于测试阶段)/resources
。(我无法控制,通过maven使用)。如果处理某些类型的文档(它报告异常情况),PDFBox可以有大量的调试/信息输出。我有两个包,PDF2SVG(它依赖于PDFBox,有一个log4j.properties来控制它和PDFBox的输出)。它还使用(我的)库EUCLID,它也有log4j.properties。下一个软件包SVGPlus依赖于PDF2SVG,并具有自己的log4j.properties和更严格的控制。我发现我无法控制+1使用的属性。我认为您可能是对的,log4j.properties不应该包含在JAR文件中,但欢迎您提供其他体验。