snbhsmt_log

ネットワークとコンピュータ、その他いろいろ

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Tomcat 5.5 で Log4j の XML 形式設定ファイルを利用

Tomcat 5.5 でログ出力に Log4j 1.2.x を利用していて、 設定を XML 形式の log4j.xml ファイルで行うと、設定内容によっては エラーが発生する。 その理由と対応を考えた。

log4j:WARN Continuable parsing error 133 and column 80
log4j:WARN Attribute value "org.apache.catalina.core.ContainerBase.[Catalina].[localhost]" of type ID must be a name.

Tomcat 5.5 から Host や Context に対応するロガー名として以下の様に ブラケットで囲んだ名前を利用出来る様になった。

<logger name="org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/manager]">
        :
</logger>
しかし Log4j 1.2.x の log4j.dtd によると logger 要素の name 属性の 属性タイプは ID であり、そこに文字 '[', ']' や '/' は記述できない。 よって上記の様なロガー名を指定すると XML 検証エラーとなる。
<!ELEMENT logger (level?,appender-ref*)>
<!ATTLIST logger
  name          ID      #REQUIRED
  additivity    (true|false) "true"  
>
よって、この様なロガー名を指定したい場合は log4j.properties ファイルで設定しなければならない。

しかし、どうしても log4j.xml で設定したい場合は、 log4j.dtd を書き換えてしまうという方法がある。 log4j.dtd は log4j*.jar の中の org/apache/log4j/xml ディレクトリに 存在するので、これを以下の様に属性タイプ CDATA に書き換えてしまう。

<!ELEMENT logger (level?,appender-ref*)>
<!ATTLIST logger
  name          CDATA   #REQUIRED
  additivity    (true|false) "true"  
>
十分検証した訳では無いけれど、これでエラーは出なくなる。

ちなみに Log4j 1.3.x では DTD を用いない様なので、 このエラーは元々発生しないらしい。

スポンサーサイト

« Tomcat 5.5 は JDK 1.4 で使用|Top|Tomcat 5.5 の ClassLoaderLogManager »

コメント

コメントの投稿

管理者にだけ表示を許可する

トラックバック

http://snbhsmt.blog110.fc2.com/tb.php/47-ecfe5205

Top

HOME

snbhsmt

Author:snbhsmt
Google Profiles

http://www.ksky.ne.jp/~snbhsmt/

全ての記事を表示する

この人とブロともになる

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。