Menulis log tugas

Dokumen ini menjelaskan cara menulis log tugas dan cara membuat serta menjalankan tugas Batch yang memiliki log tugas.

Saat logging diaktifkan untuk suatu tugas, log tugas akan dihasilkan dari pesan yang dicetak oleh runnable tugas selama runtime. Dengan mengonfigurasi runnable untuk menulis log tugas, Anda dapat menampilkan informasi kustom di Cloud Logging, yang dapat membantu mempermudah analisis dan pemecahan masalah Anda. Untuk mempelajari log lebih lanjut, baca bagian Menganalisis tugas menggunakan log.

Sebelum memulai

Membuat dan menjalankan tugas yang memiliki log tugas

Untuk membuat dan menjalankan tugas yang Anda inginkan untuk memiliki log tugas, lakukan hal berikut saat Anda membuat tugas:

  1. Aktifkan log untuk tugas. Dengan begitu, log yang ditulis untuk tugas dapat dibuat.
  2. Untuk setiap log tugas yang Anda inginkan untuk tugas tersebut, tambahkan perintah yang menulis log tugas ke runnable. Saat tugas berjalan, log tugas akan dibuat setiap kali perintah untuk menulis log tugas dijalankan.

    Untuk mempelajari cara menulis log tugas, lihat bagian Menulis log tugas dalam dokumen ini.

Menulis log tugas

Log tugas ditulis untuk setiap konten yang dicetak oleh runnable tugas ke streaming output standar (stdout) atau stream error standar (stderr) selama runtime. Misalnya, Anda dapat menulis log tugas menggunakan perintah echo. Struktur log tugas yang dihasilkan bervariasi berdasarkan cara Anda memformat konten cetak. Secara khusus, Anda dapat menulis setiap log tugas menggunakan salah satu opsi berikut:

Menulis log tidak terstruktur dengan mencetak string

Log tidak terstruktur memungkinkan Anda menentukan pesan, yaitu string yang muncul di kolom textPayload log.

Untuk menulis log tidak terstruktur, cetak string tidak berformat seperti yang ditunjukkan di bagian berikut.

Contoh log tidak terstruktur

Misalnya, Anda menginginkan log tugas yang berisi string berikut:

MESSAGE

Mencetak string contoh ini akan menghasilkan log tugas yang mirip dengan yang berikut ini:

insertId: ...
labels: ...
logName: projects/PROJECT_ID/logs/batch_task_logs
receiveTimestamp: ...
resource: ...
severity: INFO
textPayload: MESSAGE
timestamp: ...

Ganti kode berikut:

  • MESSAGE: pesan, yang merupakan string yang meringkas tujuan log tugas, misalnya The summary for a task log..
  • PROJECT_ID: project ID project Anda.

Anda dapat mencetak string menggunakan berbagai metode, misalnya dengan menyertakan perintah echo berikut dalam fungsi runnable:

echo MESSAGE

Untuk mengetahui contoh komprehensif tugas yang menggunakan perintah echo untuk menulis log tugas yang tidak terstruktur, lihat Membuat dan menjalankan tugas dasar.

Menulis log terstruktur dengan mencetak objek JSON

Log terstruktur memungkinkan Anda menentukan salah satu dari hal berikut:

Untuk menulis log terstruktur, cetak objek JSON. Bagian berikut menunjukkan cara menentukan log dengan beberapa kolom standar dan kolom kustom. Jika Anda ingin mempelajari cara menentukan log dengan peristiwa status kustom, lihat juga Mengonfigurasi peristiwa status kustom.

Contoh log terstruktur

Misalnya, Anda menginginkan log tugas yang berisi informasi dalam objek JSON berikut, yang mendefinisikan pesan, tingkat keparahan, dan dua kolom kustom.

{
  "message": "MESSAGE"
  "severity": "SEVERITY"
  "CUSTOM_FIELD_1": CUSTOM_VALUE_1
  "CUSTOM_FIELD_2": CUSTOM_VALUE_2
}

Mencetak objek JSON ini akan menghasilkan log tugas yang mirip dengan yang berikut ini:

insertId: ...
jsonPayload:
  "CUSTOM_FIELD_1": CUSTOM_VALUE_1
  "CUSTOM_FIELD_2": CUSTOM_VALUE_2
  message: MESSAGE
labels: ...
logName: projects/PROJECT_ID/logs/batch_task_logs
receiveTimestamp: ...
resource: ...
severity: SEVERITY
timestamp: ...

Ganti kode berikut:

  • MESSAGE: pesan, yang merupakan string yang meringkas tujuan log tugas, misalnya The summary for a task log..
  • SEVERITY: tingkat keparahan log, yang dapat Anda gunakan sebagai filter saat melihat log untuk tugas. Tingkat keparahan harus berupa salah satu dari enum LogSeverity yang dikonversi menjadi string yang hanya menggunakan huruf besar untuk huruf pertama. Misalnya, untuk enum ERROR, tentukan Error.
  • CUSTOM_FIELD_1 dan CUSTOM_FIELD_2: nama kolom kustom untuk log tugas—misalnya, custom_field_1 dan custom_field_2.
  • CUSTOM_VALUE_1 dan CUSTOM_VALUE_2: nilai kolom kustom untuk log tugas, yang dapat berupa berbagai jenis data dan mungkin memerlukan tanda kutip—misalnya, "the first custom field" dan 2.
  • PROJECT_ID: project ID project Anda.

Anda dapat mencetak contoh objek JSON ini menggunakan berbagai metode. Misalnya, contoh berikut menunjukkan beberapa kemungkinan metode untuk mencetak contoh objek JSON:

  • Cetak string yang setara menggunakan perintah echo.
  • Cetak kamus yang setara menggunakan Python.

perintah echo

Untuk mencetak contoh objek JSON menggunakan perintah echo dan string yang setara, sertakan perintah berikut di runnable:

echo '{\"message\":\"MESSAGE\", \"severity\":\"SEVERITY\", \"CUSTOM_FIELD_1\":CUSTOM_VALUE_1, \"CUSTOM_FIELD_2\":CUSTOM_VALUE_2}'

Sebagai contoh, misalkan Anda membuat dan menjalankan tugas dengan runnable berikut:

"script": {
  "text": "echo '{\"message\":\"The message for a structured log.\", \"severity\":\"Error\", \"custom_field_1\":\"the first custom field\", \"custom_field_2\":2}'"
}

Kemudian, log tugas yang dihasilkan akan mirip dengan yang berikut ini:

insertId: ...
jsonPayload:
  custom_field_1: the first custom field
  custom_field_2: 2
  message: The summary for a structured task log with error severity.
labels: ...
logName: projects/PROJECT_ID/logs/batch_task_logs
receiveTimestamp: ...
resource: ...
severity: ERROR
timestamp: ...

Python

Untuk mencetak contoh objek JSON menggunakan Python dan kamus yang setara, sertakan contoh berikut dalam file yang dapat dijalankan:

#!/usr/bin/env python3

import json

entry = dict(
    severity="SEVERITY",
    message="MESSAGE",
    CUSTOM_FIELD_1=CUSTOM_VALUE_1,
    CUSTOM_FIELD_2=CUSTOM_VALUE_2,
)
print(json.dumps(entry))

Sebagai contoh, misalkan Anda membuat dan menjalankan tugas dengan runnable berikut:

"script": {
  "text": "#!/usr/bin/env python3\n\nimport json\n\nentry = dict(\nseverity=\"Error\",\nmessage=\"The summary for a structured task log with error severity.\",\ncustom_field_1=\"the first custom field\",\ncustom_field_2=2,\n)\nprint(json.dumps(entry))"
}

Kemudian, log tugas yang dihasilkan akan mirip dengan yang berikut ini:

insertId: ...
jsonPayload:
  custom_field_1: the first custom field
  custom_field_2: 2
  message: The summary for a structured task log with error severity.
labels: ...
logName: projects/PROJECT_ID/logs/batch_task_logs
receiveTimestamp: ...
resource: ...
severity: ERROR
timestamp: ...

Langkah selanjutnya