If using maven, usually you put log4j.properties under java or resources?
 
在使用常规Maven目录时,应该将log4j.properties文件放在哪里? 
		
		
- src / test / resources-工件的使用者将设置部署所需的日志记录级别。但是,如果您要进行商业工作,我建议您使用slf4j。这提供了在部署时切换日志记录框架的选项。 slf4j.org
 
- 
顺便说一句,如果您只是想尝试它,可以在没有properties / xml配置文件的情况下使用log4j。从\\'logging.apache.org/log4j/1.2/manual.html-配置\\'"对BasicConfigurator.configure方法的调用创建了一个相当简单的log4j设置。"另请参见:logging.apache.org/log4j/ 1.2 / apidocs / org / apache / log4j / ... maven.apache.org/plugins/maven-resources-plugin/examples / ...
 
 
	  
 src/main/resources是它的"标准位置"。
更新:上面的内容回答了这个问题,但这并不是最佳的解决方案。查看其他答案和对此的评论...您可能不会将自己的日志记录属性与jar一起交付,而是将其留给客户端(例如,app-server,舞台环境等)来配置所需的日志记录。因此,将其放入src/test/resources是我的首选解决方案。
注意:说到将具体的日志配置留给客户端/用户,您应该考虑在应用程序中用slf4j替换log4j。 
		
		
- 我发现没有创建资源目录。我需要手动进行吗?
 
- 
是的。在答案中提到的文件夹中手动创建resources和log4j.properties。
 
- 
@ user496949:默认情况下,src/main/resources下的文件将被复制到target/classes
 
- 
除非您打算将log4j设置导出为工件的一部分,否则最好将其放在src / test / resources下
 
- 
为什么更好,但是在src / test下呢?
 
- 
@FerasOdeh将其从生成的工件(jar,战争等)中排除,仅在测试期间使用,"除非您打算将log4j设置作为工件的一部分导出"。
 
- 
这真是愚蠢。通常,您需要在jar的外部(或旁边)具有日志记录和应用属性。这样一来,您就可以修改其内容,而无需重新打包所有内容……或者告诉我,普通的应用程序属性也应该作为标准的行家之作而放在jar中?
 
- 
假设如果我们需要在测试环境和产品环境中使用不同的log4j设置-我们如何在Maven中做到这一点? src / main / resources-产品?和src / test / resources-测试?
 
- 
正在进行很多讨论,我更新了我的答案(很久以前)来反映这些方面。我自己不再将日志记录属性包含在我的jar中。
 
- 
@JanGalinski-可以在pom文件中定义log4j附加程序吗?
 
- 
不,我会知道的。您可以通过maven以某种方式生成log4j.properties。
 
 
	  
只需将其放入src/main/resources即可将其捆绑在工件中。例如。如果工件是JAR,则将在其中包含log4j.properties文件,从而失去了使日志可配置的最初目的。
我通常将其放在src/main/resources中,并将其设置为像这样输出到目标:
1 2 3 4 5 6 7 8 9 10 11
   | <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的当前文件夹添加到类路径,如下所示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
   | <plugin> 
    maven-assembly-plugin</artifactId> 
    <configuration> 
         
            <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 / test / resources下,以免被捆绑。
 
- 
哇。感谢那。这正是我所需要的!
 
- 
@Zoltán,我发现很难按照您的建议将输出目录添加到类路径中。有没有一种方法可以手动完成,例如进入特定项目的.classpath文件并在其中添加此log4j输出目录,以便在将应用程序捆绑到.war文件后,log4j可以看到.properties文件。另外,targetPath标记是否应该按原样使用${project.build.directory}值,或者应将其编辑为项目在本地驱动器中所在的实际路径?
 
 
	  
一些"数据挖掘"说明src/main/resources是典型的位置。
 Google代码搜索的结果:
- 
src/main/resources/log4j.properties:4877
 
- 
src/main/java/log4j.properties:215
 
		
		
- 
这个答案与20分钟前的答案在任何方面有何不同?另外,如果我没记错的话,它是resources而不是resource。
 
- 
@Nishant:没什么不同,因为当我打开答案框时,我离开了PC。回到并回答问题后,我错过了该问题已被回答的机会。 resource只是一个错字。
 
- 
@splash没关系。一个好主意是,当警告消息出现在顶部并显示"有1个新答案"时,请查看新答案。
 
- 
将其放在src / java下是不正确的-请不要发布不正确的Google搜索。
 
- 
@David Victor:Google搜索src/main/java是正确的,否则不会导致215个匹配项。看不到您的问题。
 
- 
我建议阅读有关Maven,Maven编译器插件,Maven项目布局的约定的一些资料。也许看看构建工件时\\ target下的位置。然后,也许您可??以修改答案。
 
- 
@大卫·维克多(David Victor):对不起,大卫,我还是听不懂你的话。我知道src/main/java不是常规位置,但是OP会询问通常情况,我认为一些统计数据对于显示如何应用约定很有用。也许您很困惑,因为您在第一个评论中是指src/java?
 
- 
正确的答案是src / xxx / resources-这不是约定。参见:maven.apache.org/plugins/maven-resources-plugin/examples/…-这里的'xxx \\'可能是'main \\'或\\'test \\'。除非您希望提供预配置的日志记录级别,否则通常更明智的做法是根据测试的需要(通过\\'src / test / resources \\')配置日志记录,并允许工件的使用者设置日志记录级别。
 
- 
@戴维克多:我完全同意你的看法。我仅使用src/test/resources进行测试。在生产系统上,通过弹簧豆注入测井配置。
 
- 
很高兴听见。 :-)因此,将其反映在您的答案中可能会有所帮助。
 
- 
Google"跳下桥"的搜索结果:18.200.000。 Google的"请勿跳下桥"结果:137.000
 
- 
@djjeck:很遗憾,我无法在Google Code中搜索"Jump off a bridge"。也会很有趣。 ;-)
 
 
	  
用于初始化项目的资源最好放在src / main / resources文件夹中。为了在构建过程中加载这些资源,可以简单地在maven项目的pom.xml中添加条目作为构建资源
1 2 3 4 5 6 7 8
   | <build> 
    <resources> 
        <resource> 
            <directory>src/main/resources</directory> 
            <filtering>true</filtering>  
        </resource> 
    </resources> 
</build>  | 
 
其他.properties文件也可以保留在此文件夹中,用于初始化。
如果要在资源文件夹的属性文件中包含一些变量,并从配置文件过滤器属性文件中填充变量,则将过滤设置为true,这些文件保存在设置为配置文件的src / main / filters中,但完全是另一种用例。现在,您可以忽略它们。
这是一个很棒的资源maven资源插件,它很有用,也可以浏览其他部分。
		
		
- 
如果您只是复制并粘贴上面的Maven代码段,请注意,它是</ resources> </ build>
 
 
	  
将资源文件放置在另一个位置不是最佳解决方案时,可以使用:
1 2 3 4 5 6 7 8 9 10
   | <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"); 
1 2 3
   |    PropertyConfigurator.configure("log4j.xml"); 
   Logger logger = LoggerFactory.getLogger(MyClass.class); 
   logger.error(message);  | 
 
在pom.xml的build标记内,从resources标记中添加以下代码。
因此,这意味着资源标签必须位于pom.xml 
中的构建标签内
1 2 3 4 5 6 7 8
   | <build> 
    <resources> 
        <resource> 
            <directory>src/main/java/resources</directory> 
                <filtering>true</filtering>  
         </resource> 
     </resources> 
<build/>  |