2

私は logback (slf4j を使用) を使用してログを記録しており、多くの XML コンテンツをテキスト ファイルと HTML ファイル (HTMLLayout を使用) の両方に記録しています。ただし、logback は、エスケープや <pre> 処理を行わずに、生の XML を HTMLLayout の <TD> タグに挿入するだけです。

ここに私の logback.xml のスニペットがあります:

<appender name="ALL" class="ch.qos.logback.core.rolling.RollingFileAppender">     
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
  <FileNamePattern>${DIR_ALL}/%d{yyyy-MM-dd}.%i.html</FileNamePattern>
  <TimeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
    <MaxFileSize>500KB</MaxFileSize>
  </TimeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<layout class="ch.qos.logback.classic.html.HTMLLayout">
  <pattern>%d{HH:mm:ss.SSS}%logger{1}%msg</pattern>
  <cssBuilder class="ch.qos.logback.classic.html.UrlCssBuilder">
    <url>${CSS_HREF}</url>
  </cssBuilder>
  <title>Logs (ALL)</title>
</layout>

そして、以下は私が得たものです:

<td class="Message">(DemoCall) parsing response failed. Details:
<call><action>getmessage</action></call> 
</td> 

私が期待していること:

<td class="Message">(DemoCall) parsing response failed. Details:
&lt;call&gt;&lt;action&gt;getmessage&lt;/action&gt;&lt;/call&gt;
</td>

または、上記のメッセージを <pre> タグでラップすることをお勧めします。それをアーカイブするために HTMLLayout を拡張する必要がありますか? それとも、ログ ステートメントごとに StringEscapeUtils.escapeHTML(msg) を実行するのが私の仕事ですか (エスケープが不要なファイル アペンダーもあるため、実行しません)。

ありがとう!

4

1 に答える 1

4

わかった。私は自分でそれをしなければならないようです: logback から HTMLLayout を拡張し、そこでエスケープすることを処理します。

http://gist.github.com/284628でコードの 61 行目を確認してください。

編集

もちろん、新しい拡張 HTMLLyout を使用してから、<layout class=...> の logback.xml の元の HTMLLyout を置き換える必要があります。

于 2010-01-23T14:49:38.353 に答える