我在使用log4j2的glassfish 4应用程序中遇到以下异常:
SEVERE: ERROR StatusLogger Invalid URL C:/glassfish4/glassfish/domains/domain1/config/log4j2.xml java.net.MalformedURLException: Unknown protocol: c我的log4j2.xml中有以下部分:
<RollingFile name="RollingFile" fileName="C:/glassfish4/glassfish/domains/domain1/logs/ucsvc.log"
filePattern="C:/glassfish4/glassfish/domains/domain1/logs/$${date:yyyy-MM}/ucsvc-%d{MM-dd-yyyy}-%i.log">我知道如果它在寻找一个URL,那么“C:/glassfish4 4/...”格式不正确。
但是,滚动文件部分实际上是有效的:我看到一个日志文件和滚动日志文件,这是我所期望的。
如果我更改为URL (例如,file:///C/glassfish4/...)这根本不起作用。
那么我应该忽略这个异常吗?(一切似乎都在正常运行)。或者有人能解释一下这部分配置的正确格式吗?
发布于 2014-06-20 03:21:01
我还没有完全确定为什么config文件和OP一样适用于我,但是,我可以确认,将路径引用更改为file:// url可以解决问题(即:消除错误/警告/刺激性)。
在我的IntelliJ运行/调试配置中,对于虚拟机选项,我有:
-Dlog4j.configurationFile=file://C:\dev\path\to\log4j2.xml我可以确认'\‘被翻译成'/’,所以不用担心。
编辑
好的,整个过程都是有效的,因为他们( apache的家伙)非常努力地加载配置,实际上,他们通过c:\...符号从指定的文件加载。在继续尝试之前,他们只是抛出了一个相当误导性的异常。
在ConfigurationFactory::getConfiguration中:
**source = getInputFromURI(FileUtils.getCorrectedFilePathUri(config));**
} catch (Exception ex) {
// Ignore the error and try as a String.
}
if (source == null) {
final ClassLoader loader = this.getClass().getClassLoader();
**source = getInputFromString(config, loader);**第一个加粗的行尝试从URL加载,但失败了,抛出了异常。然后代码继续,弹出到getInputFromString中:
try {
final URL url = new URL(config);
return new ConfigurationSource(url.openStream(), FileUtils.fileFromURI(url.toURI()));
} catch (final Exception ex) {
final ConfigurationSource source = getInputFromResource(config, loader);
if (source == null) {
try {
**final File file = new File(config);
return new ConfigurationSource(new FileInputStream(file), file);**在这里,它再次尝试加载配置,失败并陷入陷阱,再次尝试,失败,最后在粗体行上成功(处理File)。
好吧,我想要用粗体强调的代码行实际上只包含在**中;我猜网站不允许嵌套标记?不管怎样,你们都明白我的意思了。
它读起来有点乱,但这就是为什么即使你得到了看起来很糟糕(并且完全是误导性的)异常,它仍然可以工作。
发布于 2014-10-24 04:44:39
谢谢乔恩,我到处都在找..这很有帮助!
这是在Intellij 13上,Tomcat 7.0.56
-Dlog4j.configurationFile=file://C:\Surendra\workspace\cmdb\resources\elasticityLogging.xml
发布于 2014-05-01 14:19:31
问题不在于log4j2.xml文件的内容。
问题是log4j2找不到您的log4j2.xml配置文件。如果仔细查看错误,会发现报告为无效的URL是C:/glassfish4/glassfish/domains/domain1/config/log4j2.xml:配置文件。
我不知道为什么会这样。是否通过系统属性-Dlog4j.configurationFile=path/to/log4j2.xml指定配置文件的位置
尽管如此,如果应用程序和日志记录工作正常,那么可能没有问题。不过很奇怪。您可以通过在log4j2.xml文件的顶部配置<Configuration status="trace">来获得有关log4j配置的更多详细信息。这会将log4j初始化详细信息打印到控制台。
https://stackoverflow.com/questions/23394041
复制相似问题