首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >log4j2.xml RollingFile配置的正确格式

log4j2.xml RollingFile配置的正确格式
EN

Stack Overflow用户
提问于 2014-05-01 01:04:55
回答 3查看 3K关注 0票数 1

我在使用log4j2的glassfish 4应用程序中遇到以下异常:

代码语言:javascript
复制
SEVERE: ERROR StatusLogger Invalid URL C:/glassfish4/glassfish/domains/domain1/config/log4j2.xml java.net.MalformedURLException: Unknown protocol: c

我的log4j2.xml中有以下部分:

代码语言:javascript
复制
<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/...)这根本不起作用。

那么我应该忽略这个异常吗?(一切似乎都在正常运行)。或者有人能解释一下这部分配置的正确格式吗?

EN

Stack Overflow用户

发布于 2014-06-20 03:21:01

我还没有完全确定为什么config文件和OP一样适用于我,但是,我可以确认,将路径引用更改为file:// url可以解决问题(即:消除错误/警告/刺激性)。

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

代码语言:javascript
复制
-Dlog4j.configurationFile=file://C:\dev\path\to\log4j2.xml

我可以确认'\‘被翻译成'/’,所以不用担心。

编辑

好的,整个过程都是有效的,因为他们( apache的家伙)非常努力地加载配置,实际上,他们通过c:\...符号从指定的文件加载。在继续尝试之前,他们只是抛出了一个相当误导性的异常。

在ConfigurationFactory::getConfiguration中:

代码语言:javascript
复制
    **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中:

代码语言:javascript
复制
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)。

好吧,我想要用粗体强调的代码行实际上只包含在**中;我猜网站不允许嵌套标记?不管怎样,你们都明白我的意思了。

它读起来有点乱,但这就是为什么即使你得到了看起来很糟糕(并且完全是误导性的)异常,它仍然可以工作。

票数 2
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23394041

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档