如果使用maven,通常你将log4j.properties放在java或资源下?

时间:2011-02-27 09:24:38

标签: java maven configuration log4j

在使用传统的Maven目录时,我应该在哪里放置log4j.properties文件?

7 个答案:

答案 0 :(得分:131)

src/main/resources 是此的“标准展示位置”。

更新:以上回答了问题,但这不是最佳解决方案。查看其他答案和对此的评论......您可能不会使用jar发送自己的日志记录属性,而是将其留给客户端(例如app-server,stage environment等)来配置所需的日志记录。因此,将其放入src/test/resources是我的首选解决方案。

注意:说到将具体的日志配置留给客户/用户,您应该考虑在应用中将log4j替换为slf4j

答案 1 :(得分:57)

只需将其放入src/main/resources即可将其捆绑在工件内。例如。如果您的工件是JAR,那么您将在其中包含log4j.properties文件,从而失去了使日志记录可配置的初始点。

我通常将它放在src/main/resources中,并将其设置为输出到目标,如下所示:

<build>
    <resources>
        <resource>
            <directory>src/main/resources</directory>
            <targetPath>${project.build.directory}</targetPath>
            <includes>
                <include>log4j.properties</include>
            </includes>
        </resource>
    </resources>
</build>

此外,为了让log4j实际看到它,您必须将输出目录添加到类路径中。 如果您的工件是可执行的JAR,您可能使用maven-assembly-plugin来创建它。在该插件中,您可以通过添加Class-Path清单条目将JAR的当前文件夹添加到类路径中:

<plugin>
    <artifactId>maven-assembly-plugin</artifactId>
    <configuration>
        <archive>
            <manifest>
                <mainClass>com.your-package.Main</mainClass>
            </manifest>
            <manifestEntries>
                <Class-Path>.</Class-Path>
            </manifestEntries>
        </archive>
        <descriptorRefs>
            <descriptorRef>jar-with-dependencies</descriptorRef>
        </descriptorRefs>
    </configuration>
    <executions>
        <execution>
            <id>make-assembly</id> <!-- this is used for inheritance merges -->
            <phase>package</phase> <!-- bind to the packaging phase -->
            <goals>
                <goal>single</goal>
            </goals>
        </execution>
    </executions>
</plugin>

现在,log4j.properties文件将紧挨着您的JAR文件,可以独立配置。

要直接从Eclipse运行应用程序,请在运行配置中将resources目录添加到类路径中:Run->Run Configurations...->Java Application->New选择Classpath选项卡,选择Advanced并浏览到你的src/resources目录。

答案 2 :(得分:25)

src/main/resources的某些“数据挖掘”帐户是典型的地方。

Google Code Search的结果:

  • src/main/resources/log4j.properties:4877
  • src/main/java/log4j.properties:215

答案 3 :(得分:9)

用于初始化项目的资源最好放在 src / main / resources 文件夹中。要在构建期间启用这些资源的加载,可以在maven项目的pom.xml中添加条目作为构建资源

<build>
    <resources>
        <resource>
            <directory>src/main/resources</directory>
            <filtering>true</filtering> 
        </resource>
    </resources>
</build> 

其他.properties文件也可以保存在用于初始化的文件夹中。 如果要在资源文件夹的属性文件中包含一些变量并将其填充到配置文件过滤器属性文件中,则过滤设置为true,这些文件保存在src / main / filters中,设置为 profiles 但是它完全是一个不同的用例。现在,你可以忽略它们。

这是一个很棒的资源maven resource plugins,它很有用,只是浏览其他部分。

答案 4 :(得分:5)

将资源文件放在其他位置并不是您可以使用的最佳解决方案:

<build>
  <resources>
    <resource>
      <directory>src/main/java</directory>
      <excludes>
        <exclude>**/*.java</exclude>
      </excludes>
    </resource>
  </resources>
<build>

例如,当资源文件(例如jaxb.properties)与Java类一起深入到包内时。

答案 5 :(得分:1)

如果在src / main / resources下找不到log4j.properties或log4j.xml文件,请使用此PropertyConfigurator.configure(&#34; log4j.xml&#34;);

   PropertyConfigurator.configure("log4j.xml");
   Logger logger = LoggerFactory.getLogger(MyClass.class);
   logger.error(message);

答案 6 :(得分:0)

在build标记内的pom.xml中的资源标记中添加以下代码。 因此,这意味着资源标签必须位于pom.xml中的构建标签内

<build>
    <resources>
        <resource>
            <directory>src/main/java/resources</directory>
                <filtering>true</filtering> 
         </resource>
     </resources>
<build/>