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} 的含义是输出存储在会话中的属性 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 回答