로깅

어떤 종류의 앱을 개발할 때도 개발 중 결함을 진단하고, 고객 문제를 파악하고 진단하고, 기타 목적으로 정보를 로깅하는 경우가 많습니다.

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

  • 내장된 Apps Script 실행 로그 이 로그는 가볍고 실시간으로 스트리밍되지만 잠시만 유지됩니다.

  • 생성 후 여러 날 동안 유지되는 로그를 제공하는 개발자 콘솔의 Cloud Logging 인터페이스

  • 스크립트가 실행되는 동안 발생하는 오류를 수집하고 기록하는 개발자 콘솔의 오류 보고 인터페이스

이에 대해서는 다음 섹션에서 설명합니다. 이러한 메커니즘 외에도 로깅 스프레드시트 또는 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 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.
}

활성 사용자 키

임시 활성 사용자 키는 사용자의 신원을 노출하지 않고도 Cloud 로그 항목에서 고유한 사용자를 찾는 편리한 방법을 제공합니다. 키는 스크립트별로 있으며, 사용자가 문제를 신고하는 동안 개발자에게 신원을 공개할 경우 추가 보안을 제공하기 위해 대략 한 달에 한 번 변경됩니다.

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

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

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

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

예외 로깅

예외 로깅은 스크립트 프로젝트 코드에서 처리되지 않은 예외를 스택 트레이스와 함께 Cloud Logging으로 전송합니다.

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

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

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

예외 로깅 사용 설정

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

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

Error Reporting

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

로깅 요구사항

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

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