1. 程式人生 > >Tomcat配置自定義訪問日誌 --- 獲取請求頭部資訊

Tomcat配置自定義訪問日誌 --- 獲取請求頭部資訊

使用tomcat,搭建完個人網站後,預設記錄來訪遊客的資訊是十分有限的,主要有ip和路徑以及方法等。 
 有時候為了獲取更多來訪資訊,比如請求的頭部資訊,這個時候就需要我們手動配置log了。

開始

進入Tomcat的根目錄,然後 ---> conf ---> context.xml ,修改這個context.xml檔案,在它Context標籤內加上下面這段程式碼

       <Valve className="org.apache.catalina.valves.AccessLogValve"
                 directory="logs" prefix="headers" suffix=".txt"
                 pattern="%t  ---  %a  ---  %U  ---  User-Agent:%{User-Agent}i  ---  Cookie:%{Cookie}i " resolveHosts="false" />

其中directory是檔案目錄,檔案字首為headers,字尾為.txt,表明為文字檔案,然後關鍵在於pattern這一段了:

裡面就是日誌記錄的格式,這裡就根據個人喜好來自定義了; 百分號%加上指定字母有特定的含義,比如%t就代表訪問的時間,%a表示來訪者的ip, %U為訪問的路徑。
需要注意的是%{header}i 指請求的對應頭部,如%{User-Agent}i 就代表user-agent頭部,如果請求中沒有的話,它就為空。
這裡有個問題,即沒有直接顯示訪問請求中全部頭部的操作,用StackOverflow一哥們的話說就是

There's no way out of the box

翻譯過來就是: 沒有開箱即用的方法。非要實現只能另外想辦法了。

這裡附上pattern中相應的字母代表的含義


  • %a - 遠端IP地址
  • %A - 本地IP地址
  • %b - 傳送的位元組數,不包括HTTP頭,或“ - ”如果沒有傳送位元組
  • %B - 傳送的位元組數,不包括HTTP頭
  • %h - 遠端主機名
  • %H - 請求協議
  • %l (小寫的L)- 遠端邏輯從identd的使用者名稱(總是返回' - ')
  • %m - 請求方法
  • %p - 本地埠
  • %q - 查詢字串(在前面加上一個“?”如果它存在,否則是一個空字串
  • %r - 第一行的要求
  • %s - 響應的HTTP狀態程式碼
  • %S - 使用者會話ID
  • %t - 日期和時間,在通用日誌格式
  • %u - 遠端使用者身份驗證
  • %U - 請求的URL路徑
  • %v - 本地伺服器名
  • %D - 處理請求的時間(以毫秒為單位)
  • %T - 處理請求的時間(以秒為單位)
  • %I (大寫的i) - 當前請求的執行緒名稱

上面新增完成後,重啟Tomcat,之後,在相應目錄就會生成之前你定義的檔案,我這裡就是在conf目錄下多了個headers.----.--.--.txt,-代表相應日期。隨便訪問下網站,就會發現裡面一下多出了好多預期的內容:

cookie我也懶得打馬賽克了,問題不大(●'◡'●)

如果想繼續深入瞭解的話, 可以點選這裡

最後打波廣告,歡迎來我新搭建的小窩玩耍 http://asche.top/
部落格經常性的炸,我也很無奈了╯︿╰