Spring Boot本身附帶一個(gè)嵌入式Tomcat服務(wù)器,非常方便。但是在默認(rèn)情況下是無法看到Tomcat的日志。
在本文中,將介紹如何通過配置Spring Boot來顯示Tomcat的內(nèi)部日志和訪問日志。
Tomcat日志類型
嵌入式Tomcat存儲兩種類型的日志:
- 訪問日志 Access Log
- 內(nèi)部服務(wù)器日志
訪問日志保存應(yīng)用程序處理的所有請求的記錄。這些日志可用于跟蹤頁面命中計(jì)數(shù)和用戶會話活動等內(nèi)容。而內(nèi)部服務(wù)器日志將幫助我們解決運(yùn)行中的應(yīng)用程序的任何問題。
訪問日志
默認(rèn)情況下,是未啟用訪問日志的。我們可以通過向application.properties添加屬性來輕松啟用它們:
server.tomcat.accesslog.enabled=true
同樣,也可以使用VM參數(shù)來啟用訪問日志:
java -jar -Dserver.tomcat.basedir=tomcat -Dserver.tomcat.accesslog.enabled=true app.jar
這些日志文件將在臨時(shí)目錄中創(chuàng)建。 例如,在Windows上,訪問日志的目錄將類似于AppData\Local\Temp\tomcat.2142886552084850151.40123\logs
日志格式
默認(rèn)訪問日志的格式如下:
%h %l %u %t \"%r\" %>s %b
它的含義是:
%h - 發(fā)送請求的客戶端IP;
%l - 用戶的身份;
%u - 由HTTP身份驗(yàn)證確定的用戶名;
%t - 收到請求的時(shí)間;
%r - 來自客戶端的請求URL;
%> s - 從服務(wù)器發(fā)送到客戶端的狀態(tài)代碼,如 200;
%b -客戶端響應(yīng)的大小,或者這些請求的響應(yīng)大小;
由于請求是沒有經(jīng)過身份驗(yàn)證的用戶,因此%l和%u打印了破折號。
實(shí)際上,如果缺少任何信息,Tomcat將為該插槽打印一個(gè)破折號。
自定義訪問日志
我們可以通過在application.properties中添加一些屬性來覆蓋默認(rèn)的Spring Boot配置。
首先,要更改默認(rèn)日志文件名:
server.tomcat.accesslog.suffix=.log
server.tomcat.accesslog.prefix=access_log
server.tomcat.accesslog.file-date-format=.yyyy-MM-dd
另外,我們可以更改日志文件的位置:
server.tomcat.basedir=tomcat
server.tomcat.accesslog.directory=logs
最后,我們可以覆蓋日志文件中寫入日志的方式:
server.tomcat.accesslog.pattern=common
服務(wù)器內(nèi)部日志
Tomcat服務(wù)器的內(nèi)部日志非常有助于解決任何服務(wù)器端問題。
要查看這些日志,我們必須在application.properties中添加以下日志記錄配置:
logging.level.org.apache.tomcat=DEBUG
logging.level.org.apache.catalina=DEBUG
然后我們會看到類似的東西:
2019-05-17 15:41:07.261 DEBUG 31160 --- [0124-Acceptor-0] o.apache.tomcat.util.threads.LimitLatch : Counting up[http-nio-40124-Acceptor-0] latch=1
2019-05-17 15:41:07.262 DEBUG 31160 --- [0124-Acceptor-0] o.apache.tomcat.util.threads.LimitLatch : Counting up[http-nio-40124-Acceptor-0] latch=2
2019-05-17 15:41:07.278 DEBUG 31160 --- [io-40124-exec-1] org.apache.tomcat.util.modeler.Registry : Managed= Tomcat:type=RequestProcessor,worker="http-nio-40124",name=HttpRequest1
...
2019-05-17 15:41:07.279 DEBUG 31160 --- [io-40124-exec-1] m.m.MbeansDescriptorsIntrospectionSource : Introspected attribute virtualHost public java.lang.String org.apache.coyote.RequestInfo.getVirtualHost() null
...
2019-05-17 15:41:07.280 DEBUG 31160 --- [io-40124-exec-1] o.a.tomcat.util.modeler.BaseModelMBean : preRegister org.apache.coyote.RequestInfo@1e6f89ad Tomcat:type=RequestProcessor,worker="http-nio-40124",name=HttpRequest1
2019-05-17 15:41:07.292 DEBUG 31160 --- [io-40124-exec-1] org.apache.tomcat.util.http.Parameters : Set query string encoding to UTF-8
2019-05-17 15:41:07.294 DEBUG 31160 --- [io-40124-exec-1] o.a.t.util.http.Rfc6265CookieProcessor : Cookies: Parsing b[]: jenkins-timestamper-offset=-19800000
2019-05-17 15:41:07.296 DEBUG 31160 --- [io-40124-exec-1] o.a.c.authenticator.AuthenticatorBase : Security checking request GET /greetings/Harry
2019-05-17 15:41:07.296 DEBUG 31160 --- [io-40124-exec-1] org.apache.catalina.realm.RealmBase : No applicable constraints defined