Günlük kaydı

Herhangi bir uygulama geliştirirken genellikle geliştirme sırasında hataları teşhis etmeye, müşteri sorunlarını belirleyip teşhis etmeye ve diğer amaçlara yardımcı olması için bilgileri günlüğe kaydetmek istersiniz.

Apps Komut Dosyası, üç farklı günlük kaydı mekanizması sunar:

  • Yerleşik Apps Komut Dosyası yürütme günlüğü Bu günlük hafiftir ve gerçek zamanlı olarak yayınlanır ancak yalnızca kısa bir süre boyunca saklanır.

  • Geliştirici Konsolu'ndaki Cloud Logging arayüzü. Bu arayüz, oluşturulduktan sonra uzun süre saklanan günlükler sağlar.

  • Geliştirici Konsolu'ndaki Error Reporting arayüzü, komut dosyanız çalışırken oluşan hataları toplar ve kaydeder.

Bunlar aşağıdaki bölümlerde açıklanmıştır. Bu mekanizmalara ek olarak, örneğin bilgileri bir günlük kaydı e-tablosuna veya JDBC veritabanına yazan kendi günlük kaydı kodunuzu da oluşturabilirsiniz.

Apps Komut Dosyası yürütme günlüğünü kullanma

Apps Komut Dosyası'nda oturum açmayla ilgili temel yaklaşım, yerleşik yürütme günlüğünü kullanmaktır. Bu günlükleri görüntülemek için düzenleyicinin üst kısmındaki Yürütme günlüğü'nü tıklayın. Bir işlevi çalıştırdığınızda veya hata ayıklayıcıyı kullandığınızda günlükler gerçek zamanlı olarak yayınlanır.

Yerleşik yürütme günlüğünde Logger veya console günlük hizmetlerini kullanabilirsiniz.

Bu günlükler, geliştirme ve hata ayıklama sırasında basit kontroller için tasarlanmıştır ve uzun süre saklanmaz.

Örneğin, şu işlevi ele alalım:

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);
  }
}

Bu komut dosyası "2" ve "john@example.com" girişleriyle çalıştırıldığında aşağıdaki günlükler yazılır:

[16-09-12 13:50:42:193 PDT] Veri satırı 2, john@example.com adresine e-postayla gönderiliyor
[16-09-12 13:50:42:271 PDT] Satır 2 verileri: Maliyet 103,24

Cloud Logging

Apps Komut Dosyası, Google Cloud Platform (GCP) Cloud Logging hizmetine de kısmi erişim sağlar. Günlerce devam eden bir günlük kaydı gerektirdiğinizde veya çok kullanıcılı bir üretim ortamı için daha karmaşık bir günlük kaydı çözümü istediğinizde Cloud Logging tercih edilen seçenektir. Veri saklama ve diğer kota ayrıntıları için Cloud Logging kotaları ve sınırları başlıklı makaleyi inceleyin.

Daha fazla günlük kaydı kotasına ihtiyacınız varsa Google Cloud Platform kota isteği gönderebilirsiniz. Bunun için komut dosyanızın kullandığı Cloud Platform projesine erişiminiz olmalıdır.

Cloud Logging'i kullanma

Cloud günlükleri, Apps Komut Dosyası'nızla ilişkili Google Cloud projesine eklenir. Bu günlüklerin basitleştirilmiş bir sürümünü Apps Komut Dosyası kontrol panelinde görüntüleyebilirsiniz.

Cloud Logging'den ve özelliklerinden tam olarak yararlanmak için komut dosyası projenizle birlikte standart bir Google Cloud projesi kullanın. Bu sayede, Cloud günlüklerine doğrudan GCP Console'da erişebilir, daha fazla görüntüleme ve filtreleme seçeneğinden yararlanabilirsiniz.

Günlüğe kaydederken, kullanıcının e-posta adresi gibi kişisel bilgilerini kaydetmemek iyi bir gizlilik uygulamasıdır. Cloud günlükleri, gerektiğinde belirli bir kullanıcının günlük mesajlarını bulmak için kullanabileceğiniz etkin kullanıcı anahtarları ile otomatik olarak etiketlenir.

Apps Komut Dosyası console hizmeti tarafından sağlanan işlevleri kullanarak dizeleri, biçimlendirilmiş dizeleri ve hatta JSON nesnelerini günlüğe kaydedebilirsiniz.

Aşağıdaki örnekte, Cloud Operations'ta bilgi günlüğe kaydetmek için console hizmetinin nasıl kullanılacağı gösterilmektedir.

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.
}

Etkin kullanıcı anahtarları

Geçici etkin kullanıcı anahtarları, bu kullanıcıların kimliklerini açığa çıkarmadan Cloud Log girişlerindeki benzersiz kullanıcıları tespit etmenin kolay bir yolunu sunar. Anahtarlar senaryo başına verilir ve kullanıcının kimliğini bir geliştiriciye açıklaması (ör. bir sorunu bildirirken) durumunda ek güvenlik sağlamak için yaklaşık ayda bir kez değiştirilir.

Geçici etkin kullanıcı anahtarları, e-posta adresleri gibi günlük kaydı tanımlayıcılarına göre daha iyidir. Bunun nedeni:

  • Günlüğünüze herhangi bir şey eklemeniz gerekmez. Bu bilgiler zaten mevcuttur.
  • Kullanıcı yetkilendirmesi gerektirmezler.
  • Kullanıcı gizliliğini korur.

Cloud günlük girişlerinizdeki geçici etkin kullanıcı anahtarlarını bulmak için Cloud günlüklerinizi Google Cloud Console'da görüntüleyin. Bu işlemi yalnızca komut dosyası projeniz, erişiminizin olduğu bir standart Google Cloud projesi kullanıyorsa yapabilirsiniz. Google Cloud projesini konsolda açtıktan sonra, ilgilendiğiniz bir günlük girişini seçin ve metadata > labels > script.googleapis.com/user_key'yi görüntülemek için genişletin.

Ayrıca, komut dosyanızda Session.getTemporaryActiveUserKey() çağrısı yaparak geçici etkin kullanıcı anahtarını da alabilirsiniz. Bu yöntemi kullanmanın bir yolu, kullanıcı komut dosyanızı çalıştırırken anahtarı göstermektir. Ardından, kullanıcılar ilgili günlükleri belirlemenize yardımcı olmak için sorunları bildirirken anahtarlarını eklemeyi seçebilir.

İstisna günlüğü

İstisna günlüğü, komut dosyası projesi kodunuzdaki işlenmemiş istisnaları yığın iziyle birlikte Cloud Logging'e gönderir.

İstisna günlüklerini görüntülemek için aşağıdaki adımları uygulayın:

  1. Apps Komut Dosyası projesini açın.
  2. Sol tarafta Yürütmeler'i tıklayın.
  3. Üst kısımdan Filtre ekle > Durum'u tıklayın.
  4. Başarısız ve Zaman aşımına uğradı onay kutularını seçin.

Komut dosyası projeniz, erişiminizin olduğu bir standart Google Cloud projesi kullanıyorsa GCP Console'da günlüğe kaydedilen istisnaları da görüntüleyebilirsiniz.

İstisna günlük kaydını etkinleştirme

İstisna günlüğe kaydetme özelliği, yeni projelerde varsayılan olarak etkindir. Daha eski projelerde istisna günlüğünü etkinleştirmek için aşağıdaki adımları uygulayın:

  1. Senaryo projesini açın.
  2. Sol tarafta Proje Ayarları'nı tıklayın.
  3. Yakalanmayan istisnaları Cloud Operations'a kaydet onay kutusunu işaretleyin.

Error Reporting

İstisna günlüğü, komut dosyanızda oluşan hataları toplayıp görüntüleyen bir hizmet olan Cloud Error Reporting ile otomatik olarak entegre olur. Cloud hata raporlarınızı Google Cloud Console'da görüntüleyebilirsiniz. "Hata raporlamayı ayarlayın" istemi alıyorsanız bunun nedeni, komut dosyanızın henüz herhangi bir istisna kaydetmemiş olmasıdır. İstisna günlüğünü etkinleştirmenin dışında kurulum gerekmez.

Günlük kaydı koşulları

Yerleşik yürütme günlüğünü kullanmak için herhangi bir koşul yoktur.

Cloud günlüklerinin basitleştirilmiş bir sürümünü Apps Komut Dosyası kontrol panelinde görüntüleyebilirsiniz. Ancak Cloud Logging ve hata raporlamadan en iyi şekilde yararlanmak için komut dosyasının GCP projesine erişiminiz olmalıdır. Bu işlem yalnızca komut dosyası projenizde standart bir Google Cloud projesi kullanılıyorsa mümkündür.