LoginSignup
3
2

More than 5 years have passed since last update.

GASのログ取るいい感じのライブラリ作った

Posted at

使った感じ

var logging = Logging.init("1_lR8I0LKuuD1006BWgxdaea1iYsr_15YyB8cLIMNLA0")
logging.log("hey");

ssのid指定してインスタンス作成。
このコードでしたの画像の感じになる

スクリーンショット 2018-06-06 15.09.21.png

log()が呼べれたときだけ1日毎のシートを自動作成している

ソースコード

function init(spreadsheetId) {
  return new Logging(spreadsheetId);
}

(function(global){
  var Logging = (function() {

    /**
     * コンストラクタ
     *
     * @param string spreadsheetId ログの出力先シートId
     */
    function Logging(spreadsheetId){
      this.spreadsheetId = spreadsheetId;
    }

     /**
     * タイムスタンプ取得
     */
    function _getTimestamp() {
      var date = new Date();
      return date.getFullYear() + '-' + ('0'+(date.getMonth() + 1)).slice(-2) + '-' + ('0'+date.getDate()).slice(-2)
      + 'T' + ('0'+date.getHours()).slice(-2) + ':' + ('0'+date.getMinutes()).slice(-2) + ':' + ('0'+date.getSeconds()).slice(-2)
      + '.' + ('00'+date.getMilliseconds()).slice(-3);
    }

    /**
     * 2018/01/01の形で日付の文字列を返す
     */
    function _getTodayString() {
      var d = new Date();
      var month = '' + (d.getMonth() + 1);
      var day = '' + d.getDate();
      var year = d.getFullYear();

      if (month.length < 2) month = '0' + month;
      if (day.length < 2) day = '0' + day;

      return [year, month, day].join('/');
    }

    /**
     * 今日の日付のシート作成
     */
    function createTodaySheet(id){
      var ss = SpreadsheetApp.openById(id);
      var newSheetName = _getTodayString();
      return ss.insertSheet(newSheetName);
    }

    /**
     * ログ出力
     *
     * @param string msg ログテキスト
     */
    Logging.prototype.log = function(msg) {

      // 今日の日付の出力先シートをidから検索して取得、なければ新規作成
      var objectSS = SpreadsheetApp.openById(this.spreadsheetId);
      var objectSheets = objectSS.getSheets();
      var sheetName = _getTodayString();
      var sheet;
      objectSheets.forEach(function(objectSheet){
        if(sheetName == objectSheet.getName()){
          sheet = objectSheet;
        }
      })
      if(!sheet){
        sheet = createTodaySheet(this.spreadsheetId);
      }

      // シートの一番下にタイムスタンプと内容の配列を入れる
      var logArray = [_getTimestamp(),msg]

      sheet.appendRow(logArray);
    }

    return Logging;
  })();

  global.Logging = Logging;

})(this);

使い方

  1. リソース->ライブラリからMn5_YFJdaIQ2OCoZzE6_gRiVeGV5IAGtZのキーを指定して、名前をLoggingにする。
  2. コードの上の方でインスタンス作成
var logging = Logging.init(spreadsheetId)

gasのコード毎にログ用のスプレッドシートを作成しているのを想定

  1. あとは
logging.log(文字列)

でlog取れる!

3
2
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2