[GAS]GASからのログ出力の現実的な方法

2,660 views
Skip to first unread message

佐藤純也

unread,
Nov 13, 2012, 1:46:38 AM11/13/12
to google-app...@googlegroups.com
お世話になります。
2度目の投稿になります。佐藤といいます。

GASでのはじめての業務システムを開発しています。

ログ出力ですが、サーバとの通信が行われるたび一度ログがリセットされる、ということなので、出力先をクラウドストレージかGoogle Spreadsheetとかに書かせようと思っています。
あまり、システム開発に強くないので、よろしければ、ログ周りの実装方法と運用方法など、お教えいただけるとうれしいです!

よろしくお願いいたします!

佐藤 純也

中村敦

unread,
Nov 13, 2012, 3:24:14 AM11/13/12
to google-app...@googlegroups.com
a2cです

ひと通り処理が終わった段階でLogを回収してシートなりに
放り込めばいいかと思います。

ログ書いて、回収するサンプル

function myFunction() {
  Logger.log("this is raw log")
  var myLog = Logger.getLog();
  Logger.log('via getLog>' + myLog);
}



 --
Atusi Nakamura
at...@a2c.biz


2012年11月13日 15:46 佐藤純也 <j100...@gmail.com>:

佐藤純也

unread,
Nov 13, 2012, 3:31:26 AM11/13/12
to google-app...@googlegroups.com
a2cさん

ありがとうございます。
なるほどです。

佐藤

2012年11月13日火曜日 17時24分33秒 UTC+9 a2c:

山本 章

unread,
Nov 13, 2012, 10:16:42 AM11/13/12
to google-app...@googlegroups.com
山本章です。
私もGAS初心者ですが、お役に立てればと。

私の場合はLogger.logは使用せず、ダイアログボックスに表示させています。

UIを作る時に以下のようなコードを実行。

    var dialog = app.createDialogBox(false, true).setId("okDialog").setText("test").setStyleAttribute("position", "absolute").setVisible(false);
    var vPanel = app.createVerticalPanel();
    vPanel.add(app.createLabel("test").setId("okDialogValue"));
    vPanel.add(app.createButton("OK").addClickHandler(app.createServerHandler("onClick_okDialog_ok")));
    dialog.add(vPanel);

ダイアログ表示、非表示関数を作成

  function okDialogVisible(title, value) {
    var app = UiApp.getActiveApplication();
    var t = app.getElementById("okDialog");
    t.setText(title);
    var v = app.getElementById("okDialogValue");
    v.setText(value);
    app.getElementById("okDialog").setVisible(true);
    return app;
  }
  
  function okDialogUnvisible() {
    var app = UiApp.getActiveApplication();
    app.getElementById("okDialog").setVisible(false);
    return app;
  }

イベントハンドラを以下のように用意

  function onClick_okDialog_ok(e) {
   return okDialogUnvisible();
  }

後はログを出したいところで・・・

  okDialogVisible("テストダイアログ", Utilities.jsonStringify(obj));


こんな感じでやってます。
a2cさんの方法と合わせてやることでいいデバッグができそうですね!

山本章


2012年11月13日火曜日 15時46分38秒 UTC+9 佐藤純也:

佐藤純也

unread,
Nov 13, 2012, 6:17:10 PM11/13/12
to google-app...@googlegroups.com
山本さん

ありがとうございます!
助かります!

佐藤


2012年11月14日 0:16 山本 章 <af.yamam...@gmail.com>:



--
佐藤 純也
Cell: 080-4295-1008


Ohashi, Keisuke

unread,
Nov 13, 2012, 8:35:36 PM11/13/12
to google-app...@googlegroups.com
To 佐藤さん

こんにちは
大橋(soundTricker)です。

僕も基本はLogger.getLog()で全出力です。
ただ、出力先はTimeTrigger(つまりバッチ系)か、UI(画面系)かで変えてます。

TimeTrigger系の場合は、落ちた場合に即時で気が付きたいので全体try-catchにしてメールでログを送信しています。
というか終了時には必ずメールを投げてます。

try {
//処理
MailApp.sendMail("送信対象" , "[hogehoge]正常終了" , Logger.getLog());
} catch(e) {
Logger.log(e);
MailApp.sendMail("送信対象" , "[hogehoge]エラー" , Logger.getLog());

throw e; //標準機能の処理失敗メールを飛ばすためにthrowもする
}

ただしこれをやると落ちた場所の行番号がthrow eの所になるので注意が必要です。
またあまりにもログが多いとメール送信サイズの上限に引っかかります。

画面系の場合は、Driveのファイルに直接出力しています。

var DriveLogger = {

flush : function(){
var logFileKey = ScriptProperties.getProperty("logFileKey");

var logFile = null;
if(logFileKey == null){
logFile = DocsList.createFile("fileName", "");
ScriptProperties.setProperty("logFileKey", logFile.getId());
} else {
logFile = DocsList.getFileById(logFileKey);
}
logFile.append(Logger.getLog());
}
}

上のクラスのflushを呼び出してlogを吐き出す感じです。
logFileKeyは開発時に先に用意しておいて、書き込み権限は誰でもOKにしてあります。
※アクセスが多いアプリはログファイル自体も分散してたりしています。
※上には書いてないですが、一行ずつ出力するメソッドもあったりします。

佐藤純也

unread,
Nov 13, 2012, 8:57:26 PM11/13/12
to google-app...@googlegroups.com
大橋さん

ありがとうございます!

>皆様
ちょっと、別テーマをちらっと。
Google Apps Scriptのすごさに最近気づいた私で僭越ですが、GASに興味あるひとたちで、忘年会か新年会をやりませんか?まずは、都内で。
賛同いただければ、わたし、幹事やります。
せっかくなので、飲み会の前に、勉強会とか事例共有会とか、やってもいいかもと思います。もしくは、飲み会といっしょに。
やる場合、このような企画の書き込み先として、どこが適切でしょうか?ここでもよいですか?
ご意見いただけるとうれしいです。

佐藤


2012年11月14日 10:35 Ohashi, Keisuke <k-oh...@bfts.co.jp>:

中村敦

unread,
Nov 14, 2012, 1:13:27 AM11/14/12
to google-app...@googlegroups.com
+1

ここでいいと思います。
a2c

iPhoneから送信

2012/11/14 10:57、"佐藤純也" <j100...@gmail.com> のメッセージ:

Ohashi, Keisuke

unread,
Nov 14, 2012, 7:05:59 AM11/14/12
to google-app...@googlegroups.com

+1

Regards.

--
keisuke oohashi

Soshi HANAMURA

unread,
Nov 14, 2012, 7:41:45 AM11/14/12
to google-app...@googlegroups.com
+1

最近あまりGAS触れてませんが是非お話聞きたいですー

Soshi Hanamura

佐藤純也

unread,
Nov 15, 2012, 9:23:48 PM11/15/12
to google-app...@googlegroups.com
みなさん、ありがとうございます!
12月中旬か、1月中旬で、開催してみたいです。
今月中に、別スレッドをたてて、日程、場所、内容など、ご意見をうかがいたいと思います。

2012年11月15日木曜日 8時52分28秒 UTC+9 kaori:
+1

西村かおりと申します。
こちらでははじめましてですが、よろしくおねがいします。

佐藤純也

unread,
Nov 16, 2012, 12:33:39 AM11/16/12
to google-app...@googlegroups.com
@stomitaさん
GASすごいねー。
スプレッドシート、cloud SQL、Chartsとか組み合わせると、いろんなことできちゃいそうで、可能性を感じています。
このスレッドの勉強会で、ぜひ!

2012年11月16日金曜日 stomita shinich...@gmail.com:
こんにちは、@stomita です。

On Friday, November 16, 2012 11:23:48 AM UTC+9, 佐藤純也 wrote:
みなさん、ありがとうございます!
12月中旬か、1月中旬で、開催してみたいです。
今月中に、別スレッドをたてて、日程、場所、内容など、ご意見をうかがいたいと思います。
 
おお、ジュンヤさんじゃないですか!
最近はGASもされてるんですねー。

+1
私もぜひ参加したいです。
(でもGASは以前飛ばし気味のブログ記事書いて以来まったくさわってない…このグループも超久しぶりに見ましたw)
--
このメールは Google グループのグループ「Google Apps API Japan」の登録者に送られています。
このグループに投稿するには、google-app...@googlegroups.com にメールを送信してください。
その他のオプションについては、https://groups.google.com/groups/opt_out にアクセスしてください。
 
 
Reply all
Reply to author
Forward
0 new messages