Log4J覆盖子项目中的属性

时间:2015-11-15 14:04:34

标签: maven logging log4j dependencies hierarchy

问题: 如何覆盖maven模块中的log4j.properties,该模块依赖于设置log4j.properties的模块?

问题描述:

我有一个项目,它包含一个Web应用程序和一个执行日常任务的jar。 最近我希望为每个文件记录不同的文件。

他们同时使用包含DAO连接,助手类等的通用jar。 log4J包含在公共模块中,因为日志记录发生在那里,以及依赖于公共模块的其他模块。

我正在使用maven来编译和打包所有三个模块(common,webApp,nightlyTasks)。

所有模块都使用包含以下内容的常见maven settings.xml文件:

<logging.folder>W:/WorkEnv/logs</logging.folder>
<logging.file>cars.log</logging.file>
<nightly.logging.file>carsNightly.log</nightly.logging.file>

在公共模块中,我有以下内容:

在pom.xml中:

  <!--Logging-->
  <dependency>
      <groupId>log4j</groupId>
      <artifactId>log4j</artifactId>
      <version>1.2.17</version>
  </dependency>
log4j.properties中的

log=${logging.folder}
log4j.appender.FILE=org.apache.log4j.FileAppender
log4j.appender.FILE.File=${log}/${logging.file}

一切正常 - 公共和Web应用程序模块执行的所有日志记录都转到W:/WorkEnv/logs/cars.log

在carsNighly模块中,我包含对公共模块的依赖:

    <!-- carsCommon -->
    <dependency>
        <groupId>com.alton.cars</groupId>
        <artifactId>carsCommon</artifactId>
        <version>1.0-SNAPSHOT</version>
    </dependency>

并且在carsNightly中我还包含一个log4j.properties文件,其中包含以下内容:

#Use properties in jobsCommon and override here

log=${logging.folder}
log4j.appender.FILE.File=${log}/${nightly.logging.file}

(即使logging.folder是相同的,我已经包含它了,因为它在下一行被引用,但结果是相同的两种方式)

但是,carsNightly模块不会记录到不同的文件 - 它的输出被放在cars.log中

所以再问一遍: 如何覆盖maven模块中的log4j.properties,该模块依赖于设置log4j.properties的模块?即如何在carsNightly模块中设置log4j.properties,它们是公共模块中相同属性的不同值?

提前致谢。

0 个答案:

没有答案