我们如何指定log4j在尝试查找其xml配置文件时必须查看?
似乎默认情况下,log4j会查看类文件夹的根目录,我可以说使用调试log4j功能并从IDE运行我的应用程序。
但是,我的jar中没有任何类文件夹了。 log4j.xml文件位于jar的根目录。
我已经尝试设置选项-Dlog4j.configuration = log4j.xml但它不起作用。
以下是我的应用程序的全局结构:
答案 0 :(得分:32)
它使用CLASSPATH找到log4j.xml。如果log4j找不到任何配置文件,它将向控制台发送错误。如果您没有看到任何此类错误,则可能是它找到的配置文件可能不是您正在编辑的配置文件。有一个命令行选项可强制Log4J报告它正在使用的配置文件的路径。
来自http://wiki.apache.org/logging-log4j/Log4jConfigurationHelp
如果您使用“-Dlog4j.debug”运行,那么 log4j将打印信息到标准 输出告诉它是如何尝试的 配置自己。透过那看 会告诉你它在哪里寻找 配置文件。
答案 1 :(得分:19)
假设您的log4j配置在源树之外。如果找不到您的配置文件,请使用以下命令:
-Dlog4j.configuration=file:///your/path/log4j.xml
请注意限定符 file:/// 。没有它就行不了。
答案 2 :(得分:5)
我没有任何错误
所以log4j正在找你的配置,否则你会得到:
log4j:WARN找不到logger()的附加程序。
log4j:WARN请正确初始化log4j系统。
此外:
日志刚刚在控制台上打印出来
这意味着您可能需要定义文件追加器,例如FileAppender或RollingFileAppender。 the short intro上的“配置”部分有几个例子。
答案 3 :(得分:3)
您可以使用:
DOMConfigurator.configure(log4jConfigurationFilename);
并指定位置,如果它不是根!
答案 4 :(得分:2)
这可能是一个非常古老的问题,但对我来说答案就在这里 https://logging.apache.org/log4j/2.x/manual/configuration.html
按照上面的链接,Apache在类路径中按以下特定顺序搜索log4j2.xml文件
答案 5 :(得分:-1)
不要担心放在哪里。只需运行你的项目,比如在eclipse中,log4j会抛出一个异常,告诉你它在哪里。然后你可以把它放在那里。
一旦你开始工作,你也会弄清楚如何改变它,因为你理解逻辑。