在使用传统的Maven目录时,我应该在哪里放置log4j.properties文件?
src/main/resources
是这个的“标准位置”。
更新:上面回答了问题,但它不是最好的解决方案。查看其他答案和对此的评论......您可能不会使用jar发送自己的日志记录属性,而是将其留给客户端(例如app-server,stage environment等)来配置所需的日志记录。因此,把它放在src/test/resources
是我的首选解决方案。
注意:说到将具体的日志配置留给客户端/用户,您应该考虑在应用中用log4j
替换slf4j
。
把它放在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
目录。
一些“数据挖掘”说明src/main/resources
是典型的地方。
关于Google Code Search的结果:
src/main/resources/log4j.properties
:4877src/main/java/log4j.properties
:215用于初始化项目的资源最好放在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,它很有用,只是浏览其他部分。
将资源文件放在另一个位置不是您可以使用的最佳解决方案:
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<excludes>
<exclude>**/*.java</exclude>
</excludes>
</resource>
</resources>
<build>
例如,当资源文件(例如jaxb.properties)与Java类一起深入到包内时。
如果在src / main / resources下找不到log4j.properties或log4j.xml文件,则使用此PropertyConfigurator.configure(“log4j.xml”);
PropertyConfigurator.configure("log4j.xml");
Logger logger = LoggerFactory.getLogger(MyClass.class);
logger.error(message);