로깅

어떤 종류의 앱을 개발할 때 개발 중 결함 진단, 고객 문제 식별 및 진단, 기타 목적으로 정보를 로깅해야 할 때가 많습니다.

Apps Script는 다음과 같은 세 가지 로깅 메커니즘을 제공합니다.

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

  • 개발자 콘솔의 Cloud Logging 인터페이스: 생성 후 며칠 동안 지속되는 로그를 제공합니다.

  • Play Console의 Error Reporting 인터페이스: 스크립트 실행 중에 발생하는 오류를 수집 및 기록합니다.

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

Apps Script 실행 로그 사용

Apps Script에서 로깅하는 기본적인 접근 방식은 기본 제공되는 실행 로그를 사용하는 것입니다. 이러한 로그를 보려면 편집기 상단에서 Execution log(실행 로그)를 클릭하세요. 함수를 실행하거나 디버거를 사용하면 로그가 실시간으로 스트리밍됩니다.

기본 제공 실행 로그에서 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 로그에 액세스할 수 있으며 더 많은 보기 및 필터링 옵션이 제공됩니다.

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

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 로그 항목에서 순 사용자를 편리하게 찾을 수 있습니다. 키는 스크립트별로 다르며 사용자가 문제를 신고할 때처럼 ID를 개발자에게 공개할 때 보안을 강화하기 위해 대략 한 달에 한 번 변경됩니다.

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

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

Cloud 로그 항목에서 임시 활성 사용자 키를 찾으려면 Google Cloud 콘솔에서 Cloud 로그를 확인하세요. 스크립트 프로젝트에서 액세스 권한이 있는 표준 Google Cloud 프로젝트를 사용하는 경우에만 이 작업을 수행할 수 있습니다. 콘솔에서 Google Cloud 프로젝트를 연 후 관심 있는 로그 항목을 선택하고 펼쳐서 메타데이터 > 라벨 > 스크립트.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 및 오류 보고를 최대한 활용하려면 스크립트의 GCP 프로젝트에 액세스할 수 있어야 합니다. 이는 스크립트 프로젝트가 표준 Google Cloud 프로젝트를 사용하는 경우에만 가능합니다.