Logging

Saat mengembangkan aplikasi apa pun, Anda sering kali ingin mencatat informasi untuk membantu mendiagnosis kerusakan selama pengembangan, mengidentifikasi dan mendiagnosis masalah pelanggan, serta untuk tujuan lainnya.

Apps Script menyediakan tiga mekanisme yang berbeda untuk logging:

  • Log eksekusi Apps Script bawaan. Log ini ringan dan di-streaming secara real time, tetapi hanya bertahan selama waktu yang singkat.

  • Antarmuka Cloud Logging di Developer Console, yang menyediakan log yang bertahan selama beberapa hari setelah pembuatannya.

  • Antarmuka Error Reporting di Konsol Developer, yang mengumpulkan dan mencatat error yang terjadi saat skrip Anda berjalan.

Hal ini dijelaskan di bagian berikut. Selain mekanisme ini, Anda juga dapat mem-build kode logger sendiri yang, misalnya, menulis informasi ke Spreadsheet logging atau database JDBC.

Menggunakan log eksekusi Apps Script

Pendekatan dasar untuk melakukan logging di Apps Script adalah menggunakan log eksekusi bawaan. Untuk melihat log ini, klik Execution log di bagian atas editor. Saat Anda menjalankan fungsi atau menggunakan debugger, log akan di-streaming secara real time.

Anda dapat menggunakan layanan logging Logger atau console di log eksekusi bawaan.

Log ini ditujukan untuk pemeriksaan sederhana selama pengembangan dan proses debug, dan tidak bertahan terlalu lama.

Misalnya, perhatikan fungsi ini:

utils/logging.gs
/**
 * Logs Google Sheet information.
 * @param {number} rowNumber The spreadsheet row number.
 * @param {string} email The email to send with the row data.
 */
function emailDataRow(rowNumber, email) {
  console.log('Emailing data row ' + rowNumber + ' to ' + email);
  try {
    const sheet = SpreadsheetApp.getActiveSheet();
    const data = sheet.getDataRange().getValues();
    const rowData = data[rowNumber - 1].join(' ');
    console.log('Row ' + rowNumber + ' data: ' + rowData);
    MailApp.sendEmail(email, 'Data in row ' + rowNumber, rowData);
  } catch (err) {
    // TODO (developer) - Handle exception
    console.log('Failed with error %s', err.message);
  }
}

Saat skrip ini dijalankan dengan input "2" dan "john@example.com", log berikut akan ditulis:

[16-09-12 13:50:42:193 PDT] Mengirim email baris data 2 ke john@example.com
[16-09-12 13:50:42:271 PDT] Data baris 2: Biaya 103,24

Cloud Logging

Apps Script juga menyediakan akses sebagian ke layanan Cloud Logging Google Cloud Platform (GCP). Jika Anda memerlukan logging yang bertahan selama beberapa hari, atau memerlukan solusi logging yang lebih kompleks untuk lingkungan produksi multi-pengguna, Cloud Logging adalah pilihan yang lebih disukai. Lihat Kuota dan batas Cloud Logging untuk retensi data dan detail kuota lainnya.

Jika memerlukan kuota logging lebih banyak, Anda dapat mengirimkan permintaan kuota Google Cloud Platform. Untuk melakukannya, Anda harus memiliki akses ke project Cloud Platform yang digunakan skrip Anda.

Menggunakan Cloud Logging

Log cloud dilampirkan ke project Google Cloud yang terkait dengan Apps Script Anda. Anda dapat melihat versi sederhana log ini di dasbor Apps Script.

Untuk memanfaatkan Cloud Logging dan kemampuannya secara maksimal, gunakan project Google Cloud standar dengan project skrip Anda. Tindakan ini memungkinkan Anda mengakses log Cloud langsung di GCP Console dan memberi Anda lebih banyak opsi tampilan dan pemfilteran.

Saat melakukan login, sebaiknya hindari merekam informasi pribadi apa pun tentang pengguna, seperti alamat email. Log cloud secara otomatis diberi label dengan kunci pengguna aktif yang dapat Anda gunakan untuk menemukan pesan log pengguna tertentu jika diperlukan.

Anda dapat mencatat string, string berformat, dan bahkan objek JSON menggunakan fungsi yang disediakan oleh layanan console Apps Script.

Contoh berikut menunjukkan cara menggunakan layanan console untuk mencatat informasi di Cloud Operations.

utils/logging.gs
/**
 * Logs the time taken to execute 'myFunction'.
 */
function measuringExecutionTime() {
  // A simple INFO log message, using sprintf() formatting.
  console.info('Timing the %s function (%d arguments)', 'myFunction', 1);

  // Log a JSON object at a DEBUG level. The log is labeled
  // with the message string in the log viewer, and the JSON content
  // is displayed in the expanded log structure under "jsonPayload".
  const parameters = {
    isValid: true,
    content: 'some string',
    timestamp: new Date()
  };
  console.log({message: 'Function Input', initialData: parameters});
  const label = 'myFunction() time'; // Labels the timing log entry.
  console.time(label); // Starts the timer.
  try {
    myFunction(parameters); // Function to time.
  } catch (e) {
    // Logs an ERROR message.
    console.error('myFunction() yielded an error: ' + e);
  }
  console.timeEnd(label); // Stops the timer, logs execution duration.
}

Kunci pengguna aktif

Kunci pengguna aktif sementara memberikan cara yang mudah untuk menemukan pengguna unik dalam entri Cloud Log tanpa mengungkapkan identitas pengguna tersebut. Kunci berlaku per skrip dan berubah kira-kira sebulan sekali untuk memberikan keamanan tambahan jika pengguna mengungkapkan identitasnya kepada developer, misalnya saat melaporkan masalah.

Kunci pengguna aktif sementara lebih unggul daripada ID logging seperti alamat email karena:

  • Anda tidak perlu menambahkan apa pun ke logging; semuanya sudah ada.
  • Aplikasi ini tidak memerlukan otorisasi pengguna.
  • Kebijakan ini melindungi privasi pengguna.

Untuk menemukan kunci pengguna aktif sementara di entri Cloud Log, lihat log Cloud di konsol Google Cloud. Anda dapat melakukannya hanya jika project skrip menggunakan project Google Cloud standar yang dapat Anda akses. Setelah membuka project Google Cloud di konsol, pilih entri log yang diinginkan, lalu luaskan untuk melihat metadata > label > script.googleapis.com/user_key.

Anda juga bisa mendapatkan kunci pengguna aktif sementara dengan memanggil Session.getTemporaryActiveUserKey() dalam skrip Anda. Salah satu cara untuk menggunakan metode ini adalah dengan menampilkan kunci kepada pengguna saat mereka menjalankan skrip Anda. Kemudian, pengguna dapat memilih untuk menyertakan kunci mereka saat melaporkan masalah untuk membantu Anda mengidentifikasi log yang relevan.

Logging pengecualian

Logging pengecualian mengirim pengecualian yang tidak ditangani dalam kode project skrip Anda ke Cloud Logging, beserta stack trace.

Untuk melihat log pengecualian, ikuti langkah-langkah di bawah:

  1. Buka project Apps Script.
  2. Di sebelah kiri, klik Eksekusi .
  3. Di bagian atas, klik Tambahkan filter > Status.
  4. Centang kotak Gagal dan Waktu habis.

Anda juga dapat melihat pengecualian yang dicatat dalam log di konsol GCP jika project skrip Anda menggunakan project Google Cloud standar yang aksesnya Anda miliki.

Mengaktifkan logging pengecualian

Logging pengecualian diaktifkan secara default untuk project baru. Untuk mengaktifkan logging pengecualian untuk project lama, ikuti langkah-langkah di bawah ini:

  1. Buka project skrip.
  2. Di sebelah kiri, klik Project Settings .
  3. Pilih kotak centang Log uncaught exceptions to Cloud Operations.

Error Reporting

Logging pengecualian secara otomatis terintegrasi dengan Cloud Error Reporting, layanan yang menggabungkan dan menampilkan error yang dihasilkan dalam skrip Anda. Anda dapat melihat laporan error Cloud di konsol Google Cloud. Jika Anda diminta untuk "Menyiapkan Pelaporan Error", hal ini karena skrip Anda belum mencatat pengecualian apa pun. Tidak diperlukan penyiapan selain mengaktifkan logging pengecualian.

Persyaratan logging

Tidak ada persyaratan untuk menggunakan log eksekusi bawaan.

Anda dapat melihat versi sederhana log Cloud di dasbor Apps Script. Namun, untuk memaksimalkan Cloud Logging dan pelaporan error, Anda harus memiliki akses ke project GCP skrip. Hal ini hanya dapat dilakukan jika project skrip Anda menggunakan project Google Cloud standar.