Google Apps Script で Log の出力をする際、
Google スプレッドシート上にログ出力をしたくなり、
調べたところ、peterherrmann/BetterLog: With one line of code, BetterLog extends the native apps script Logger and gives you automatic additional features like logging to a spreadsheet and more.いうものがあり、使ってみた結果を記載します。


インストールと使い方

README.md記載はあるのでざっくり書きます。

プロジェクトキー

プロジェクトキー
MYB7yzedMbnJaMKECt6Sm7FLDhaBgl_dE指定すると、使用可能になります。

使い方

  • スプレッドシートのキー値を指定、スプレッドシートにログを書き出す 以下、スプレッドシートのキー値を指定すると、
    スプレッドシートにログを吐き出すようにできます。
    ログシート名は未指定なので、Log シート にログを書き込みます。

    // Add one line to use BetterLog
    Logger = BetterLog.useSpreadsheet('your-spreadsheet-key-goes-here'); 
    
    //Now you can log and it will also log to the spreadsheet
    Logger.log("That's all you need to do");
    

  • スプレッドシート名を指定、スプレッドシートにログを書き出す
    以下、スプレッドシートのシート名称を指定しています。
    スプレッドシート名がnull または、空だと、SpreadsheetApp.getActiveSpreadsheet();呼び出され、
    アクティブなスプレッドシートが選択され、そのLogsシートにログが書き込まれます。
    ちなみに、シートがなければ作成され、シートが存在すれば、そのシートに書き込まれます。
    ヘッダ固定にする設定とかまでしてくれるので、初回はライブラリ側の処理のおまかせする意味で、シートは存在しないほうがいいかと思います。

    // Add one line to use BetterLog
    Logger = BetterLog.useSpreadsheet("", "Logs");
    
    //Now you can log and it will also log to the spreadsheet
    Logger.log("That's all you need to do");
    

  • メッセージにパラメータを設定する
    第一引数に%s指定、第二引数以降に設定値を渡すことで、メッセージにパラメータを埋め込むことができます。

    Logger = BetterLog.useSpreadsheet("", "Logs");
    
    Logger.log("This is a %s", "pen");
    ----------------------------------------------
    2017-08-05 23:26:13:593 +0900 005260 INFO This is a pen
    ----------------------------------------------
    

  • メッセージにjsonオブジェクトを設定する
    ログのパラメータが Objectの場合も、ログ書き出しの前に、JSON.stringfy()しているようで、
    大概のObject はログに書きだしてくれます。

    Logger = BetterLog.useSpreadsheet("", "Logs");
    
    Logger.log("This is a %s" , {"key" : "pen"});
    ----------------------------------------------
    2017-08-05 23:28:17:970 +0900 000493 INFO This is a {"key":"pen"}
    ----------------------------------------------
    

  • ログの日付フォーマットを変更する
    DATE_TIME_LAYOUT値を変更することで、ログの日付フォーマットの変更ができます。
    日付フォーマットは、Utilities#formatDate指定可能なもの、
    つまり java の SimpleDateFormat指定できる日付フォーマットが指定できます。

    Logger = BetterLog.useSpreadsheet("", "Logs");
    Logger.DATE_TIME_LAYOUT = "''";
    Logger.log("That's all you need to do");
    Logger.DATE_TIME_LAYOUT = "yyyy.MM.dd G 'at' HH:mm:ss z";
    Logger.log("That's all you need to do");
    Logger.DATE_TIME_LAYOUT = "EEE, MMM d, ''yy";
    Logger.log("That's all you need to do");
    Logger.DATE_TIME_LAYOUT = "h:mm a";
    Logger.log("That's all you need to do");
    Logger.DATE_TIME_LAYOUT = "hh 'o''clock' a, zzzz";
    Logger.log("That's all you need to do");
    Logger.DATE_TIME_LAYOUT = "K:mm a, z";
    Logger.log("That's all you need to do");
    Logger.DATE_TIME_LAYOUT = "yyyyy.MMMMM.dd GGG hh:mm aaa";
    Logger.log("That's all you need to do");
    Logger.DATE_TIME_LAYOUT = "EEE, d MMM yyyy HH:mm:ss Z"
    Logger.DATE_TIME_LAYOUT = "yyMMddHHmmssZ"   
    Logger.log("That's all you need to do");
    Logger.DATE_TIME_LAYOUT = "yyyy-MM-dd'T'HH:mm:ss.SSSZ"
    Logger.log("That's all you need to do");
    Logger.DATE_TIME_LAYOUT = "yyyy-MM-dd'T'HH:mm:ss.SSSXXX"
    Logger.log("That's all you need to do");
    Logger.DATE_TIME_LAYOUT = "YYYY-'W'ww-u"
    Logger.log("That's all you need to do");
    ----------------------------------------------
    2017-08-06 00:03:16:163 +0900 000657 INFO registTaskManageData START
    000739 INFO That's all you need to do
    2017.08.06 AD at 00:03:16 JST 000822 INFO That's all you need to do
    Sun, Aug 6, '17 000903 INFO That's all you need to do
    12:03 AM 000980 INFO That's all you need to do
    12 o'clock AM, Japan Standard Time 001059 INFO That's all you need to do
    0:03 AM, JST 001163 INFO That's all you need to do
    02017.August.06 AD 12:03 AM 001272 INFO That's all you need to do
    170806000316+0900 001371 INFO That's all you need to do
    2017-08-06T00:03:16.956+0900 001450 INFO That's all you need to do
    2017-08-06T00:03:17.048+09:00 001542 INFO That's all you need to do
    2017-W32-7 001636 INFO That's all you need to do
    ----------------------------------------------
    

  • Logシートの最大行数を変更する
    SHEET_MAX_ROWS指定することで変更可能です。
    指定行数を超えると、過去ログのシートを持つスプレッドシートが作成されます。

    Logger.SHEET_MAX_ROWS = 100;
    

  • Logシートのセル幅を変更する
    SHEET_LOG_CELL_WIDTH指定することで変更可能です。
    指定した結果セル幅が変わるかと思ったのですが、特に変わりませんでした..

    Logger.SHEET_LOG_CELL_WIDTH = 100;
    

  • Header部のメッセージを変更する SHEET_LOG_HEADER指定することで変更可能です。

    Logger.SHEET_LOG_HEADER = 'コマンド + ⬇️ と コマンド + ⬆️のクリックでトップ、ボトムに移動できます。';
    

  • JSON 文字列のスペース数を変更する
    JSON_SPACES指定することで変更可能です。

    Logger.JSON_SPACES = 2;
    

  • LogLevelを変更する
    Logger.setLevel()指定できます。

    var Logger = BetterLog.useSpreadsheet("", "Logs");
    Logger.setLevel("WARN");
    
    ログレベルとして、以下の指定が可能です。
    //ref http://docs.oracle.com/javase/7/docs/api/java/util/logging/Level.html
    var Level = Object.freeze({
      OFF:    Number.MAX_VALUE,
      SEVERE: 1000,
      WARNING:900,
      INFO:   800,
      CONFIG: 700,
      FINE:   500,
      FINER:  400,
      FINEST: 300,
      ALL: Number.MIN_VALUE});
    


他のライブラリについて

Logger ライブラリ調べている最中に以下のサイトを見つけました。
Tools for developers - Google Apps Script Examples
個人的に、Create text from template - Google Apps Script Examplesちょっと使ってみようかなと思いました。

以上です。

コメント