Log Tomcat Tertanam Spring Boot

1. Pengenalan

Spring Boot dilengkapi dengan pelayan Tomcat tertanam, yang sangat berguna. Walau bagaimanapun, kami tidak dapat melihat log Tomcat secara lalai.

Dalam tutorial ini, kita akan belajar bagaimana mengkonfigurasi Spring Boot untuk menunjukkan log dalaman dan akses Tomcat melalui aplikasi mainan.

2. Contoh Permohonan

Pertama sekali, mari kita buat REST API. Kami akan menentukan GreetingsController untuk memberi salam kepada pengguna:

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

3. Jenis Log Tomcat

Tomcat terbenam menyimpan dua jenis log:

  • Akses log
  • Log pelayan dalaman

The log akses menyimpan rekod semua permintaan diproses oleh aplikasi. Log ini boleh digunakan untuk mengesan perkara seperti jumlah klik halaman dan aktiviti sesi pengguna . Sebaliknya, log pelayan dalaman akan membantu kami menyelesaikan masalah dalam aplikasi kami yang sedang berjalan.

4. Log Akses

Secara lalai, log akses tidak diaktifkan.

Kita boleh mengaktifkannya dengan mudah, dengan menambahkan harta tanah ke application.properties :

server.tomcat.accesslog.enabled=true

Begitu juga, kita boleh menggunakan argumen VM untuk mengaktifkan log akses:

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

Fail log ini akan dibuat dalam direktori sementara. Contohnya, pada Windows, direktori log akses akan kelihatan seperti AppData \ Local \ Temp \ tomcat.2142886552084850151.40123 \ log

4.1. Format

Oleh itu, dengan sifat ini diaktifkan, kami akan melihat seperti berikut dalam aplikasi kami yang sedang berjalan:

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

Ini adalah log akses, dan mempunyai format:

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

Yang boleh kita tafsirkan sebagai:

% h - IP pelanggan yang telah menghantar permintaan, 0: 0: 0: 0: 0: 0: 0: 1 dalam kes ini

% l - identiti pengguna

% u - nama pengguna ditentukan oleh pengesahan HTTP

% t - masa permintaan diterima

% r - baris permintaan dari pelanggan, GET / salam / Harry HTTP / 1.1 dalam kes ini

%> s - kod status yang dihantar dari pelayan kepada pelanggan, seperti 200 di sini

% b - ukuran respons kepada pelanggan, atau 27 untuk permintaan ini

Oleh kerana permintaan ini tidak mempunyai pengguna yang disahkan, % l dan% u dicetak tanda sempang.

Sebenarnya, jika ada maklumat yang hilang, Tomcat akan mencetak tanda sempang untuk slot tersebut .

4.2. Menyesuaikan Log Akses

Kita boleh mengatasi konfigurasi Spring Boot lalai dengan menambahkan beberapa sifat di application.properties.

Pertama, untuk menukar nama fail log lalai:

server.tomcat.accesslog.suffix=.log server.tomcat.accesslog.prefix=access_log server.tomcat.accesslog.file-date-format=.yyyy-MM-dd

Kita juga boleh mengubah lokasi fail log:

server.tomcat.basedir=tomcat server.tomcat.accesslog.directory=logs

Akhirnya, kita dapat mengatasi cara log ditulis dalam fail log:

server.tomcat.accesslog.pattern=common

Terdapat juga beberapa sifat yang boleh dikonfigurasi di Spring Boot juga.

5. Log Dalaman

Log dalaman pelayan Tomcat sangat membantu menyelesaikan sebarang masalah dari sisi pelayan.

Untuk melihat log ini, kita harus menambahkan konfigurasi pembalakan di bawah di application.properties :

logging.level.org.apache.tomcat=DEBUG logging.level.org.apache.catalina=DEBUG

Dan kemudian kita akan melihat sesuatu seperti:

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 [email protected] 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. Kesimpulannya

Dalam artikel ringkas ini, kami telah mengetahui perbezaan antara log dalaman dan akses Tomcat. Kemudian, kami melihat cara mengaktifkan dan menyesuaikannya.

Pastikan untuk memeriksa sampel di GitHub.