tomcat
  • logging
  • tomcat6
  • tomcat-valve
  • 2012-06-05 34 views 0 likes 
    0

    通過Tomcat,可以通過配置適當的閥將一堆有趣的信息轉儲到日誌文件。如何在Tomcat上運行時從httpsession上存儲的映射獲取值

    例如:

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

    指:

    • %S - 響應
    • %B的輸出的HTTP狀態代碼 - 輸出發送的字節數,但不包括HTTP標頭,或 ' - '如果爲零
    • %I - threadId

    和%{myname}的含義輸出會話中存儲的屬性myname的值。

    一切都好。如果我有一個HashMap保存在我的會議,我可以做類似的輸出:

    %{mymap}s 
    

    更多信息,請參見http://tomcat.apache.org/tomcat-5.5-doc/config/valve.html

    但是,我想只輸出一個特定的鍵值,而不是整個地圖。我曾嘗試過:

    %{mymap.myatt}s 
    

    但這不起作用。任何想法如何做到這一點?

    回答

    1

    查看AccessLogValve的來源,查找字符串SessionAttributeElement。這就是將您的%{mymap}s轉換爲字符串的價值所在,而且看起來您可以深入到地圖中。

    你可以擴展這個類並覆蓋createAccessLogElement方法在另一個處理程序中添加了不同的模式(可以說%{mymap.myatt}m),然後處理以類似的方式向SessionAttributeElement類的邏輯,但拆分頭到會議屬性名稱和映射關鍵字。

    相關問題