로깅

컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요.

모든 종류의 앱을 개발할 때 개발 중 장애 진단 및 고객 문제 식별 및 진단을 위해 또는 기타 목적으로 정보를 로깅하는 경우가 많습니다.

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

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

  • 생성 후 며칠 동안 지속되는 로그를 제공하는 개발자 콘솔의 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와 연결된 GCP 프로젝트에 연결됩니다. Apps Script 대시보드에서 이러한 로그의 간소화된 버전을 확인할 수 있습니다.

Cloud Logging 및 해당 기능을 최대한 활용하려면 스크립트 프로젝트에 표준 GCP 프로젝트를 사용합니다. 이렇게 하면 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.
}

활성 사용자 키

임시 활성 사용자 키를 사용하면 Cloud ID 항목에서 사용자의 ID를 공개하지 않고도 순 사용자를 간편하게 찾을 수 있습니다. 키는 스크립트별로 제공되며, 약 한 달에 한 번 정도 변경되므로 사용자가 문제를 신고하는 등의 과정에서 사용자에게 신원이 공개되는 경우 추가 보안이 제공됩니다.

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

  • 이미 기록 중이기 때문에 로깅에 항목을 추가할 필요가 없습니다.
  • 사용자 승인이 필요하지 않습니다.
  • 사용자의 개인 정보를 보호합니다.

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

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

예외 로깅

예외 로깅은 스크립트 프로젝트 코드의 처리되지 않은 예외를 스택 추적과 함께 Cloud Logging으로 전송합니다.

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

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

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

예외 로깅 사용 설정

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

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

Error Reporting

예외 로깅은 스크립트에서 생성된 오류를 집계하고 표시하는 서비스인 Cloud Error Reporting과 자동으로 통합됩니다. GCP Console에서 Cloud 오류 보고서를 확인할 수 있습니다. 'Error Reporting 설정' 메시지가 표시되면 스크립트에서 아직 예외를 로깅하지 않았기 때문입니다. 예외 로깅을 사용 설정하는 것 외에는 별도의 설정이 필요하지 않습니다.

로깅 요구사항

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

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