Log Tomcat Tertanam Spring Boot

1. Perkenalan

Spring Boot hadir dengan server Tomcat tertanam, yang sangat berguna. Namun, kami tidak dapat melihat log Tomcat secara default.

Dalam tutorial ini, kita akan belajar cara mengkonfigurasi Spring Boot untuk menampilkan log internal dan akses Tomcat melalui aplikasi mainan.

2. Contoh Aplikasi

Pertama-tama, mari buat REST API. Kami akan mendefinisikan GreetingsController untuk menyambut pengguna:

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

3. Jenis Log Tomcat

Tomcat yang disematkan menyimpan dua jenis log:

  • Akses log
  • Log server internal

The akses log menyimpan catatan dari semua permintaan diproses oleh aplikasi. Log ini dapat digunakan untuk melacak hal-hal seperti jumlah klik halaman dan aktivitas sesi pengguna . Sebaliknya, log server internal akan membantu kami memecahkan masalah apa pun dalam aplikasi yang sedang berjalan.

4. Akses Log

Secara default, log akses tidak diaktifkan.

Kita bisa dengan mudah mengaktifkannya, dengan menambahkan properti ke application.properties :

server.tomcat.accesslog.enabled=true

Demikian pula, kita dapat menggunakan argumen VM untuk mengaktifkan log akses:

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

File log ini akan dibuat di direktori sementara. Misalnya, di Windows, direktori untuk log akses akan terlihat seperti AppData \ Local \ Temp \ tomcat.2142886552084850151.40123 \ logs

4.1. Format

Jadi, dengan mengaktifkan properti ini, kami akan melihat sesuatu seperti berikut ini di aplikasi 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 memiliki format:

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

Yang bisa kita tafsirkan sebagai:

% h - IP klien yang telah mengirimkan permintaan, 0: 0: 0: 0: 0: 0: 0: 1 dalam kasus ini

% l - identitas pengguna

% u - nama pengguna yang ditentukan oleh otentikasi HTTP

% t - waktu permintaan diterima

% r - baris permintaan dari klien, GET / greetings / Harry HTTP / 1.1 dalam kasus ini

%> s - kode status yang dikirim dari server ke klien, seperti 200 di sini

% b - ukuran respons ke klien, atau 27 untuk permintaan ini

Karena permintaan ini tidak memiliki pengguna yang diautentikasi, % l dan% u mencetak tanda hubung.

Bahkan, jika ada informasi yang hilang, Tomcat akan mencetak tanda hubung untuk slot itu .

4.2. Menyesuaikan Log Akses

Kita dapat mengganti konfigurasi Spring Boot default dengan menambahkan beberapa properti di application.properties.

Pertama, untuk mengubah nama file log default:

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

Selain itu, kami dapat mengubah lokasi file log:

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

Terakhir, kita dapat mengganti cara log ditulis di file log:

server.tomcat.accesslog.pattern=common

Ada juga beberapa properti yang dapat dikonfigurasi di Spring Boot.

5. Log Internal

Log internal server Tomcat sangat membantu untuk menyelesaikan masalah sisi server apa pun.

Untuk melihat log ini, kita harus menambahkan konfigurasi logging di bawah ini 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. Kesimpulan

Dalam artikel singkat ini, kami telah mempelajari perbedaan antara log internal dan akses Tomcat. Kemudian, kami melihat cara mengaktifkan dan menyesuaikannya.

Pastikan untuk memeriksa sampel di GitHub.