当前位置: 首页 > 知识库问答 >
问题:

在Log4j2中,如何将XML模式与Log4j2.XML相关联?

阎裕
2023-03-14

我一直在尝试新的Log4j2。从有关迁移的文档来看,XML模式/DTD规范似乎已被废除。

这似乎是倒退了一步。当然,应该可以将XML Schema或DTD与我的log4j2.xml相关联,以帮助编写它并进行验证。我在留档中找不到任何有用的东西,也没有找到XML Schema或DTD本身。

那么:在Log4j2中,我应该如何将XML模式与Log4j2.XML相关联?

共有3个答案

丌官和泰
2023-03-14

我似乎在Log4J2网站上找不到对XSD的引用,但如果下载for 2.0 beta 5,您会发现它在路径core/src/main/resources中包含一个Log4J 2模式(Log4J-V2.0.XSD)。

正如Muel所说,定制附加器是完全可能的。因此,我认为只有在主配置节点中使用strict=“true”时,它才会起作用。

参见:http://logging.apache.org/log4j/2.x/manual/configuration.html#ConfigurationSyntax

我使用schema属性将其添加到配置中,它似乎基本上可以工作。

举个例子:

<configuration name="testConfiguration"
    status="debug"
    strict="true"
    monitorInterval="30"
    schema="Log4J-V2.0.xsd">

我说“主要”是因为我发现一个问题,即XSD中甚至缺少一些记录的有效属性(例如MonorInterval)。

希望在未来的版本中,能够提供严格格式的精确XSD。

希望这能有所帮助。

-史蒂夫

更新:关于XSD验证问题,请参阅LOG4J2-170

都阳
2023-03-14

请重新阅读关于XML配置的Log4J2文档,您会发现以下两个地方:

Log4j可以使用两种XML风格进行配置;简洁严谨。简洁的格式使配置变得非常容易,因为元素名称与它们所表示的组件相匹配,但是它不能用XML模式进行验证。例如,通过在其父appenders元素下声明名为Console的XML元素来配置ConsoleAppender。但是,元素和属性名称不区分大小写。此外,属性可以指定为XML属性,也可以指定为没有属性且具有文本值的XML元素。

还有一点:

严格的XML。除了上述简明的XML格式外,Log4j还允许以更“正常”的XML方式指定配置,可以使用XML模式进行验证。这是通过将上面的友好元素名称替换为其对象类型来实现的,如下所示。例如,不是使用名为Console的元素配置ConsoleAppender,而是将其配置为具有包含“Console”的type属性的appender元素。

因此,如果您想对Log4j2使用XML模式验证,那么只需使用严格的XML格式。

郦良才
2023-03-14

适用于我的eclipse:

<Configuration strict="true"
           xmlns="http://logging.apache.org/log4j/2.0/config"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://logging.apache.org/log4j/2.0/config 
           https://raw.githubusercontent.com/apache/logging-log4j2/master/log4j-core/src/main/resources/Log4j-config.xsd">

或针对标记版本:

<Configuration strict="true"
           xmlns="http://logging.apache.org/log4j/2.0/config"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://logging.apache.org/log4j/2.0/config 
           https://raw.githubusercontent.com/apache/logging-log4j2/log4j-2.8.2/log4j-core/src/main/resources/Log4j-config.xsd">
 类似资料:
  • 我想使用新的log4j2-Java日志框架。一切正常,但我从一小时后就尝试加载一个自定义配置文件来配置日志记录(如日志级别)。 这是我的log4j2.xml: 我尝试了以下方法,但没有任何效果: 移动log4j2.xml文件,使其位于默认包中。 将log4j2.xml文件移动到项目中的任意位置 将log4j2.xml文件命名为log4j.xml 在项目中创建一个文件夹,将log4j2.xml文件放

  • 当我把我的log4j2.xml放在资源/xml文件夹下时,我得到以下错误:ERROR StatusLogger找不到log4j2配置文件。使用默认配置:仅将错误记录到控制台。 当我把它直接放在资源下面时。xml,它可以完美地工作。我还在Run-As下给出了-Dlog4j.configurationFile=src/main/resources/xml/log4j2.xml- 我还发现了这个错误lo

  • 1)我想每天使用log4j2.xml.生成日志文件,我使用RollingFile appender标记来实现同样的功能。但是,它将日志附加在同一文件上。 2)下面是我们在log4j.xml中使用的类别标签,我想知道在log4j2.xml中类别标签的等价物是什么? 3) 如何使用log4j2中的所有属性定义snmptrappender?

  • log4j:warn可持续解析错误10和列78 log4j:warn文档根元素“configuration”必须与DOCTYPE根“null”匹配。LOG4J:WARN可持续解析错误10和列78 LOG4J:WARN文档无效:找不到语法。log4j:错误DOM元素是-不是元素。使用Spark默认的log4j配置文件:org/apache/spark/log4j-defaults.propertie

  • 在发布这个问题之前,我已经做了我的研究,关于我没有正确使用additivity属性的问题,下面是我的log4j2.xml的一个片段,我试图实现的是,在记录器中定义的每个appender ref应该只附加它所定义级别的日志,但是所有的appender都附加了所有日志消息,而不管日志级别如何,因此,例如,调试记录器仍然得到了我不想要的错误消息。如有任何投入,将不胜感激。

  • 我正在从log4j1.x升级到log4j2,并将log4j.xml配置文件更新为一个新的log4j2.xml配置。我在运行maven,spring和Mule。 当运行一个测试maven构建时,log4j2.xml文件不会被拾取。但是,如果我重命名该文件log4j2-test.xml,它就会被拾取(例如,带有自定义PatternLayout的控制台记录器在第二种情况下可以正常工作,但在第一种情况下使