使った感じ
var logging = Logging.init("1_lR8I0LKuuD1006BWgxdaea1iYsr_15YyB8cLIMNLA0")
logging.log("hey");
ssのid指定してインスタンス作成。
このコードでしたの画像の感じになる
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);
使い方
- リソース->ライブラリから
Mn5_YFJdaIQ2OCoZzE6_gRiVeGV5IAGtZ
のキーを指定して、名前をLoggingにする。 - コードの上の方でインスタンス作成
var logging = Logging.init(spreadsheetId)
gasのコード毎にログ用のスプレッドシートを作成しているのを想定
- あとは
logging.log(文字列)
でlog取れる!