在Log4j2中,如何将XML模式与log4j2.xml关联起来?
在Log4j2中,如何将XML模式与log4j2.xml关联起来?
问题的出现原因:
Log4j2官网上似乎没有提到如何关联XML模式,但是如果您下载2.0 beta 5版本,您会发现路径core/src/main/resources中包含了一个Log4J 2模式(Log4J-V2.0.xsd)。
解决方法:
如Muel所述,可以使用自定义的appender。因此,我相信只有在主配置节点中使用strict="true"才能正常工作。
示例代码如下:
值得一提的是,虽然大部分情况下这个方法是有效的,但我发现即使是一些已经记录为有效的属性(例如monitorInterval)在XSD中也没有出现。
希望在未来的版本中,能够提供一个准确的strict格式的XSD。
希望这对您有所帮助。
更新:
关于XSD验证问题,请参见LOG4J2-170。
三年半后,这个问题仍然未解决。这就是为什么不应该仅仅根据文档选择库的原因。
那个问题可能已经过时了,但99%的内容都能正确验证,而且您还可以获得内容辅助功能。XSD始终可在log4j-core-2.6.2.jar/Log4j-config.xsd中找到,您可以将其复制出来并添加该属性。
这也可能有所帮助:marxsoftware.blogspot.com/2016/08/…
在Log4j2中,如果想要将XML模式与log4j2.xml文件关联起来,可以使用Strict XML格式。使用Strict XML格式可以通过XML模式进行验证。然而,在使用Strict XML格式时需要注意,它不允许在Logger中使用可选的appender。
要使用XML模式验证Log4j2,需要指定Log4j2配置文件中的严格模式,并且使用xsi:noNamespaceSchemaLocation属性来指定XML模式的位置。在配置文件中,可以使用以下代码来指定Strict XML格式和XML模式的位置:
<Configuration strict="true" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="https://raw.githubusercontent.com/apache/logging-log4j2/master/log4j-core/src/main/resources/Log4j-config.xsd">
需要注意的是,使用的XML模式的位置可能会发生变化。原先提供的位置已经过时,新的位置可以在以下链接中找到:
https://raw.githubusercontent.com/apache/logging-log4j2/master/log4j-core/src/main/resources/Log4j-config.xsd
问题的原因是在配置Log4j2时,需要将XML Schema与log4j2.xml关联起来,以确保配置文件的正确性和有效性。
解决方法是在log4j2.xml文件中添加以下代码片段:
<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">
这段代码会将log4j2.xml的命名空间与XML Schema相关联,以确保配置文件的正确性。
另外,还可以根据具体的Log4j2版本,将xsi:schemaLocation中的URL更改为相应版本的URL,以确保使用正确的XML Schema。
通过以上方法,可以解决Log4j2与XML Schema的关联问题,确保配置文件的正确性和有效性。