【问题标题】:How are dependencies in multiple log4j.properties files managed under Maven?Maven 下如何管理多个 log4j.properties 文件中的依赖关系?
【发布时间】:2012-12-04 01:40:36
【问题描述】:

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

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

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

【问题讨论】:

  • 你能发布一些例子吗?是的,最适合您的应用程序资源的地方是src/main(or test, if they belong to test phase)/resources
  • 我正在使用子类化 Apache PDFBox 项目 (pdfbox.apache.org) 的代码。 (我无法控制,通过 maven 使用)。如果处理某些类型的文档(它报告异常情况),PDFBox 可以有大量的 DEBUG/INFO 输出。我有两个包,PDF2SVG(它依赖于 PDFBox 并且有一个 log4j.properties 来控制它的输出和 PDFBox 的输出)。它还使用(我的)库 EUCLID,它也有一个 log4j.properties。下一个包 SVGPlus 依赖于 PDF2SVG,并且有自己的 log4j.properties,控制更严格。我发现我无法控制使用的属性

标签: java maven log4j


【解决方案1】:

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

  • 是特定于环境的。编写应用程序时,您根本无法定义所需的附加程序、文件位置等。
  • 它的生命周期与应用程序的完全不同。部署应用程序后,日志记录属性一天可以更改数次。重新部署应用程序不应覆盖您上次的日志记录设置。

那么为什么要将日志记录配置与您的代码打包在一起呢?我通常在某个地方保存一个配置文件夹,其中包含“dev”、“test-server-01”、“macbook-john”等子文件夹。每个子文件夹都包含列表自己的 log4j.properties 副本。它们都不包含在构建工件中 - jar 或战争。

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

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

【讨论】:

  • +1。我认为您可能是对的,log4j.properties 不应该包含在 JAR 文件中,但欢迎其他经验。
猜你喜欢
  • 2019-09-03
  • 1970-01-01
  • 2013-09-03
  • 2012-06-30
  • 1970-01-01
  • 2010-09-24
  • 2013-06-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多