在Log4j2中,如何将XML Schema与log4j2.xml相关联?

时间:2012-12-16 18:56:40

标签: java log4j log4j2

我一直在给新的Log4j2。从documentation on migration开始,似乎已经废除了XML Schema / DTD规范。

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

所以:在Log4j2中,我应该如何将XML Schema与log4j2.xml相关联?

4 个答案:

答案 0 :(得分:17)

请重新阅读有关 XML configuration 的Log4J2文档,您会找到以下两个地方:

  

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

再远一点:

  

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

所以如果你想对Log4j2使用XML模式验证,那么只使用严格的XML格式

答案 1 :(得分:11)

我似乎无法在Log4J2网站上找到对XSD的引用,但是如果你下载for for beta beta 5,你会发现它在路径中包含一个Log4J 2架构(Log4J-V2.0.xsd)芯/ SRC /主/资源。

正如Muel所说,很有可能拥有自定义appender。因此,我相信只有在主配置节点中使用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中缺少一些记录有效的属性(例如monitorInterval)。

希望在将来发布的版本中,可以获得严格格式的准确XSD。

希望这有一些帮助。

-Steve

<强>更新 有关XSD验证问题,请参阅LOG4J2-170

答案 2 :(得分:9)

使用eclipse为我工作:

select col1, col2, col3, convert(date,ProofDate ) as colname from table

或针对标记版本:

<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">

答案 3 :(得分:7)

我认为使用log4j2可能没有架构/ DTD。最近我写了一个自定义appender,为了支持appender我的log4j2.xml看起来像这样:

<?xml version="1.0" encoding="UTF-8"?>
<configuration status="ERROR" packages="package.same.as.custom.appender">
  <appenders>
    <CyclicBuffer name="CyclicBuffer" bufferSize="200">
      <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%t] %c{1.} - %msg%n"/>
    </CyclicBuffer>
  </appenders>
  <loggers>
    <root level="info">
      <appender-ref ref="CyclicBuffer"/>
    </root>
  </loggers>
</configuration>

需要注意的重要事项是,我有一个完全自定义的CyclicBuffer元素,并且它具有完全自定义的bufferSize属性。有关详细信息,请查看有关@PluginFactory@Plugin的文档。

由于这种自定义,我认为XML不能通过标准的通用XSD / DTD进行验证。相反,如果您希望验证XML,我认为您需要创建自己的XSD。

需要注意的一件重要事情是,在我的XML中我得到了:<configuration status="ERROR"。如果存在,log4j2将在运行时输出与错误配置相关的任何错误。虽然不如XML验证方便,但它也非常有用!

希望这有一些帮助, 道穆埃尔。