Membaca dan Menulis Log Aplikasi

Ringkasan

Saat permintaan dikirim ke aplikasi Anda, log permintaan ditulis secara otomatis oleh App Engine. Selama menangani permintaan, aplikasi Anda juga dapat menulis log aplikasi. Di halaman ini, Anda akan mempelajari cara menulis log aplikasi dari aplikasi, cara melihat logging di Konsol Google Cloud, dan cara memahami log permintaan yang ditulis App Engine selama permintaan.

Untuk mengetahui informasi tentang cara mendownload data log, lihat Ringkasan ekspor log.

Log permintaan vs log aplikasi

Ada dua kategori data log: log permintaan dan log aplikasi. Log permintaan secara otomatis ditulis oleh App Engine untuk setiap permintaan yang ditangani oleh aplikasi Anda, dan berisi informasi seperti ID project, versi HTTP, dan sebagainya. Untuk mengetahui daftar lengkap properti yang tersedia untuk log permintaan, lihat RequestLogs. Lihat juga tabel log permintaan untuk deskripsi kolom log permintaan.

Setiap log permintaan berisi daftar log aplikasi (AppLogLine) yang terkait dengan permintaan tersebut, yang ditampilkan dalam metode RequestLogs.getAppLogLines(). Setiap log aplikasi berisi waktu penulisan log, pesan log, dan level log.

Menulis log aplikasi

App Engine Java SDK memungkinkan developer mencatat tingkat keparahan berikut:

  • SEVERE
  • WARNING
  • INFO
  • CONFIG
  • FINE
  • FINER
  • FINEST

Level log, INFO, WARNING, dan SEVERE, muncul dalam log tanpa konfigurasi tambahan. Untuk menambahkan level logging lainnya ke aplikasi Java, Anda perlu menambahkan properti sistem yang sesuai ke file appengine-web.xml project dan Anda mungkin juga perlu memodifikasi logging.properties untuk menyetel level log yang diinginkan. Kedua file ini dibuat saat Anda membuat project Java App Engine baru menggunakan Maven. Anda dapat menemukan file ini di lokasi berikut:

Tata Letak Project Maven

Untuk menambahkan level log selain INFO, WARNING, atau SEVERE, edit file appengine-web.xml untuk menambahkan kode berikut di dalam tag <appengine-web-app>:

    <system-properties>
       <property name="java.util.logging.config.file" value="WEB-INF/logging.properties"/>
    </system-properties>

Level log default di logging.properties adalah INFO. Untuk mengubah level log default bagi semua class di aplikasi Anda, edit file logging.properties untuk mengubah level. Misalnya, Anda dapat mengubah .level = INFO menjadi .level = WARNING.

Dalam kode aplikasi, tulis pesan log menggunakan java.util.logging.Logger API. Contoh di bawah ini menulis pesan log Info:

import java.util.logging.Logger;
//...

public class MyClass {

  private static final Logger log = Logger.getLogger(MyClass.class.getName());
  log.info("Your information log message.");
  //....

Saat aplikasi Anda berjalan, App Engine akan mencatat pesan dan menyediakannya di Logs Explorer.

Format URL log di konsol Google Cloud

Lihat contoh URL berikut untuk mengetahui contoh format URL log di Konsol Google Cloud:

https://console.cloud.google.com/logs?filters=request_id:000000db00ff00ff827e493472570001737e73686966746361727331000168656164000100

Membaca log di konsol

Untuk melihat log yang ditulis oleh aplikasi yang berjalan di lingkungan standar, gunakan Logs Explorer.

Log App Engine standar berisi data dalam format log gabungan Apache, beserta beberapa kolom App Engine khusus, seperti yang ditampilkan dalam contoh log berikut:

192.0.2.0 - test [27/Jun/2014:09:11:47 -0700] "GET / HTTP/1.1" 200 414
"http://www.example.com/index.html"
Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36"
"1-dot-calm-sylph-602.appspot.com" ms=195 cpu_ms=42 cpm_usd=0.000046
loading_request=1 instance=00c61b117cfeb66f973d7df1b7f4ae1f064d app_engine_release=

Memahami kolom log permintaan

Tabel berikut mencantumkan kolom dalam urutan kemunculan bersama dengan deskripsi:

Urutan Kolom Nama Kolom Selalu Ada? Deskripsi
1 Alamat klien Ya Alamat IP klien. Contoh: 192.0.2.0
2 Identitas RFC 1413 Tidak Identitas klien RFC 1413. Ini hampir selalu berupa karakter -
3 Pengguna Tidak Hanya ditampilkan jika aplikasi menggunakan Users API dan pengguna sudah login. Nilai ini adalah bagian "nama panggilan" Akun Google, misalnya, jika Akun Google adalah test@example.com, nama panggilan yang dicatat dalam kolom ini adalah test.
4 Stempel waktu Ya Stempel waktu permintaan. Contoh: [27/Jun/2014:09:11:47 -0700]
5 Meminta string kueri Ya Baris pertama permintaan, yang berisi metode, jalur, dan versi HTTP. Contoh: GET / HTTP/1.1
6 Kode Status HTTP Ya Kode status HTTP dikembalikan. Contoh: 200
7 Ukuran respons Ya Ukuran respons dalam byte. Contoh: 414
8 Jalur perujuk Tidak Jika tidak ada perujuk, log tidak akan berisi jalur, tetapi hanya -. Contoh jalur perujuk: "http://www.example.com/index.html".
9 Agent pengguna Ya Mengidentifikasi browser dan sistem operasi ke server web. Contoh: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36
10 Nama host Ya Nama host yang digunakan oleh klien untuk terhubung ke aplikasi App Engine. Contoh : (1-dot-calm-sylph-602.appspot.com)
11 Waktu jam dinding Ya Total waktu jam dalam milidetik yang dihabiskan oleh App Engine pada permintaan. Durasi waktu ini tidak termasuk waktu yang dihabiskan antara klien dan server untuk menjalankan instance aplikasi Anda. Contoh: ms=195.
12 CPU milidetik Ya Milidetik CPU yang diperlukan untuk memenuhi permintaan. Ini adalah jumlah milidetik yang dihabiskan oleh CPU untuk benar-benar mengeksekusi kode aplikasi Anda, yang dinyatakan dalam CPU Intel x86 1,2 GHz baseline. Jika CPU yang benar-benar digunakan lebih cepat dari baseline, milidetik CPU dapat lebih besar daripada waktu jam sebenarnya yang ditentukan di atas. Contoh: cpu_ms=42
13 Exit code Tidak Hanya ada jika instance dimatikan setelah mendapatkan permintaan. Dalam format exit_code=XXX dengan XXX adalah angka 3 digit yang sesuai dengan alasan penonaktifan instance. Kode keluar tidak didokumentasikan karena pada dasarnya dimaksudkan untuk membantu Google menemukan dan memperbaiki masalah.
14 Perkiraan biaya Ya TIDAK DIGUNAKAN LAGI. Perkiraan biaya 1.000 permintaan seperti ini, dalam USD. Contoh: cpm_usd=0.000046
15 Nama antrean Tidak Nama task queue yang digunakan. Hanya ada jika permintaan menggunakan task queue. Contoh: queue_name=default
16 Nama tugas Tidak Nama tugas yang dieksekusi di task queue untuk permintaan ini. Hanya ada jika permintaan menyebabkan antrean tugas. Contoh: task_name=7287390692361099748
17 Antrean tertunda Tidak Hanya ada jika permintaan menghabiskan beberapa waktu dalam antrean tertunda. Jika ada banyak instance di log dan/atau nilainya tinggi, hal ini mungkin merupakan indikasi bahwa Anda memerlukan lebih banyak instance untuk menyajikan traffic. Contoh: pending_ms=195
18 Memuat permintaan Tidak Hanya ada jika permintaan adalah permintaan pemuatan. Ini berarti sebuah instance harus dimulai. Idealnya, instance harus aktif dan responsif selama mungkin, melayani sejumlah besar permintaan sebelum didaur ulang dan perlu dimulai lagi. Yang berarti Anda tidak akan melihat terlalu banyak hal ini di log Anda. Contoh: loading_request=1.
19 Instance Ya ID unik untuk instance yang menangani permintaan. Contoh: instance=00c61b117cfeb66f973d7df1b7f4ae1f064d
20 Versi Ya Versi rilis App Engine saat ini yang digunakan dalam App Engine produksi:

Kuota dan batas

Aplikasi Anda terpengaruh oleh kuota terkait log berikut:

  • Mencatat data ke dalam log yang diambil melalui Logs API.
  • Alokasi dan retensi penyerapan log.

Kuota untuk data yang diambil

Gratis 100 megabyte data log pertama yang diambil per hari melalui panggilan Logs API. Data yang melebihi 100 megabyte akan dikenai biaya sebesar $0,12/GB.

Alokasi penyerapan log

Logging untuk aplikasi App Engine disediakan oleh Kemampuan Observasi Google Cloud. Lihat Harga Kemampuan Observasi Google Cloud untuk mengetahui informasi lebih lanjut tentang biaya dan batas logging. Untuk penyimpanan log jangka panjang, Anda dapat mengekspor log dari Kemampuan Observasi Google Cloud ke Cloud Storage, BigQuery, dan Pub/Sub.