1. 序章

Spring Bootには、非常に便利なTomcatサーバーが組み込まれています。 ただし、デフォルトではTomcatのログを表示できません。

このチュートリアルでは、おもちゃのアプリケーションを介してTomcatの内部ログとアクセスログを表示するように構成するSpring Boot方法を学習します。

2. サンプルアプリケーション

まず、RESTAPIを作成しましょう。 ユーザーに挨拶するためにGreetingsControllerを定義します。

@GetMapping("/greetings/{username}")
public String getGreetings(@PathVariable("username") String userName) {
    return "Hello " + userName + ", Good day...!!!";
}

3. Tomcatログタイプ

組み込みTomcatは、次の2種類のログを保存します。

  • アクセスログ
  • 内部サーバーログ

アクセスログは、アプリケーションによって処理されたすべてのリクエストの記録を保持します。 これらのログを使用して、ページヒット数やユーザーセッションアクティビティなどを追跡できます。 対照的に、内部サーバーログは、実行中のアプリケーションの問題のトラブルシューティングに役立ちます。

4. アクセスログ

デフォルトでは、アクセスログは有効になっていません。

ただし、 application.properties にプロパティを追加することで、これらを簡単に有効にできます。

server.tomcat.accesslog.enabled=true

同様に、VM引数を使用して、アクセスログを有効にすることができます。

java -jar -Dserver.tomcat.basedir=tomcat -Dserver.tomcat.accesslog.enabled=true app.jar

これらのログファイルは一時ディレクトリに作成されます。たとえば、Windowsでは、アクセスログのディレクトリは AppData \ Local \ Temp \ tomcat.2142886552084850151.40123 \logsのようになります。

4.1. フォーマット

したがって、このプロパティを有効にすると、実行中のアプリケーションに次のようなものが表示されます。

0:0:0:0:0:0:0:1 - - [13/May/2019:23:14:51 +0530] "GET /greetings/Harry HTTP/1.1" 200 27
0:0:0:0:0:0:0:1 - - [13/May/2019:23:17:23 +0530] "GET /greetings/Harry HTTP/1.1" 200 27

これらはアクセスログであり、次の形式になっています。

%h %l %u %t \"%r\" %>s %b

これは次のように解釈できます。

%h –リクエストを送信したクライアントIP、 0:0:0:0:0:0:0:1 、この場合は %l [ X100X] –ユーザーのID %u –HTTP認証によって決定されたユーザー名%t –要求が受信された時刻 %r –クライアントからの要求行。 GET/greetings/HarryHTTP/1.1この場合は%>s –サーバーからクライアントに送信されるステータスコード。 X415X]200ここ%b –クライアントへの応答のサイズ、またはこれらの要求の場合は 27

このリクエストには認証されたユーザーがいなかったため、%lと%uはダッシュを印刷しました。

実際、情報が欠落している場合、Tomcatはそのスロットのダッシュを出力します。

4.2. アクセスログのカスタマイズ

にいくつかのプロパティを追加することで、デフォルトのSpringBoot構成をオーバーライドできます。 application.properties。 

まず、デフォルトのログファイル名を変更するには:

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

SpringBootにはさらにいくつかの構成可能なプロパティがあります。

5. 内部ログ

Tomcatサーバーの内部ログは、サーバー側の問題を解決するのに非常に役立ちます。

これらのログを表示するには、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

6. 結論

この簡単な記事では、Tomcatの内部ログとアクセスログの違いを学びました。 次に、それらを有効にしてカスタマイズする方法を確認しました。

GitHubでサンプルを確認してください。