로깅

모든 종류의 앱을 개발할 때 개발 중 결함을 진단하고 고객 문제를 식별 및 진단하는 데 도움이 되는 기타 목적으로 정보를 로깅해야 하는 경우가 많습니다.

Apps Script는 로깅을 위한 세 가지 메커니즘을 제공합니다.

  • 기본 제공되는 Apps Script 실행 로그입니다. 이 로그는 가볍고 실시간으로 스트리밍되지만 짧은 시간 동안만 지속됩니다.

  • Developer Console의 Cloud Logging 인터페이스: 생성된 후 며칠 동안 지속되는 로그를 제공합니다.

  • Error Reporting 인터페이스: 스크립트가 실행되는 동안 발생하는 오류를 수집하고 기록합니다.

다음 섹션에서 설명합니다. 이러한 메커니즘 외에도 로깅 스프레드시트 또는 JDBC 데이터베이스에 정보를 쓰는 자체 로거 코드를 빌드할 수도 있습니다.

Apps Script 실행 로그 사용

Apps Script에 로깅하는 기본적인 방법은 내장된 실행 로그를 사용하는 것입니다. 이러한 로그를 보려면 편집기 상단에서 실행 로그를 클릭합니다. 함수를 실행하거나 디버거를 사용하면 실시간으로 로그 스트림이 시작됩니다.

내장된 실행 로그에서 Logger 또는 console 로깅 서비스를 사용할 수 있습니다.

이러한 로그는 개발 및 디버깅 중에 간단한 검사를 위해 사용되며 아주 오래 유지되지 않습니다.

예를 들어 다음 함수를 살펴보겠습니다.

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

이 스크립트가 '2' 및 'john@example.com' 입력으로 실행되면 다음 로그가 작성됩니다.

[16-09-12 13:50:42:193 PDT] 데이터 행 2를 john@example.com으로 이메일 전송
[16-09-12 13:50:42:271 PDT] 행 2 데이터: 비용 103.24

Cloud Logging

Apps Script는 Google Cloud Platform (GCP) Cloud Logging 서비스에 대한 부분 액세스도 제공합니다. 며칠 동안 지속되는 로깅이 필요하거나 멀티 사용자 프로덕션 환경을 위해 보다 복잡한 로깅 솔루션이 필요한 경우 Cloud Logging을 사용하는 것이 좋습니다. 데이터 보관 및 기타 할당량 세부정보는 Cloud Logging 할당량 및 한도를 참조하세요.

로깅 할당량이 더 필요한 경우 Google Cloud Platform 할당량 요청을 제출하세요. 이렇게 하려면 스크립트에서 사용하는 Cloud Platform 프로젝트에 대한 액세스 권한이 있어야 합니다.

Cloud Logging 사용

Cloud 로그는 Apps Script와 연결된 Google Cloud 프로젝트에 연결됩니다. Apps Script 대시보드에서 이러한 로그의 간소화된 버전을 확인할 수 있습니다.

Cloud Logging 및 해당 기능을 최대한 활용하려면 스크립트 프로젝트와 함께 표준 Google Cloud 프로젝트를 사용합니다. 이렇게 하면 GCP Console에서 직접 Cloud 로그에 액세스할 수 있고 더 많은 보기 및 필터링 옵션이 제공됩니다.

로깅할 때는 이메일 주소와 같은 사용자의 개인 정보를 기록하지 않는 것이 좋습니다. Cloud 로그에는 필요할 때 특정 사용자의 로그 메시지를 찾는 데 사용할 수 있는 활성 사용자 키가 자동으로 라벨로 지정됩니다.

Apps Script console 서비스에서 제공하는 함수를 사용하여 문자열, 형식이 지정된 문자열, JSON 객체도 로깅할 수 있습니다.

다음 예시에서는 console 서비스를 사용하여 Cloud 운영에 정보를 로깅하는 방법을 보여줍니다.

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

활성 사용자 키

임시 활성 사용자 키를 사용하면 사용자의 ID를 노출하지 않고도 Cloud 로그 항목에서 순 사용자를 편리하게 찾을 수 있습니다. 키는 스크립트별로 제공되며 한 달에 한 번 정도 변경되어 사용자가 문제를 신고하는 경우와 같이 사용자가 개발자에게 신원을 공개하는 경우 추가 보안을 제공합니다.

임시 활성 사용자 키가 이메일 주소와 같은 로깅 식별자보다 우수한 이유는 다음과 같습니다.

  • 로깅에 아무것도 추가할 필요가 없습니다. 모두 이미 있기 때문입니다.
  • 사용자 승인이 필요하지 않습니다.
  • 사용자 개인 정보를 보호합니다.

Cloud 로그 항목에서 임시 활성 사용자 키를 찾으려면 Google Cloud 콘솔에서 Cloud 로그를 확인하세요. 스크립트 프로젝트가 액세스 권한이 있는 표준 Google Cloud 프로젝트를 사용하는 경우에만 이 작업을 수행할 수 있습니다. 콘솔에서 Google Cloud 프로젝트를 연 후 관심 있는 로그 항목을 선택하고 펼쳐서 메타데이터 > 라벨 >script.googleapis.com/user_key를 확인합니다.

스크립트에서 Session.getTemporaryActiveUserKey()를 호출하여 임시 활성 사용자 키를 가져올 수도 있습니다. 이 방법을 사용하는 한 가지 방법은 사용자가 스크립트를 실행하는 동안 사용자에게 키를 표시하는 것입니다. 그러면 사용자가 문제를 신고할 때 자신의 키를 포함하여 관련 로그를 식별하는 데 도움이 되도록 선택할 수 있습니다.

예외 로깅

예외 로깅은 스크립트 프로젝트 코드의 처리되지 않은 예외를 스택 트레이스와 함께 Cloud Logging으로 보냅니다.

예외 로그를 보려면 다음 단계를 따르세요.

  1. Apps Script 프로젝트를 엽니다.
  2. 왼쪽에서 실행 을 클릭합니다.
  3. 상단에서 필터 추가 > 상태를 클릭합니다.
  4. 실패타임아웃 체크박스를 선택합니다.

스크립트 프로젝트가 액세스 권한이 있는 표준 Google Cloud 프로젝트를 사용하는 경우 GCP Console에서 로깅된 예외를 확인할 수도 있습니다.

예외 로깅 사용 설정

새 프로젝트에는 예외 로깅이 기본적으로 사용 설정됩니다. 이전 프로젝트에 예외 로깅을 사용 설정하려면 다음 단계를 따르세요.

  1. 스크립트 프로젝트를 엽니다.
  2. 왼쪽에서 프로젝트 설정 을 클릭합니다.
  3. Cloud 운영에 포착되지 않은 예외 로깅 체크박스를 선택합니다.

Error Reporting

예외 로깅은 스크립트에서 발생한 오류를 집계하고 표시하는 서비스인 Cloud Error Reporting과 자동으로 통합됩니다. Google Cloud 콘솔에서 Cloud 오류 보고서를 확인할 수 있습니다. 'Error Reporting 설정' 메시지가 표시되는 경우 스크립트가 아직 예외를 로깅하지 않았기 때문입니다. 예외 로깅 사용 설정 외에는 다른 설정이 필요하지 않습니다.

로깅 요구사항

기본 제공 실행 로그를 사용하기 위한 요구사항은 없습니다.

Apps Script 대시보드에서 간소화된 버전의 Cloud 로그를 볼 수 있습니다. 하지만 Cloud Logging 및 Error Reporting을 최대한 활용하려면 스크립트의 GCP 프로젝트에 액세스할 수 있어야 합니다. 이는 스크립트 프로젝트가 표준 Google Cloud 프로젝트를 사용하는 경우에만 가능합니다.