我一直在给新的Log4j2。从documentation on migration开始,似乎已经废除了XML Schema / DTD规范。
这似乎是倒退了一步。当然,应该可以将XML Schema或DTD与我的log4j2.xml
相关联,以帮助编写和验证。我无法在文档中找到任何有用的东西,也没有找到XML Schema或DTD本身。
所以:在Log4j2中,我应该如何将XML Schema与log4j2.xml
相关联?
答案 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验证方便,但它也非常有用!
希望这有一些帮助, 道穆埃尔。