1. 程式人生 > >Spring boot列印tomcat日誌

Spring boot列印tomcat日誌

在tomcat配置檔案server.xml中有一個地方配置列印tomcat的訪問日誌,但是在spring boot中將tomcat自動嵌入到專案中,這是怎麼來配置tomcat的訪問日誌呢?本篇文章將詳細介紹怎麼在spring boot中配置tomcat的訪問日誌(在application.properties)

在tomcat的access中列印請求的情況可以幫助我們分析問題,通常比較關注的有訪問ip、執行緒號、訪問url、返回狀態碼、訪問時間、持續時間和請求header等資訊。

可以在spring boot的配置檔案中新增server.tomcat.accesslog配置tomcat的access日誌

server.tomcat.accesslog.buffered=true # Buffer output such that it is only flushed periodically.
server.tomcat.accesslog.directory=logs # Directory in which log files are created. Can be relative to the tomcat base dir or absolute.
server.tomcat.accesslog.enabled=false # Enable access log.
server.tomcat.accesslog.file-date-format=.yyyy-MM-dd

# Date format to place in log file name.
server.tomcat.accesslog.pattern=common # Format pattern for access logs.
server.tomcat.accesslog.prefix=access_log # Log file name prefix.
server.tomcat.accesslog.rename-on-rotate=false # Defer inclusion of the date stamp in the file name until rotate time.
server.tomcat.accesslog.request-attributes-enabled=false
# Set request attributes for IP address, Hostname, protocol and port used for the request.
server.tomcat.accesslog.rotate=true # Enable access log rotation.

server.tomcat.accesslog.suffix=.log # Log file name suffix.

比較常見的配置有:

    1、server.tomcat.accesslog.enabled,取值true和false,需要accesslog時設定為true

    2、server.tomcat.accesslog.directory,指定access檔案的路徑

    3、server.tomcat.accesslog.pattern,定義日誌的格式

    4、server.tomcat.accesslog.rotate,指定是否啟用日誌輪轉,預設為true。這個引數決定是否需要切換日誌檔案,如果設定成false,則日誌檔案不會切換,即所有的檔案列印到同一個日誌檔案中,並且file-date-format引數會被忽略

pattern的配置
  • %a - Remote IP address,遠端ip地址,注意不一定是原始ip地址,中間可能經過nginx等的轉發
  • %A - Local IP address,本地ip
  • %b - Bytes sent, excluding HTTP headers, or '-' if no bytes were sent
  • %B - Bytes sent, excluding HTTP headers
  • %h - Remote host name (or IP address if enableLookups for the connector is false),遠端主機名稱(如果resolveHosts為false則展示IP)
  • %H - Request protocol,請求協議
  • %l - Remote logical username from identd (always returns '-')
  • %m - Request method,請求方法(GET,POST)
  • %p - Local port,接受請求的本地埠
  • %q - Query string (prepended with a '?' if it exists, otherwise an empty string
  • %r - First line of the request,HTTP請求的第一行(包括請求方法,請求的URI)
  • %s - HTTP status code of the response,HTTP的響應程式碼,如:200,404
  • %S - User session ID
  • %t - Date and time, in Common Log Format format,日期和時間,Common Log Format格式
  • %u - Remote user that was authenticated
  • %U - Requested URL path
  • %v - Local server name
  • %D - Time taken to process the request, in millis,處理請求的時間,單位毫秒
  • %T - Time taken to process the request, in seconds,處理請求的時間,單位秒
  • %I - current Request thread name (can compare later with stacktraces),當前請求的執行緒名,可以和列印的log對比查詢問題

Access log 也支援將cookie、header、session或者其他在ServletRequest中的物件資訊列印到日誌中,其配置遵循Apache配置的格式({xxx}指值的名稱):

  • %{xxx}i for incoming headers,request header資訊
  • %{xxx}o for outgoing response headers,response header資訊
  • %{xxx}c for a specific cookie
  • %{xxx}r xxx is an attribute in the ServletRequest
  • %{xxx}s xxx is an attribute in the HttpSession
  • %{xxx}t xxx is an enhanced SimpleDateFormat pattern (see Configuration Reference document for details on supported time patterns)

Access log內建了兩個日誌格式模板,可以直接指定pattern為模板名稱,如:

server.tomcat.accesslog.pattern=common
  • 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資訊。

除了內建的模板,我們常用的配置有:

  • %t %a "%r" %s (%D ms),日期和時間,請求來自的IP(不一定是原始IP),請求第一行,response code,響應時間(毫秒),樣例:[21/Mar/2017:00:06:40 +0800] 127.0.0.1 POST /bgc/syncJudgeResult HTTP/1.0 200 63,這裡請求來自IP就是經過本機的nginx轉發的。
  • %t [%I] %{X-Forwarded-For}i %a %r %s (%D ms),日期和時間,執行緒名,原始IP,請求來自的IP(不一定是原始IP),請求第一行,response code,響應時間(毫秒),樣例:[21/Apr/2017:00:24:40 +0800][http-nio-7001-exec-4] 10.125.15.1 127.0.0.1 POST /bgc/syncJudgeResult HTTP/1.0 200 5,這裡的第一個IP是Nginx配置了X-Forwarded-For記錄了原始IP。

這裡簡要介紹下上面用到的HTTP請求頭X-Forwarded-For,它是一個 HTTP 擴充套件頭部,用來表示 HTTP 請求端真實 IP,其格式為:X-Forwarded-For: client, proxy1, proxy2,其中的值通過一個逗號+空格把多個IP地址區分開,最左邊(client)是最原始客戶端的IP地址,代理伺服器每成功收到一個請求,就把請求來源IP地址新增到右邊