0

Tomcat を使用すると、適切なバルブを構成することで、興味深い情報の山をログファイルにダンプできます。

例えば:

       <Valve className="org.apache.catalina.valves.AccessLogValve" 
        directory="logs"  
        prefix="localhost." 
        suffix=".txt" 
        pattern='%s %b %I %{myname}s' 
        resolveHosts="false"/>

意味:

  • %s - 応答の出力 HTTP ステータス コード
  • %b - HTTP ヘッダーを除く送信バイト数を出力するか、ゼロの場合は「-」
  • %I - スレッド ID

%{myname}s は、セッションに保存されている属性 myname の値を出力することを意味します。

すべて良い。セッションにハッシュマップが保存されている場合は、次のようにして出力できます。

%{mymap}s

詳細については、 http://tomcat.apache.org/tomcat-5.5-doc/config/valve.htmlを参照してください。

しかし、マップ全体ではなく、特定のキーの値を出力したいだけです。私が試してみました:

%{mymap.myatt}s

しかし、これはうまくいきません。これを行う方法はありますか?

4

1 に答える 1

1

のソースをAccessLogValve探して、Stringを検索しSessionAttributeElementます。これは、値が%{mymap}s文字列に変換するために行っていることであり、マップにドリルダウンできるようには見えません。

このクラスを拡張し、createAccessLogElementメソッドをオーバーライドして、別のパターン(たとえば)の別のハンドラーを追加し%{mymap.myatt}m、クラスと同様の方法でロジックを処理できますSessionAttributeElementが、ヘッダーをセッション属性名とマップキーに分割します。

于 2012-06-06T01:07:10.707 に答える