默认情况下,log4j似乎会查找类文件夹的根目录,我可以通过使用调试log4j功能并从IDE运行我的应用程序来确认这一点。
然而,我的jar包中已经没有任何类文件夹了。而log4j.xml文件位于jar包的根目录。
我已经尝试设置选项-Dlog4j.configuration=log4j.xml,但它不起作用。
以下是我应用程序当前的全局结构:
- com
- lib
- meta-inf
- log4j.xml
它使用CLASSPATH查找log4j.xml配置文件。如果log4j没有找到任何配置文件,它将向控制台发送错误信息。如果您没有看到任何此类错误,则可能是它正在找到一个配置文件,但这个配置文件可能不是您正在编辑的配置文件。有一种命令行选项可以强制Log4J报告其正在使用的配置文件路径。
来自http://wiki.apache.org/logging-log4j/Log4jConfigurationHelp
如果你使用“-Dlog4j.debug”运行,log4j将打印出信息到标准输出,告诉你它如何尝试配置自己。查看那些信息将告诉您它正在寻找哪个配置文件。
假设您的log4j配置文件在源代码树之外。如果找不到配置文件,请使用以下命令进行帮助:
-Dlog4j.configuration=file:///your/path/log4j.xml
请注意限定词file:///。没有这个限定词将无法正常工作。
也许这是一个非常老的问题,但对我来说,答案在官方的Log4j 2文档中:
Log4j有能力在初始化期间自动配置自己。当Log4j启动时,它会定位所有的ConfigurationFactory
插件,并按权重从高到低排列。Log4j提供了四个ConfigurationFactory
实现:JSON、YAML、属性和XML。
"log4j2.configurationFile"
系统属性,如果设置了,则尝试使用与文件扩展名匹配的ConfigurationFactory
加载配置。请注意,这不限于本地文件系统上的位置,也可能包含URL。log4j2-test.properties
。log4j2-test.yaml
或log4j2-test.yml
。log4j2-test.json
或log4j2-test.jsn
。log4j2-test.xml
。log4j2.properties
。log4j2.yaml
或log4j2.yml
。log4j2.json
或log4j2.jsn
。log4j2.xml
。DefaultConfiguration
。这将导致日志输出到控制台。"log4j.configurationFile"
加载它...... 我只能从根资源文件夹加载它,我做错了什么吗?(备注:#163489028) - ycomp我没有任何错误。
所以log4j已经找到了你的配置,否则你会收到以下提醒:
log4j:WARN No appenders could be found for logger ().
log4j:WARN Please initialize the log4j system properly.
此外:
日志只是在控制台上打印出来。
这意味着你可能需要定义一个文件appender,如FileAppender或RollingFileAppender。在简短介绍的"配置"部分有一些示例。
您可以使用:
DOMConfigurator.configure(log4jConfigurationFilename);
如果位置不在根目录下,请指定位置!
不用担心放在哪里。只需运行您的项目,比如在eclipse中,log4j会抛出一个异常,告诉您它正在寻找的位置。然后您可以将其放置在那里。
一旦您使其正常工作,您也会逐渐理解逻辑并学会如何进行更改。
src/main/resources
文件夹中,无需任何其他配置。 - OneWorld