Logowanie

Gdy tworzysz jakąkolwiek aplikację, często chcesz rejestrować informacje, aby pomóc w diagnozowaniu błędów podczas programowania, rozpoznawać i diagnozować problemy klientów oraz w innych celach.

Apps Script udostępnia 3 różne mechanizmy rejestrowania:

  • Wbudowany dziennik wykonywania Apps Script. Ten dziennik jest nieskomplikowany i umożliwia przesyłanie strumieniowo w czasie rzeczywistym, ale działa tylko przez krótki czas.

  • Interfejs Cloud Logging w Konsoli Play, w którym znajdują się dzienniki, które są przechowywane przez wiele dni po utworzeniu.

  • Interfejs raportowania błędów w Konsoli programisty, który zbiera i rejestruje błędy występujące podczas działania skryptu.

Zostało to opisane w następnych sekcjach. Oprócz tych mechanizmów możesz też utworzyć własny kod rejestratora, który będzie np. zapisywać informacje w arkuszu kalkulacyjnym lub bazie danych JDBC.

Korzystanie z dziennika wykonywania Apps Script

Podstawową metodą logowania w Apps Script jest używanie wbudowanego logu wykonania. Aby wyświetlić te logi, u góry edytora kliknij Dziennik wykonywania. Gdy uruchomisz funkcję lub użyjesz debugera, logi będą przesyłane w czasie rzeczywistym.

Możesz skorzystać z usług logowania Logger lub console we wbudowanym logu wykonywania.

Te logi są przeznaczone do prostych testów podczas tworzenia i debugowania, i nie trwały zbyt długo.

Przykład:

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

Gdy ten skrypt zostanie uruchomiony z danymi wejściowymi „2” i „jan@example.com”, zostaną zapisane następujące logi:

[16-09-12 13:50:42:193 PDT] E-mail 2 z wierszem danych do jan@example.com
[16-09-12 13:50:42:271 PDT] Dane z wiersza 2: Koszt 103.24

Cloud Logging

Skrypt Apps Script zapewnia też częściowy dostęp do usługi Cloud Logging w Google Cloud Platform (GCP). Gdy potrzebujesz logowania, które trwa kilka dni, lub chcesz przeprowadzić bardziej złożone rozwiązanie logowania w środowisku produkcyjnym dla wielu użytkowników, dobrym rozwiązaniem jest Cloud Logging. Informacje o przechowywaniu danych i inne szczegóły znajdziesz w artykule Limity i Cloud Logging.

Jeśli potrzebujesz więcej limitu logowania, możesz przesłać prośbę o zwiększenie limitu Google Cloud Platform. Musisz mieć dostęp do projektu Cloud Platform używanego przez Twój skrypt.

Korzystanie z Cloud Logging

Logi Cloud są dołączone do projektu Google Cloud powiązanego z Twoim skryptem Apps Script. Uproszczoną wersję tych logów możesz wyświetlić w panelu Apps Script.

Aby w pełni wykorzystać możliwości Cloud Logging i jej możliwości, użyj standardowego projektu Google Cloud w projekcie skryptu. Dzięki temu masz dostęp do logów Cloud bezpośrednio w konsoli GCP i masz więcej opcji wyświetlania i filtrowania.

Dobrym pomysłem jest unikanie rejestrowania jakichkolwiek danych osobowych, takich jak adresy e-mail. Logi Cloud są automatycznie oznaczane aktywnymi kluczami użytkowników, których można używać do znajdowania wiadomości logu konkretnego użytkownika.

Za pomocą funkcji dostępnych w usłudze Apps Script console możesz rejestrować ciągi znaków, formatowanie ciągów znaków, a nawet obiekty JSON.

Poniższy przykład pokazuje, jak używać usługi console do logowania informacji w 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.
}

Aktywne klucze użytkowników

Tymczasowe klucze użytkowników to wygodny sposób na identyfikowanie unikalnych użytkowników we wpisach Cloud Logging bez ujawniania tożsamości tych użytkowników. Klucze są oparte na skryptach i zmieniają się mniej więcej raz w miesiącu, aby zapewnić dodatkową ochronę, gdy użytkownik ujawni swoją tożsamość deweloperowi, na przykład podczas zgłaszania problemu.

Tymczasowe klucze użytkowników są lepsze niż identyfikatory logowania, takie jak adresy e-mail, ponieważ:

  • Nie musisz niczego dodawać do dziennika – są już dostępne.
  • Nie wymagają autoryzacji użytkownika.
  • Chronią prywatność użytkowników.

Aby znaleźć tymczasowe aktywne klucze użytkowników we wpisach Cloud Logging, wyświetl logi Cloud w konsoli Google Cloud. Możesz to zrobić tylko wtedy, gdy Twój projekt skryptu korzysta ze standardowego projektu Google Cloud, do którego masz dostęp. Po otwarciu projektu Google Cloud w konsoli wybierz interesujący Cię wpis logu i rozwiń go, aby wyświetlić metadane > etykiety > script.googleapis.com/user_key.

Możesz też uzyskać tymczasowy aktywny klucz użytkownika, wywołując skrypt w skrypcie Session.getTemporaryActiveUserKey(). Jednym ze sposobów użycia tej metody jest wyświetlanie klucza użytkownikowi podczas uruchamiania skryptu. Następnie użytkownicy mogą dołączać klucze podczas zgłaszania problemów, aby ułatwić znalezienie odpowiednich logów.

Rejestrowanie wyjątków

Logowanie wyjątków wysyła nieobsługiwane wyjątki w kodzie projektu skryptu do Cloud Logging wraz ze śledzeniem stosu.

Aby wyświetlić logi wyjątków, wykonaj te czynności:

  1. Otwórz projekt Apps Script.
  2. Po lewej stronie kliknij Wykonanie .
  3. U góry kliknij Dodaj filtr > Stan.
  4. Zaznacz pola wyboru Niepowodzenie i Upłynął limit czasu.

Możesz też wyświetlić zarejestrowane wyjątki w konsoli GCP, jeśli Twój projekt skryptu korzysta ze standardowego projektu Google Cloud, do którego masz dostęp.

Włącz logowanie wyjątków

W nowych projektach logowanie wyjątków jest domyślnie włączone. Aby włączyć logowanie wyjątków dla starszych projektów, wykonaj te czynności:

  1. Otwórz projekt skryptu.
  2. Po lewej stronie kliknij Ustawienia projektu .
  3. Zaznacz pole wyboru Log niewykrytych wyjątków w Cloud Operations.

Raportowanie błędów

Logowanie wyjątków jest automatycznie integrowane z usługą Cloud Error Reporting, która gromadzi i wyświetla błędy wygenerowane w Twoim skrypcie. Raporty o błędach Cloud możesz wyświetlić w konsoli Google Cloud. Jeśli pojawi się prośba o skonfigurowanie raportowania błędów, oznacza to, że skrypt nie zarejestrował jeszcze żadnych wyjątków. Nie musisz nic konfigurować oprócz włączenia logowania wyjątków.

Wymagania dotyczące logowania

Korzystanie z wbudowanego dziennika wykonywania nie jest wymagane.

Uproszczoną wersję logów Cloud możesz wyświetlić w panelu Apps Script. Aby jednak w pełni wykorzystać funkcje Cloud Logging i raportowania błędów, musisz mieć dostęp do projektu GCP skryptu. Jest to możliwe tylko wtedy, gdy Twój projekt skryptu korzysta ze standardowego projektu Google Cloud.