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

问题描述 投票:117回答:6

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

java maven configuration log4j
6个回答
131
投票

src/main/resources是这个的“标准位置”。

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

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


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目录。


25
投票

一些“数据挖掘”说明src/main/resources是典型的地方。

关于Google Code Search的结果:

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

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中,这些文件被设置为配置文件,但它们是完全不同的用例。现在,您可以忽略它们。

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


5
投票

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

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

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


1
投票

如果在src / main / resources下找不到log4j.properties或log4j.xml文件,则使用此PropertyConfigurator.configure(“log4j.xml”);

   PropertyConfigurator.configure("log4j.xml");
   Logger logger = LoggerFactory.getLogger(MyClass.class);
   logger.error(message);
© www.soinside.com 2019 - 2024. All rights reserved.