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 RequestLog. Lihat juga tabel log permintaan untuk deskripsi kolom log permintaan.

Setiap log permintaan berisi daftar log aplikasi (AppLog) yang terkait dengan permintaan tersebut, yang ditampilkan di properti RequestLog.app_logs. Setiap log aplikasi berisi waktu penulisan log, pesan log, dan level log.

Menulis log aplikasi

Sebaiknya Anda membaca dokumentasi modul logging Python standar di Python.org.

Modul logging Python memungkinkan developer mencatat log 5 tingkat keparahan. :

  • Debug
  • Info
  • Peringatan
  • Error
  • Penting

Contoh berikut menunjukkan cara menggunakan berbagai level logging:

import logging

import webapp2


class MainPage(webapp2.RequestHandler):
    def get(self):
        logging.debug('This is a debug message')
        logging.info('This is an info message')
        logging.warning('This is a warning message')
        logging.error('This is an error message')
        logging.critical('This is a critical message')

        try:
            raise ValueError('This is a sample value error.')
        except ValueError:
            logging.exception('A example exception log.')

        self.response.out.write('Logging example.')


app = webapp2.WSGIApplication([
    ('/', MainPage)
], debug=True)

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 Google Cloud Observability. Lihat Harga Google Cloud Observability untuk mengetahui informasi selengkapnya tentang biaya dan batas logging. Untuk penyimpanan log jangka panjang, Anda dapat mengekspor log dari Google Cloud Observability ke Cloud Storage, BigQuery, dan Pub/Sub.

Server pengembangan dan Logs API

Secara default, log hanya disimpan dalam memori di server pengembangan dan dapat diakses jika Anda ingin menguji fitur Logs API. Jika ingin mempertahankan log dari server pengembangan ke disk di lokasi yang Anda pilih sendiri, berikan jalur dan nama file yang diinginkan ke opsi command line --logs_path sebagai berikut:

   python2 [DEVAPPSERVER_ROOT]/google_appengine/dev_appserver.py --logs_path=your-path/your-logfile-name your-app-directory