Google Apps Script 로그 디자인 #gasja

2017-12-30
새롭게 기사를 썼습니다, 이쪽이 추천입니다.
GAS와 Stackdriver(Logging, Error Reporting)를 연동시킨다 - Qiita

최근 Google Apps Script (이후 GAS라고 함)를 시작했습니다. @howdy39
GAS를 사용하기 시작해 우선 생각한 것은 로그 출력(디버그)이 괴롭다는 것입니다.
이 매운 로그 출력을 어떻게든 하려고 하는 것이 이 기사의 내용입니다.

Logger.log()



GAS의 로그 출력은 Logger.log()이 기본이 될 것이라고 생각합니다만,
1. 처리 실행
2. 스크립트 편집기를 열고 보기->로그(Command + Enter)
너무 귀찮아서 힘들다.

Browser.msgBox()



Browser.msgBox() 을 사용하면 런타임에 즉시 확인할 수 있지만 닫는 것도 번거롭습니다.
원래 화면이 없는 GAS라고 무리.

결과



그래서 간단한 로그 설계를 해 보았습니다.

로그 설계



개발 시 필요한 로그는 Google 문서에 기록



스크립트 편집기를 열고 보기 -> 로그를 피하고 싶으므로 Google 문서도구에 씁니다.
이렇게 하면 브라우저를 옆에서 확인할 수 있습니다.
또, 추기라면 최신의 로그가 아래에 가 버리므로, 매회 클리어.

처리 결과를 이메일로 보내기



개발시는 Google 문서로 상관없지만, 운용시에 일일이 그런 것 볼 수 없다.
정상 종료와 이상 종료는 메일로 로그를 보내도록 합니다.

코드



그리고, 써본 코드가 이쪽.

행수도 큰 일도 없고, 특히 어려운 일은 하고 있지 않기 때문에 해설은 하지 않습니다.
필자는 신경 쓰지 않기 때문에 정상 종료 메일에도 로그를 그대로 써 버리고 있습니다만, 그 엔은 적절히 재기록해 주세요.

코드.gs
var DEV_MODE = true;
var LOG_FILE_ID = '1UkulvHUunDzUzpVUmYmemYkG4YfZtIfr9vMOMIKzBS4'; // 事前にGoogleドキュメントファイルを作ってファイルIDを記載
var RECIPIENT = '[email protected]';

function myFunction() {
  try {
    // ログをクリア
    if (DEV_MODE) getLogFile().getBody().clear();

    Logger.log('hoge');
    Logger.log('%s : %s', 'key', 'value');
    ここでエラーが発生

    // 正常終了メールを送信する
    sendNotificationMail('[XXXシステム]正常終了');

  } catch (e) {
    Logger.log('\n' + JSON.stringify(e, null, '  '));

    // 異常終了メールを送信する
    sendNotificationMail('[XXXシステム]異常終了');

  } finally {
    // ログを書き込む
    if (DEV_MODE) getLogFile().getBody().appendParagraph(Logger.getLog());
  }
}

function getLogFile() {
  if (this.logFile === undefined) {
    this.logFile = DocumentApp.openById(this.LOG_FILE_ID);
  }
  return this.logFile;
}

function sendNotificationMail(title) {
  MailApp.sendEmail(RECIPIENT, title, Logger.getLog());
}

개발 풍경



이런 느낌이 된다.
[Command+R]에서 myFunction을 실행하면 오른쪽 문서의 로그가 업데이트됩니다.
오류의 위치도 알고 매우 편안합니다.



메일 화면





슬랙으로 날아가다



메일? 시대는 Slack이라면 사람은 myThing이나 Zapier 따위와 연동시켜 이상 종료 메일만 Slack에 보낸다든지 해 두면 좋을 것 같다.
물론 GAS에서 직접 Slack에 출력해도 좋을 것입니다.


기타



Stackdriver Logging 을 사용하면 Stackdriver에 로그 레벨을 설정하여 로그를 출력할 수 있으므로 이쪽을 사용하는 것도 있다고 생각한다.

2017-12-30
그 기사를 썼습니다.
GAS와 Stackdriver(Logging, Error Reporting)를 연동시킨다 - Qiita

마지막으로



이렇게하면 더 좋습니다! 그렇다면 알려주세요.

좋은 웹페이지 즐겨찾기