В Log4j2, как мне связать XML-схему с log4j2.xml?
Я предлагаю новый Log4j2. Похоже, из документации по миграции, что спецификация XML Schema/DTD была устранена.
Это похоже на шаг назад. Разумеется, для поддержки написания и проверки может быть возможно связать либо XML-схему, либо DTD с моим log4j2.xml
. Я не смог найти ничего полезного в документации, и я тоже не нашел схему XML или DTD.
Итак: в Log4j2, как мне связать XML-схему с log4j2.xml
?
Ответы
Ответ 1
Я не думаю, что возможно иметь схему /DTD с log4j2. Недавно я написал пользовательский 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. Вместо этого, я думаю, вам нужно создать свой собственный XSD, если вы хотите проверить XML.
Важно отметить, что в моем XML я получил: <configuration status="ERROR"
. Когда это присутствует, log4j2 выведет любые ошибки, связанные с неправильной конфигурацией во время выполнения. Хотя это не так удобно, как проверка XML, это также очень полезно!
Надеюсь, что это поможет,
Muel.
Ответ 2
Пожалуйста, перечитайте документацию Log4J2 о конфигурации XML, и вы найдете эти 2 места:
Log4j может быть настроен с использованием двух XML-вкусов; сжатый и строгий. Конкретный формат упрощает настройку, поскольку имена элементов соответствуют компонентам, которые они представляют , однако он не может быть проверен с помощью XML-схемы. Например, ConsoleAppender настроен путем объявления XML-элемента с именем Консоль под его родительским элементом appenders. Однако имена элементов и атрибутов не чувствительны к регистру. Кроме того, атрибуты могут быть указаны как атрибут XML или как элемент XML, который не имеет атрибутов и имеет текстовое значение.
и немного дальше:
Строгий XML. В дополнение к сжатому XML-формату выше, Log4j позволяет определять конфигурации в более "нормальном" XML-способе, который может быть проверен с использованием схемы XML. Это достигается заменой имен дружественных элементов выше на их тип объекта, как показано ниже. Например, вместо того, чтобы ConsoleAppender настраивается с помощью элемента с именем Консоль, он вместо этого настраивается как элемент appender с атрибутом типа, содержащим "Консоль".
Итак, , если вы хотите использовать проверку схемы XML для Log4j2, используйте только строгий формат XML.
Ответ 3
Я не могу найти ссылку на XSD на веб-сайте Log4J2, но если вы загрузите бета-версию для 2.0, вы обнаружите, что она содержит схему Log4J 2 (Log4J-V2.0.xsd) в пути ядро/SRC/основные/ресурсы.
Как заявил Muel, вполне возможно иметь пользовательские дополнения. Из-за этого я считаю, что это будет работать, только если вы используете strict = "true" в основной конфигурации node.
Смотрите: http://logging.apache.org/log4j/2.x/manual/configuration.html#ConfigurationSyntax
Я использовал атрибут схемы, чтобы добавить это в конфигурацию и, похоже, в основном работает.
Вот пример:
<configuration name="testConfiguration"
status="debug"
strict="true"
monitorInterval="30"
schema="Log4J-V2.0.xsd">
Я говорю "в основном", потому что одна проблема я обнаружил, что даже некоторые документально подтвержденные атрибуты (например, monitorInterval) отсутствуют в XSD.
Будем надеяться, что в будущих выпусках станет доступен точный XSD строгого формата.
Надеюсь, это поможет.
-Стив
Обновлено:
См. LOG4J2-170 относительно проблемы с проверкой XSD
Ответ 4
Работает для меня с 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">