【GAS】consoleとLoggerの違いとは
Google Apps Script(GAS)におけるログ出力機能として、consoleクラスとLoggerクラスが用意されています。
また、それぞれにlogメソッドがあるため「ログを出力する」機能としてはほとんど同じものですが、若干の性質の違いでどちらかの利用を推奨する記事や書籍もあります。
この記事ではonsoleとLoggerの違いをご紹介します。
ログ出力の記述方法
console.log(オブジェクト)
Logger.log(オブジェクト)
ログ出力について確認してみましょう。スクリプト記述方法は同じです。
function myFunction() {
const num = 100;
console.log(num); //100
Logger.log(num); // 100.0
let str = `Hello World`;
console.log(str); // `Hello World`
Logger.log(str); // `Hello World`
}
文字列のアウトププットは同じですが、数値のアウトプットは小数点以下の表示が異なりますね。
次にオブジェクトのログ出力を行ってみます。
function myFunction() {
const pet = {
name: 'Ted',
age: 4
}
console.log(pet); // { name: 'Ted', age: 4 }
Logger.log(pet); // {age=4.0, name=Ted}
}
オブジェクトの中に、「:(コロン)」で区切った複数のペア(「キー」:「値」)の記述をオブジェクトリテラルと呼びます。このようにオブジェクトの表記方法も違うようですね。
consoleクラス
ログ以外では下記の3つのメソッドがあります。ログ内容によって重要度や緊急度でレベル分けを行うが良いでしょう。
メソッド | 説明 |
---|---|
log | システム動作のログ出力。 |
info | エラーや警告まではいかないものの、何らかの注目すべき情報。 |
warn | エラーとは言い切れないが、近い事象として注目すべき情報。 |
error | エラー。プログラム続行不可能。 |
let str = `Hello World`;
console.log(str); // `Hello World`
console.info(str); // `Hello World`
console.warn(str); // `Hello World`
console.error(str); // `Hello World`
レベルによってどのような使い分けができそうか、サンプルスクリプトを見ながら考えてみましょう。
let i=1;
const id = '[スプレッドシートのファイルID]';
function myFunction() {
// シンプルなinfoログ出力
console.info('%s の実行は %d 回目です)', 'myFunction', i);
let ss = SpreadsheetApp.openById(id)
let sheet = ss.getSheetByName('シート1');
let lastRow = sheet.getLastRow();
sheet.getRange(lastRow+1,1).setValue(i);
try {
if(i>5){
console.warn('実行回数が 5回 を超えています。現在の実行回数は %d です', i);
}
i = i+1;
myFunction(); // Function to time.
} catch (e) {
//エラーメッセージ
console.error('myFunction() yielded an error: ' + e);
}
}
console.infoの使い方
console.info(オブジェクト1 [, オブジェクト2, …])
ループ回している際など、確認出力に使っています。
// シンプルなinfoログ出力
console.info('%s の実行は %d 回目です)', 'myFunction', i);
console.warnの使い方
console.warn(オブジェクト1 [, オブジェクト2, …])
何か条件分岐や繰り返し構文の際、エラーとまではいかないまでもこのまま続けているとエラーに突入する可能性がある時などに使えそうですね。
try {
if(i>5){
console.warn('実行回数が 5回 を超えています。現在の実行回数は %d です', i);
}
console.errorの使い方
console.error(オブジェクト1 [, オブジェクト2, …])
try~catch文のエラー時、エラーオブジェクトと一緒に出力するのがよさそうです。
} catch (e) {
//エラーメッセージ
console.error('myFunction() yielded an error: ' + e);
}
Loggerクラス
ログ以外では2つのメソッドがあります。
メソッド | 説明 |
---|---|
log | 「デバック」レベルのログを出力する |
getLog | 「情報」レベルのログを出力する |
clear | 「警告」レベルのログを出力する |
Logger.getLogの使い方
console.info(オブジェクト1 [, オブジェクト2, …])
Logger.clearの使い方
console.warn(オブジェクト1 [, オブジェクト2, …])