问题

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


#1 热门回答(125 赞)

src/main/resources是此的"标准安置"。

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

**注意:**如果要将具体日志配置保留给客户端/用户,则应考虑在应用程序中替换log4jwithslf4j


#2 热门回答(50 赞)

只需将它放入内容即可将其捆绑在内部。例如。如果你的工件是一个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-Pathmanifest条目将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选择Classpathtab,选择Advanced并浏览到你的src/resources目录。


#3 热门回答(23 赞)

一些"数据挖掘"帐户为src/main/resources是典型的地方。

结果于Google Code Search

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

原文链接