Logowanie

Gdy tworzysz jakąkolwiek aplikację, często chcesz zapisywać informacje, które ułatwią diagnozowanie błędów w trakcie programowania, rozpoznanie i diagnozowanie problemów u klienta, a także do innych celów.

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

  • wbudowanego dziennika wykonywania Apps Script, Dziennik ten jest nieduży i przesyła dane strumieniowo w czasie rzeczywistym, ale pozostaje tylko przez krótki czas.

  • Interfejs Cloud Logging w konsoli programisty oferujący logi, które są przechowywane przez wiele dni po utworzeniu.

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

Zostały one opisane w dalszej części tego artykułu. Oprócz tych mechanizmów możesz też utworzyć własny kod rejestratora, który np. zapisuje informacje w arkuszu kalkulacyjnym lub bazie danych JDBC logowania.

Używanie dziennika wykonywania Apps Script

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

We wbudowanym logu wykonywania możesz użyć usług logowania Logger lub console.

Te logi są przeznaczone do prostych kontroli podczas programowania i debugowania i nie są przechowywane zbyt długo.

Na przykład użyj tej funkcji:

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

Po uruchomieniu tego skryptu z danymi wejściowymi „2” i „jan@example.com” zapisywane są następujące logi:

[16-09-12 13:50:42:193 PDT] Wysyłanie wiersza 2 danych na adres jan@example.com
[16-09-12 13:50:42:271 PDT] Row 2 data: Cost 103.24

Cloud Logging

Apps Script zapewnia też częściowy dostęp do usługi Cloud Logging w Google Cloud Platform (GCP). W przypadku wymagających logowania, które utrzymują się przez kilka dni, lub bardziej złożonego rozwiązania do logowania w środowisku produkcyjnym z wieloma użytkownikami, preferowanym rozwiązaniem jest Cloud Logging. Przechowywanie danych i inne informacje znajdziesz w artykule Limity i ograniczenia Cloud Logging.

Jeśli potrzebujesz większego limitu logowania, możesz przesłać prośbę o zwiększenie limitu w Google Cloud Platform. Wymaga to dostępu do projektu Cloud Platform, którego używa Twój skrypt.

Korzystanie z Cloud Logging

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

Aby w pełni wykorzystać możliwości usługi Cloud Logging i jej możliwości, użyj standardowego projektu Google Cloud ze swoim projektem skryptu. Dzięki temu będziesz mieć dostęp do logów Cloud bezpośrednio w konsoli GCP oraz zyskaj więcej opcji wyświetlania i filtrowania.

Podczas logowania zgodnie z zasadami ochrony prywatności należy unikać rejestrowania jakichkolwiek danych osobowych użytkownika, takich jak adresy e-mail. Logi Cloud są automatycznie oznaczone aktywnymi kluczami użytkownika, dzięki którym w razie potrzeby możesz zlokalizować komunikaty logów konkretnego użytkownika.

Za pomocą funkcji dostępnych w usłudze Apps Script console możesz rejestrować ciągi tekstowe, sformatowane ciągi 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 aktywne klucze użytkowników to wygodny sposób na wykrywanie unikalnych użytkowników we wpisach Cloud Log bez ujawniania ich tożsamości. Klucze są przydzielane poszczególnym skryptom i zmieniają się mniej więcej raz w miesiącu, aby zapewnić dodatkowe bezpieczeństwo na wypadek, gdyby użytkownik ujawnił swoją tożsamość deweloperowi, na przykład podczas zgłaszania problemu.

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

  • Nie musisz niczego dodawać do zapisów – są już dostępne!
  • Nie wymagają autoryzacji użytkownika.
  • Zapewniają ochronę prywatności użytkownika.

Aby znaleźć tymczasowe aktywne klucze użytkowników we wpisach Cloud Log, 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.

Tymczasowy klucz aktywnego użytkownika możesz też uzyskać, wywołując w skrypcie metodę Session.getTemporaryActiveUserKey(). Jednym ze sposobów korzystania z tej metody jest wyświetlanie klucza użytkownikowi, gdy wykonuje on skrypt. Użytkownicy mogą wtedy uwzględnić swoje klucze podczas zgłaszania problemów, co pomaga identyfikować odpowiednie dzienniki.

Logowanie wyjątków

Logowanie wyjątków wysyła nieobsłużone wyjątki w kodzie projektu skryptu do Cloud Logging razem ze zrzutem stosu.

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

  1. Otwórz projekt Apps Script.
  2. Po lewej stronie kliknij Uruchomienia .
  3. U góry kliknij Dodaj filtr > Stan.
  4. Zaznacz pola wyboru Niepowodzenie i Przekroczono 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

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

  1. Otwórz projekt skryptu.
  2. Po lewej stronie kliknij Ustawienia projektu .
  3. Zaznacz pole wyboru Włącz nieobsłużone wyjątki od Cloud Operations.

Raportowanie błędów

Logowanie wyjątków automatycznie integruje się z Cloud Error Reporting – usługą, która gromadzi i wyświetla błędy wygenerowane w skrypcie. Możesz wyświetlić raporty o błędach Cloud w konsoli Google Cloud. Jeśli pojawi się prośba o „skonfigurowanie usługi Error Reporting”, oznacza to, że w skrypcie nie zostały jeszcze zarejestrowane żadne wyjątki. Nie musisz niczego konfigurować poza włączaniem logowania wyjątków.

Wymagania dotyczące logowania

Nie ma wymagań, aby korzystać z wbudowanego dziennika wykonywania.

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