爲Spring boot項目添加tomcat訪問日誌教程

一,首先說下添加訪問日誌的必要性

1,方便定位問題:當外部人員調用我們的接口時,不用每次都爲我們提供完整的URL和參數,只需要提供requestId等關鍵字即可

然後我們根據requestId來獲取到相應的日誌

2,方便查詢訪問情況:當請求我們的接口的不同參數值時可能走了我們不同的業務邏輯分支,此時如果想知道執行業務邏輯A的情況時,只需要根據關鍵的參數值來搜索對應的日誌即可

3,做數據統計:根據訪問日誌來統計用戶情況,QPS等

反正就是有了訪問日誌好處多多...

二,如何對spring boot項目進行配置呢?

其實非常的簡單,只需要在spring boot項目的application.yml或application.xml中配置如下信息(我這裏選擇yml文件):

server:
  port: 8080
  tomcat:
    basedir: /tmp/tomcat
    accesslog:
      enabled: true
      directory: logs
      pattern: '"%t","%{Http_X_Forwarded_For}i","%H","%m","%U%q","%s","%A","%D"'
      prefix: access_admin
      suffix: .log
      rename-on-rotate: true
      buffered: true

然後重啓項目,並進行訪問,此時我們可以看到服務器的/tmp/tomcat/下面生成了我們的訪問日誌信息

三,配置中的各個參數是什麼含義呢?

別急別急,且聽本小哥哥慢慢道來.... 

  • basedir: 指定日誌文件需要儲存的目錄(即你想讓日誌文件放在電腦上的哪個文件夾中)

server.tomcat.accesslog相關的配置參數

  • enabled取值true、false,true表示支持打印訪問日誌,false則表示不需要,我們要打印就當然要設置爲true了

當然,有時爲了上線後能獲取到更好的訪問性能,會將訪問日誌去掉,此時就可以設置爲false了

  • directory:指定日誌文件存放的文件夾,放在basedir文件夾內,組成:/tmp/tomcat/logs
  • pattern: 定義日誌的格式,其中符號含義如下:

%a - 遠程IP地址

%A - 本地IP地址

%b - 發送的字節數(Bytes sent), 不包括HTTP headers的字節,如果爲0則展示'-'

%B - 發送的字節數(Bytes sent), 不包括HTTP headers的字節

%h - 遠程主機名稱(如果resolveHosts爲false則展示IP)

%H - 請求協議

%l - 遠程用戶名,始終爲'-'(Remote logical username from identd)

%m - 請求的方法(GET, POST等)%p - 接受請求的本地端口

%q - 查詢字符串,如果存在,有一個前置的'?'

%r - 請求的第一行(包括請求方法和請求的URI)

%s - response的HTTP狀態碼(200,404等)%S - 用戶的session ID

%t - 日期和時間,Common Log Format格式

%u - 被認證的遠程用戶, 不存在則展示'-'

%U - 請求URL路徑%v - 本地服務名

%D - 處理請求的時間,單位爲毫秒

%T - 處理請求的時間,單位爲秒%I - 當前請求的線程名(can compare later with stacktraces)

同時也可以指定pattern爲Access log自帶的內置兩個日誌格式模板:common、combined

common%h %l %u %t "%r" %s %b,依次爲:遠程主機名稱,遠程用戶名,被認證的遠程用戶,日期和時間,請求的第一行,response code,發送的字節數

combined%h %l %u %t "%r" %s %b "%{Referer}i" "%{User-Agent}i",依次爲:遠程主機名稱,遠程用戶名,被認證的遠程用戶,日期和時間,請求的第一行,response code,發送的字節數,request header的Referer信息,request header的User-Agent信息

pattern也支持cookie,請求header,響應headers,Session或者其他在ServletRequest中的對象的信息。格式遵循apache語法:

%{xxx}i 請求headers的信息

%{xxx}o 響應headers的信息

%{xxx}c 請求cookie的信息

%{xxx}r xxx是ServletRequest的一個屬性

%{xxx}s xxx是HttpSession的一個屬性
如%{Http_X_Forwarded_For}i 獲取的是headers中的Http_X_Forwarded_For參數的值
  • prefix:日誌文件名,
  • suffix: 日誌文件後綴
  • rename-on-rotate:是否在旋轉時,在文件名中包含日期戳
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章