Günlük Kaydı

Herhangi bir uygulama geliştirirken genellikle geliştirme sırasındaki hataları teşhis etmek, müşteri sorunlarını tespit etmek ve teşhis etmek ve diğer amaçlar için bilgileri günlük kaydına almak istersiniz.

Apps Komut Dosyası, günlük kaydı için üç farklı mekanizma sağlar:

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

  • Geliştirici Konsolu'ndaki Cloud Logging arayüzü, oluşturulduktan sonra günler boyunca kalıcı olan günlükler sağlar.

  • Geliştirici Konsolu'ndaki Hata Bildirimi arayüzü, komut dosyanız çalışırken oluşan hataları toplayıp 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 günlük kaydetmeyle 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 çok 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] 2. satırdaki veriler john@example.com adresine e-postayla gönderiliyor
[16-09-12 13:50:42:271 PDT] 2. satır verileri: Maliyet 103,24

Cloud Logging

Apps Komut Dosyası, Google Cloud Platform (GCP) Cloud Logging hizmetine de kısmi erişim sağlar. Birkaç gün boyunca devam eden günlük kaydı veya çok kullanıcılı bir üretim ortamı için daha karmaşık bir günlük kaydı çözümüne ihtiyacınız olduğunda tercih edilen seçenek Cloud Logging'dur. 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şiminizin olması gerekir.

Cloud Logging'i kullanma

Cloud günlükleri, Apps Komut Dosyanızla ilişkili Google Cloud projesine eklenir. Bu günlüklerin basitleştirilmiş bir sürümünü Apps Script 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'dan erişebilir ve daha fazla görüntüleme ve filtreleme seçeneğinden yararlanabilirsiniz.

Günlüğe kaydederken kullanıcıyla ilgili kişisel bilgileri (ör. e-posta adresleri) 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ıyla 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ı, Cloud Günlüğü girişlerinde benzersiz kullanıcıları, kullanıcıların kimliklerini göstermeden tespit etmenin kolay bir yolunu sunar. Anahtarlar komut dosyası başınadır ve kullanıcının kimliğini bir geliştiriciye (ör. sorun bildirirken) ifşa etmesi 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ından daha üstündür çünkü:

  • Günlüğe herhangi bir şey eklemeniz gerekmez. Bunlar zaten günlüktedir.
  • Kullanıcı yetkilendirmesi gerektirmez.
  • Kullanıcı gizliliğini korur.

Cloud günlük girişlerinizde geçici olarak etkin kullanıcı anahtarlarını bulmak için Google Cloud Console'da Cloud günlüklerinizi görüntüleyin. Bunu yalnızca komut dosyası projenizde erişiminiz olan bir standart Google Cloud projesi kullanılıyorsa yapabilirsiniz. Google Cloud projesini konsolda açtıktan sonra, ilgilendiğiniz bir günlük girişini seçin ve meta veriler > etiketler > script.googleapis.com/user_key öğesini görüntülemek için girişi genişletin.

Geçici etkin kullanıcı anahtarını, komut dosyanızda Session.getTemporaryActiveUserKey() çağırarak da alabilirsiniz. Bu yöntemi kullanmanın bir yolu, komut dosyanızı çalıştıran kullanıcıya 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ı proje kodunuzdaki ele alınmayan istisnaları bir yığın izlemeyle 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. En üstte Filtre ekle > Durum'u tıklayın.
  4. Başarısız ve Zaman aşımı onay kutularını işaretleyin.

Komut dosyası projeniz, erişiminiz olan standart bir Google Cloud projesi kullanıyorsa GCP Console'da günlüklenen istisnaları da görüntüleyebilirsiniz.

İstisna günlüğünü etkinleştirme

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

  1. Komut dosyası 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ı toplayan ve görüntüleyen bir hizmet olan Cloud Error Reporting ile otomatik olarak entegre edilir. Cloud hata raporlarınızı Google Cloud Console'da görüntüleyebilirsiniz. "Hata raporlamayı ayarlayın" istemiyle karşılaşırsanız bunun nedeni komut dosyanızın henüz herhangi bir istisna kaydetmemiş olmasıdır. İstisna günlüğünü etkinleştirme dışında herhangi bir 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'dan 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ı projeniz standart bir Google Cloud projesi kullanıyorsa mümkündür.