42

私は新しいLog4j2を試してみました。移行に関するドキュメントから、XMLスキーマ/DTD仕様は廃止されたようです。

それは一歩後退したようです。log4j2.xml確かに、XMLスキーマまたはDTDのいずれかをmyに関連付けて、書き込みと検証を支援することができるはずです。ドキュメントで役立つものを見つけることができませんでした。また、XMLスキーマまたはDTD自体も見つかりませんでした。

したがって、Log4j2では、XMLスキーマをどのように関連付ける必要がありますlog4j2.xmlか?

4

4 に答える 4

20

XML 構成に関する Log4J2 ドキュメントを再度お読みください。次の 2 つの場所が見つかります。

Log4j は、2 つの XML フレーバーを使用して構成できます。簡潔厳密。要素名がそれらが表すコンポーネントと一致するため、簡潔な形式により構成が非常に簡単になりますが、XML スキーマで検証することはできません。たとえば、ConsoleAppender は、親の appenders 要素の下で Console という名前の XML 要素を宣言することによって構成されます。ただし、要素名と属性名は大文字と小文字が区別されません。さらに、属性は、XML 属性として指定することも、属性を持たずテキスト値を持つ XML 要素として指定することもできます。

そしてもう少し:

厳密な XML。上記の簡潔な XML 形式に加えて、Log4j では、XML スキーマを使用して検証できる、より「通常の」XML 方法で構成を指定できます。これは、以下に示すように、上記のわかりやすい要素名をオブジェクト タイプに置き換えることによって実現されます。たとえば、Console という名前の要素を使用して設定される ConsoleAppender の代わりに、「Console」を含む type 属性を持つアペンダー要素として設定されます。

したがって、Log4j2 に XML スキーマ検証を使用する場合は、厳密な XML 形式のみを使用してください

于 2013-10-16T15:41:56.457 に答える
12

Log4J2 Web サイトで XSD への参照を見つけることができないようですが、2.0 ベータ 5 用をダウンロードすると、パス core/src に Log4J 2 スキーマ (Log4J-V2.0.xsd) が含まれていることがわかります。 /メイン/リソース。

Muel が述べたように、カスタム アペンダーを使用することは十分に可能です。このため、メイン構成ノードで 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">

「ほとんど」と言ったのは、文書化された有効な属性 (monitorInterval など) の一部でさえ XSD にないという問題を発見したためです。

今後のリリースで、厳密な形式の正確な XSD が利用できるようになることを願っています。

これが役立つことを願っています。

-スティーブ

更新: XSD 検証に関する問題については、LOG4J2-170を 参照してください。

于 2013-04-29T03:32:57.733 に答える
8

log4j2 でスキーマ/DTD を持つことは不可能だと思います。最近、カスタム アペンダーを作成しました。アペンダーをサポートするには、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 を作成する必要があると思います。

注意すべき重要な点の 1 つは、私の XML には次のものがあるということです<configuration status="ERROR"。これが存在する場合、log4j2 は実行時に不適切な構成に関連するエラーを出力します。XML 検証ほど便利ではありませんが、非常に便利です。

お役に立てば幸いです、ミュール。

于 2013-02-25T00:53:13.690 に答える