Подтвердить что ты не робот

В Log4j2, как мне связать XML-схему с log4j2.xml?

Я предлагаю новый Log4j2. Похоже, из документации по миграции, что спецификация XML Schema/DTD была устранена.

Это похоже на шаг назад. Разумеется, для поддержки написания и проверки может быть возможно связать либо XML-схему, либо DTD с моим log4j2.xml. Я не смог найти ничего полезного в документации, и я тоже не нашел схему XML или DTD.

Итак: в Log4j2, как мне связать XML-схему с log4j2.xml?

4b9b3361

Ответ 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">