我们如何指定log4j在试图查找其xml配置文件时必须查看的内容?默认情况下,log4j似乎会查找类文件夹的根目录,我可以说,使用调试log4j功能并从IDE运行我的应用程序。但是,我的jar中不再有任何class文件夹,log4j.xml文件位于jar的根目录下。我已经尝试设置选项-Dlog4j.configuration=log4j.xml,但它不起作用。下面是目前我的应用程序的全局结构:
6yjfywim1#
它使用CLASSPATH查找log4j.xml。如果log4j没有找到任何配置文件,它将向控制台发送一个错误。如果您没有看到任何此类错误,则可能是它正在查找的配置文件可能不是您正在编辑的文件。有一个命令行选项可以强制Log4J报告它正在使用的配置文件的路径。从http://wiki.apache.org/logging-log4j/Log4jConfigurationHelp开始如果你用"-Dlog4j.debug"运行,log4j会把信息打印到标准输出,告诉你它是如何配置自己的,通过它会告诉你它在哪里寻找配置文件。
cigdeys32#
假设你的log4j配置文件在源代码树之外,如果它找不到你的配置文件,请帮助它:
-Dlog4j.configuration=file:///your/path/log4j.xml
注意限定符file:///。没有它将无法工作。
7ajki6be3#
也许这是一个很老的问题,但对我来说答案是在官方Log4j 2文档:
Log4j能够在初始化期间 * 自动 * 配置自身。Log4j启动时,它将定位所有ConfigurationFactory插件,并按从高到低的加权顺序排列它们。交付时,Log4j包含四个ConfigurationFactory实现:一个用于JSON,一个用于YAML,一个用于属性,一个用于XML。
ConfigurationFactory
"log4j2.configurationFile"
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
bxjv4tth4#
我没有任何错误所以log4j正在查找您的配置,否则您将得到:log4j:WARN找不到logger()的附加器。log4j:警告请正确初始化log4j系统。还有:日志刚在控制台上打印出来这就意味着你可能需要定义一个文件附加器,比如FileAppender或者RollingFileAppender。the short intro的"配置"部分有一些例子。
6qftjkof5#
您可以使用:
DOMConfigurator.configure(log4jConfigurationFilename);
如果不是根目录,请指定位置!
ebdffaop6#
不要担心把它放在哪里,只要运行你的项目,比如在eclipse中,log4j会抛出一个异常,告诉你它在哪里,然后你就可以把它放在那里了。一旦你让它工作,你也会想出如何改变,因为你理解的逻辑。
6条答案
按热度按时间6yjfywim1#
它使用CLASSPATH查找log4j.xml。如果log4j没有找到任何配置文件,它将向控制台发送一个错误。如果您没有看到任何此类错误,则可能是它正在查找的配置文件可能不是您正在编辑的文件。有一个命令行选项可以强制Log4J报告它正在使用的配置文件的路径。
从http://wiki.apache.org/logging-log4j/Log4jConfigurationHelp开始
如果你用"-Dlog4j.debug"运行,log4j会把信息打印到标准输出,告诉你它是如何配置自己的,通过它会告诉你它在哪里寻找配置文件。
cigdeys32#
假设你的log4j配置文件在源代码树之外,如果它找不到你的配置文件,请帮助它:
注意限定符file:///。没有它将无法工作。
7ajki6be3#
也许这是一个很老的问题,但对我来说答案是在官方Log4j 2文档:
自动配置
Log4j能够在初始化期间 * 自动 * 配置自身。Log4j启动时,它将定位所有
ConfigurationFactory
插件,并按从高到低的加权顺序排列它们。交付时,Log4j包含四个ConfigurationFactory
实现:一个用于JSON,一个用于YAML,一个用于属性,一个用于XML。"log4j2.configurationFile"
系统属性,如果已设置,则将尝试使用与文件扩展名匹配的ConfigurationFactory
加载配置。请注意,这不限于本地文件系统上的位置,还可以包含URL。1.如果未设置系统属性,ConfigurationFactory将查找的属性
log4j2-test.properties
的值。1.如果未找到此类文件,YAML配置工厂将查找
类路径中的
log4j2-test.yaml
或log4j2-test.yml
。1.如果未找到此类文件,JSON配置工厂将查找
类路径中的
log4j2-test.json
或log4j2-test.jsn
。1.如果未找到此类文件,XML ConfigurationFactory将查找
类路径中的
log4j2-test.xml
。1.如果找不到测试文件,ConfigurationFactory属性将在类路径中查找
log4j2.properties
。1.如果找不到属性文件,YAML ConfigurationFactory将在类路径中查找
log4j2.yaml
或log4j2.yml
。1.如果找不到YAML文件,JSON配置工厂将在类路径中查找
log4j2.json
或log4j2.jsn
。1.如果无法找到JSON文件,XML ConfigurationFactory将尝试在类路径中找到
log4j2.xml
。1.如果找不到配置文件,将使用
DefaultConfiguration
。这将导致日志输出转到控制台。bxjv4tth4#
我没有任何错误
所以log4j正在查找您的配置,否则您将得到:
log4j:WARN找不到logger()的附加器。
log4j:警告请正确初始化log4j系统。
还有:
日志刚在控制台上打印出来
这就意味着你可能需要定义一个文件附加器,比如FileAppender或者RollingFileAppender。the short intro的"配置"部分有一些例子。
6qftjkof5#
您可以使用:
如果不是根目录,请指定位置!
ebdffaop6#
不要担心把它放在哪里,只要运行你的项目,比如在eclipse中,log4j会抛出一个异常,告诉你它在哪里,然后你就可以把它放在那里了。
一旦你让它工作,你也会想出如何改变,因为你理解的逻辑。