Dans Log4j2, comment associer un schéma XML à log4j2.xml?

J'ai donné un coup au Nouveau Log4j2. Il semble, à partir de la documentation sur la migration , que la spécification XML Schema/DTD a été supprimée.

Cela semble être un pas en arrière. Il devrait sûrement être possible d'associer un schéma XML ou une DTD à mon log4j2.xml pour l'aider à l'écrire et à la valider. Je n'ai rien trouvé d'utile dans la documentation, et je n'ai pas non plus trouvé le schéma XML ou la DTD elle-même.

Donc: dans Log4j2, comment devrait J'associe un schéma XML à log4j2.xml?

28
demandé sur glts 2012-12-16 22:56:40

4 réponses

Je ne pense pas qu'il soit possible d'avoir un schéma/DTD avec log4j2. Récemment, j'ai écrit un appender personnalisé, et pour soutenir l'appender Mon log4j2.xml ressemble à ceci:

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

Les choses importantes à noter que j'ai un tout personnalisé CyclicBuffer élément, et qu'il a complètement personnalisé bufferSize attribut. Jetez un oeil à la documentation entourant @PluginFactory et @Plugin pour plus de détails.

En raison de cette personnalisation, Je ne pense pas que le XML puisse être validé via un standard, commune XSD/DTD. Au lieu de cela, je pense que vous devrez créer votre propre XSD si vous souhaitez valider le XML.

Une chose importante à noter, c'est que dans mon XML j'ai: <configuration status="ERROR". Lorsque cela est présent, log4j2 affichera toutes les erreurs associées à une configuration incorrecte à l'exécution. Bien que pas aussi pratique que la validation XML, il est également très utile!

J'espère que cela vous aidera, Muel.

7
répondu Muel 2013-02-25 00:53:13

Veuillez relire la documentation Log4J2 sur configuration XML et vous trouverez ces 2 endroits:

Log4j peut être configuré à l'aide de deux XML saveurs; concis et stricte. le format concis rend la configuration très facile car les noms des éléments correspondent aux composants qu'ils représentent mais il ne peut pas être validé avec un schéma XML. Par exemple, ConsoleAppender est configuré en déclarant un élément XML nommé Console sous son élément appenders parent. Cependant, les noms d'éléments et d'attributs ne sont pas sensibles à la casse. En outre, les attributs peuvent être spécifiés en tant qu'attribut XML ou en tant qu'élément XML qui n'a pas d'attributs et a une valeur de texte.

Et un peu plus loin:

Stricte XML. En plus du format XML concis ci-dessus, Log4j permet de spécifier des configurations D'une manière XML plus "normale" que peut être validée à l'aide d'un schéma XML. C'est accompli en remplaçant les noms d'éléments Amicaux ci - dessus par leur type d'objet comme indiqué ci-dessous. Par exemple, au lieu que ConsoleAppender soit configuré à l'aide d'un élément nommé Console, il est configuré en tant qu'élément d'ajout avec un attribut de type contenant "Console".

Donc si vous voulez utiliser la validation de schéma XML pour Log4j2, utilisez uniquement le format XML Strict .

17
répondu glory1 2013-10-16 15:41:56

Je n'arrive pas à trouver une référence au XSD sur le site Web de Log4J2, mais si vous téléchargez le for 2.0 beta 5, vous trouverez qu'il contient un schéma Log4J 2 (Log4J-v2. 0.xsd) dans le chemin core / src / main / resources.

Comme indiqué par Muel, il est tout à fait possible d'avoir des appenders personnalisés. Pour cette raison, je crois que cela ne fonctionnerait que si vous utilisez strict="true" dans le nœud de configuration principal.

Voir: http://logging.apache.org/log4j/2.x/manual/configuration.html#ConfigurationSyntax

J'ai utilisé l'attribut schema pour ajouter ceci à la configuration et cela semble fonctionner principalement.

Voici un exemple:

<configuration name="testConfiguration"
    status="debug"
    strict="true"
    monitorInterval="30"
    schema="Log4J-V2.0.xsd">

Je dis "surtout" parce qu'un problème que j'ai trouvé que même certains attributs valides documentés (par exemple monitorInterval) sont manquants dans le XSD.

Espérons qu'avec les prochaines versions, un XSD précis du format strict deviendra disponible.

Espère que c'est de l'aide.

-Steve

Mise à Jour: Voir LOG4J2-170 concernant le problème avec la validation XSD

11
répondu sfosdal 2013-04-29 21:23:12

Fonctionne pour moi avec 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">

Ou contre la version étiquetée:

<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">
8
répondu x545 2017-09-11 14:33:48