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

2022-08-31 08:05:40

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


答案 1

src/main/resources 是其中的“标准放置”。

更新:以上回答了这个问题,但它不是最好的解决方案。查看其他答案和对此的评论...您可能不会随 jar 一起提供自己的日志记录属性,而是将其留给客户端(例如应用服务器、暂存环境等)来配置所需的日志记录。因此,将其放入是我的首选解决方案。src/test/resources

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


答案 2

只需将其放入即可将其捆绑在工件中。例如,如果你的工件是一个JAR,你将有文件在其中,失去其使日志记录可配置的初始点。src/main/resourceslog4j.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来创建它。在该插件中,您可以通过添加清单条目将JAR的当前文件夹添加到类路径中,如下所示:Class-Path

<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 运行应用程序,请将该目录添加到运行配置的类路径中:选择选项卡,选择并浏览到您的目录。resourcesRun->Run Configurations...->Java Application->NewClasspathAdvancedsrc/resources


推荐