🦁

GASのログをスプレッドシートに書き出す方法

2024/04/01に公開

はじめに

doGetdoPostのように外部からのGETリクエストやPOSTリクエストで起動した関数のログはエディターでは確認することができません。
https://ryjkmr.com/google-apps-script-console-log/

下記のようにGCPプロジェクトと紐づけるとログは確認できますが、そこまでの手間をかけたくない場合も多いと思います。そのような場合にログをスプレッドシートに書き出せないかと思い試してみました。
https://zenn.dev/nenenemo/articles/db5f4d3930276c

記述内容

LOG_WRITING_FILE_IDは環境変数に設定しているスプシのIDです。

const numbers = [1, 2, 3, 4, 5];

const spreadsheetId = PropertiesService.getScriptProperties().getProperty('LOG_WRITING_FILE_ID');

if (spreadsheetId) {
  // 最初のシートを対象とします
  const sheet = SpreadsheetApp.openById(spreadsheetId).getSheets()[0]; 
  // 現在の日時を取得
  const now = new Date();

  sheet.appendRow([
    // わかりやすいように1列目には現在の日時を書き込む
    Utilities.formatDate(now, 'JST', 'yyyy/MM/dd HH:mm:ss'), 
    JSON.stringify(numbers)
  ]);
}

スプレッドシートに書き出したログ

下記のようになっているかと思います。

ログについて

https://ryjkmr.com/google-apps-script-console-log/

Loggerとconsoleの違い

Loggerクラスのメリット

コンソール画面の実行数からのログについて確認できる

Loggerクラスのデメリット

ログがjson形式で表示されない。

consoleクラスのメリット

ログがjson形式で表示されるので非常に見やすい。

consoleクラスのデメリット

コンソールの実行ログからは確認できるが、実行数からは確認できない。
GCPに紐づけると確認できるようになります。

console.time() という実行時間を計測するためのメソッドを使用している場合には、自分で開始時刻と終了時刻を取得するコードを書いて差分をLogger.log()で取得するとコンソールでも確認できます。

終わりに

何かありましたらお気軽にコメント等いただけると助かります。
ここまでお読みいただきありがとうございます🎉

Discussion