【问题标题】:How to get value from a map stored on a httpsession when running on Tomcat在Tomcat上运行时如何从存储在httpsession上的地图中获取价值
【发布时间】:2012-06-09 21:58:58
【问题描述】:

使用 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

但这不起作用。任何想法如何做到这一点?

【问题讨论】:

    标签: tomcat logging tomcat6 tomcat-valve


    【解决方案1】:

    在源中查找AccessLogValve,搜索字符串SessionAttributeElement。这就是值将您的 %{mymap}s 转换为字符串的作用,看起来您无法深入到地图中。

    您可以扩展该类并覆盖 createAccessLogElement 方法以添加另一个处理程序以用于不同的模式(比如说 %{mymap.myatt}m),然后以与 SessionAttributeElement 类类似的方式处理逻辑,但拆分将标头转换为会话属性名称和映射键。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-03-31
      • 2021-01-01
      • 2021-04-19
      • 2020-11-14
      • 1970-01-01
      • 2017-02-13
      • 1970-01-01
      • 2016-04-04
      相关资源
      最近更新 更多