适用于log4j2.xml RollingFile配置的格式

时间:2014-04-30 17:04:55

标签: glassfish-4 log4j2

我在使用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,那么&#34; C:/ glassfish4 /..."格式不正确。

但是,滚动文件部分实际上是有效的:我看到了一个日志文件和滚动的日志文件,我期待它们。

如果我更改为根本不起作用的网址(例如file:/// C / glassfish4 / ...)。

我应该忽略这个例外吗? (一切似乎都运转正常)。或者有人可以解释这部分配置的正确格式吗?

3 个答案:

答案 0 :(得分:2)

我还没有完全确定为什么配置文件对我和OP都有效,但是,我可以确认更改路径引用到文件:// url求解问题(即:摆脱错误/警告/刺激)。

在我的IntelliJ运行/调试配置中,对于 VM选项,我有:

-Dlog4j.configurationFile=file://C:\dev\path\to\log4j2.xml

我可以确认&#39; \&#39;被翻译成&#39; /&#39;所以,不用担心。

修改

好的,整个过程都有效,因为他们(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)。

好吧,我想用粗体强调的代码行实际上只是用**包裹;猜猜该网站不允许嵌套标签?无论如何,y都得到了意义。

阅读起来有点混乱,但这就是为什么它会起作用,即使你得到那个令人讨厌的(并且完全是误导性的)异常。

答案 1 :(得分:1)

感谢Jon,我正在寻找...这有帮助!

这是在Intellij 13,Tomcat 7.0.56

-Dlog4j.configurationFile =文件:// C:\苏兰德拉\工作空间\ CMDB \资源\ elasticityLogging.xml

答案 2 :(得分:0)

问题不在于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初始化详细信息打印到控制台。