Google Apps Script 로그 디자인 #gasja
새롭게 기사를 썼습니다, 이쪽이 추천입니다.
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 문서로 상관없지만, 운용시에 일일이 그런 것 볼 수 없다.
정상 종료와 이상 종료는 메일로 로그를 보내도록 합니다.
코드
그리고, 써본 코드가 이쪽.
행수도 큰 일도 없고, 특히 어려운 일은 하고 있지 않기 때문에 해설은 하지 않습니다.
필자는 신경 쓰지 않기 때문에 정상 종료 메일에도 로그를 그대로 써 버리고 있습니다만, 그 엔은 적절히 재기록해 주세요.
코드.gsvar 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
마지막으로
이렇게하면 더 좋습니다! 그렇다면 알려주세요.
Reference
이 문제에 관하여(Google Apps Script 로그 디자인 #gasja), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/howdy39/items/4dc11af7b1c74c17f7f7
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
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());
}
이렇게하면 더 좋습니다! 그렇다면 알려주세요.
Reference
이 문제에 관하여(Google Apps Script 로그 디자인 #gasja), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/howdy39/items/4dc11af7b1c74c17f7f7텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)