google-apps-script-better-logger v0.1.4
Google Apps Script Better Logger
一個比原生 console.log 好一些的 Logger
可以用 sheet、Stackdriver Logging 紀錄,還可以用 mail 通知
A Logger which better than built-in console.log .
You can use sheet, Stackdriver Logging records, you can also use mail to notify.
目錄 index
如何使用 Getting Started
安裝(install)
Google Apps Script Library install
打開 gs 編輯頁面
-> "資源"
-> "程式庫"
-> 將 1R4kOenBr5gSIcxUbCYegM4pStj0JzjXdA2jryW5s9J2Phg_ebaykmEgo 貼上輸入框
-> "新增"
-> 選擇最後版本(記得阿 不然儲存不了)
-> "儲存"~
Open Script Editor.
-> Resource
-> Library
-> Paste Script ID 1R4kOenBr5gSIcxUbCYegM4pStj0JzjXdA2jryW5s9J2Phg_ebaykmEgo to box
-> Add library
-> select lastest version and save
npm install
npm i google-apps-script-better-logger⚠️npm 安裝僅提供輸入提示,並無法在 local 端執行!⚠️
⚠️npm install only support IDE input prompt, can't run code on local!⚠️

一般使用(General use)
code:
function t2() {
console.log("---------------------");
var logger = new BetterLogger.BetterLogger();
var levels = logger.levels;
logger.set_level(logger.levels.NOTICE);
console.log(logger.get_config());
// 有2種方式可以log 這是第1種
// have 2 method , this 1
logger.log(levels.EMERGENCY, "這是測試 EMERGENCY !!!!!");
logger.log(levels.ALERT, "這是測試 ALERT !!!!!");
logger.log(levels.CRITICAL, "這是測試 CRITICAL !!!!!");
logger.log(levels.ERROR, "這是測試 ERROR !!!!!");
logger.log(levels.WARNING, "這是測試 WARNING !!!!!");
logger.log(levels.INFO, "這是測試 INFO !!!!!");
logger.log(levels.DEBUG, "這是測試 DEBUG !!!!!");
logger.log(levels.NOTICE, "這是測試 NOTICE !!!!!");
// 這是第2種
// this 2
logger.emergency("這是測試 EMERGENCY =====");
logger.alert("這是測試 ALERT =====");
logger.critical("這是測試 CRITICAL =====");
logger.error("這是測試 ERROR =====");
logger.warning("這是測試 WARNING =====");
logger.info("這是測試 INFO =====");
logger.debug("這是測試 DEBUG =====");
logger.notice("這是測試 NOTICE =====");
}result:

使用 sheet (use sheet)
code:
function t1() {
console.log("---------------------");
var logger = new BetterLogger.BetterLogger();
var levels = logger.levels;
// 設定要 log 的 sheet page
// set need to log sheet page
logger.set_sheet_id("1lqlqztKroBwDZ--VxoYN9Hh_BuwOzbdbowltI7yf2N4");
// 啟動 sheet 紀錄
// Turn on sheet log
logger.set_use_sheet(true);
logger.set_level(levels.NOTICE);
console.log(logger.get_config());
logger.emergency("這是測試 EMERGENCY =====");
logger.alert("這是測試 ALERT =====");
logger.critical("這是測試 CRITICAL =====");
logger.error("這是測試 ERROR =====");
logger.warning("這是測試 WARNING =====");
logger.info("這是測試 INFO =====");
logger.debug("這是測試 DEBUG =====");
logger.notice("這是測試 NOTICE =====");
}result:

使用 mail 通知(use mail notice)
code:
function t3() {
console.log("---------------------");
var logger = new BetterLogger.BetterLogger();
console.log(logger.get_config());
logger.set_level(logger.levels.NOTICE);
// 啟動 mail 通知 (在沒有特別設定的情況下,只有 EMERGENCY、ALERT、NOTICE 3個會通知)
// Turn on mail notice, if you not change setting, only EMERGENCY、ALERT、NOTICE will notice
logger.set_use_mail(true);
// 這裡填寫你的程式名稱 寄信時當作標題用
// there fill in the name of your program , will use it as the title when sending a mail.
logger.application = "這裡填你的應用程式名稱";
logger.emergency("這是測試 EMERGENCY =====");
logger.alert("這是測試 ALERT =====");
logger.critical("這是測試 CRITICAL =====");
logger.error("這是測試 ERROR =====");
logger.warning("這是測試 WARNING =====");
logger.info("這是測試 INFO =====");
logger.debug("這是測試 DEBUG =====");
logger.notice("這是測試 NOTICE =====");
}result:

概觀 Overview
| 功能 Methods | 說明 Explanation |
|---|---|
| set_config | 一次設定 Logger 所有參數。Set Logger all config |
| set_logfmt | 設定 Logger 的時間格式Set Logger time format |
| set_GMT | 設定 Logger 時區,單位 GMTSet Logger time zone, unit GMT |
| set_use_console | 設定是否啟用 Stackdriver Logging,預設開啟Set whether to enable Stackdriver Logging, the default is on |
| set_use_sheet | 設定是否啟用 sheet,預設關閉Set whether to enable sheet, the default is off |
| set_sheet_id | 設定要使用的 sheet idSet the sheet id |
| set_sheet_page_name | 設定要使用的 sheet page,預設為 'log'Set the sheet page to use, the default is 'log' |
| set_sheet_log_slice | 設定 log 進 sheet 時,要不要分欄輸入(A 欄、B 欄...)When log into the sheet, do you want to enter it in a columns or separate(Column A, Column B...) |
| set_level | 設定紀錄的等級Set the record level |
| set_EMERGENCY_color | 設定 EMERGENCY 紀錄在 sheet 時的單元格顏色Set the cell color when EMERGENCY is recorded in sheet |
| set_ALERT_color | 設定 ALERT 紀錄在 sheet 時的單元格顏色Set the cell color when ALERT is recorded in sheet |
| set_CRITICAL_color | 設定 CRITICAL 紀錄在 sheet 時的單元格顏色Set the cell color when CRITICAL is recorded in sheet |
| set_ERROR_color | 設定 ERROR 紀錄在 sheet 時的單元格顏色Set the cell color when ERROR is recorded in sheet |
| set_WARNING_color | 設定 WARNING 紀錄在 sheet 時的單元格顏色Set the cell color when WARNING is recorded in sheet |
| set_INFO_color | 設定 INFO 紀錄在 sheet 時的單元格顏色Set the cell color when INFO is recorded in sheet |
| set_DEBUG_color | 設定 DEBUG 紀錄在 sheet 時的單元格顏色Set the cell color when DEBUG is recorded in sheet |
| set_NOTICE_color | 設定 NOTICE 紀錄在 sheet 時的單元格顏色Set the cell color when NOTICE is recorded in sheet |
| set_use_mail | 設定是否要寄 emailSet whether to send email |
| set_EMERGENCY_mail | 設定遇到 log 等級 EMERGENCY 時,是否要寄送 mail,預設 trueSet whether to send mail when encountering log level EMERGENCY,the default is true |
| set_ALERT_mail | 設定遇到 log 等級 ALERT 時,是否要寄送 mail,預設 trueSet whether to send mail when encountering log level ALERT,the default is true |
| set_CRITICAL_mail | 設定遇到 log 等級 CRITICAL 時,是否要寄送 mail,預設 falseSet whether to send mail when encountering log level CRITICAL,the default is false |
| set_ERROR_mail | 設定遇到 log 等級 ERROR 時,是否要寄送 mail,預設 falseSet whether to send mail when encountering log level ERROR,the default is false |
| set_WARNING_mail | 設定遇到 log 等級 WARNING 時,是否要寄送 mail,預設 falseSet whether to send mail when encountering log level WARNING,the default is false |
| set_INFO_mail | 設定遇到 log 等級 INFO 時,是否要寄送 mail,預設 falseSet whether to send mail when encountering log level INFO,the default is false |
| set_DEBUG_mail | 設定遇到 log 等級 DEBUG 時,是否要寄送 mail,預設 falseSet whether to send mail when encountering log level DEBUG,the default is false |
| set_NOTICE_mail | 設定遇到 log 等級 NOTICE 時,是否要寄送 mail,預設 trueSet whether to send mail when encountering log level NOTICE,the default is true |
| set_application | 設定程式名稱set application name |
| log | 紀錄 log 用For logging |
| emergency | 使用 emergency log use emergency log |
| alert | 使用 alert log use alert log |
| critical | 使用 critical log use critical log |
| error | 使用 error log use error log |
| warning | 使用 warning log use warning log |
| info | 使用 info log use info log |
| debug | 使用 debug log use debug log |
| notice | 使用 notice log use notice log |
功能詳細說明 Function Description
set_config
設定 Logger。
set_config(sheet_id, sheet_page_name, logfmt, GMT, datefmt, level);Return
void
Parameters
| name | type | Description |
|---|---|---|
| sheet_id | string | https://docs.google.com/spreadsheets/d/ 1lqlqztKroBwDZ--VxoYN9Hh_BuwOzbdbowltI7yf2N4 /edit 網址中的這一段 (介於 "d/" 跟 "/edit" 之間) |
| sheet_page_name | string | 使用 sheet 中的哪個 page,預設是'log' |
| logfmt | string | logger 的 log 格式 |
| GMT | string | GMT 時間 |
| datefmt | string | logger 的 log 格式中 時間的紀錄方式 |
| level | string | number | Levels | 紀錄的等級,可以接受 'EMERGENCY'、60、logger.levels.NOTICE 這 3 種方式 |
Explanation
function t4() {
var logger = new BetterLogger.BetterLogger();
logger.set_config(
"xxx123",
"log_2020/07/13",
"%{datefmt} %{levelname} : %{message}",
"GMT+0",
"yyyy.MM.dd HH:mm:ss",
"INFO"
);
console.log(logger.get_config());
}set_logfmt
設定 log 格式。
set_logfmt(logfmt);Return
void
Parameters
| name | type | Description |
|---|---|---|
| logfmt | string | logger 的 log 格式 |
Explanation
function t4() {
var logger = new BetterLogger.BetterLogger();
logger.set_logfmt("%{datefmt} %{levelname} : %{message}");
console.log(logger.get_config());
}set_GMT
設定 Logger GMT 時區。
set_GMT(GMT);Return
void
Parameters
| name | type | Description |
|---|---|---|
| GMT | string | GMT 時區 |
Explanation
function t4() {
var logger = new BetterLogger.BetterLogger();
logger.set_GMT("GTM+8");
console.log(logger.get_config());
}set_use_console
用來開關 Stackdriver Logging,預設 true。
set_use_console(boolean);Return
void
Parameters
| name | type | Description |
|---|---|---|
| boolean | boolean | true or false |
Explanation
function t4() {
var logger = new BetterLogger.BetterLogger();
logger.set_use_console(false);
console.log(logger.get_config());
}set_use_sheet
用來開關 sheet log,預設 false。
set_use_sheet(boolean);Return
void
Parameters
| name | type | Description |
|---|---|---|
| boolean | boolean | true or false |
Explanation
function t4() {
var logger = new BetterLogger.BetterLogger();
logger.set_use_sheet(true);
console.log(logger.get_config());
}set_sheet_id
用來設定 sheet id。
set_sheet_id(id);Return
void
Parameters
| name | type | Description |
|---|---|---|
| id | string | https://docs.google.com/spreadsheets/d/ 1lqlqztKroBwDZ--VxoYN9Hh_BuwOzbdbowltI7yf2N4 /edit 網址中的這一段 (介於 "d/" 跟 "/edit" 之間) |
Explanation
function t4() {
var logger = new BetterLogger.BetterLogger();
logger.set_sheet_id("1lqlqztKroBwDZ--VxoYN9Hh_BuwOzbdbowltI7yf2N4");
console.log(logger.get_config());
}set_sheet_page_name
用來設定 sheet page name。
如果沒有在 sheet 中發現指定的 page 名稱,則會自己新增一個。
set_sheet_page_name(page_name);Return
void
Parameters
| name | type | Description |
|---|---|---|
| page_name | string | 使用 sheet 中的哪個 page,預設是'log' |
Explanation
function t4() {
var logger = new BetterLogger.BetterLogger();
logger.set_sheet_page_name("log_2020/07/13");
console.log(logger.get_config());
}set_sheet_log_slice
設定 log 進 sheet 時,要不要分欄輸入(A 欄、B 欄...)
如果是 false 就只輸出 1 欄。
set_sheet_log_slice(boolean);Return
void
Parameters
| name | type | Description |
|---|---|---|
| boolean | boolean | 設定 log 進 sheet 時,要不要分欄輸入(A 欄、B 欄...) |
Explanation
function t4() {
var logger = new BetterLogger.BetterLogger();
logger.set_sheet_log_slice(true);
console.log(logger.get_config());
}set_level
設定 log level。
set_level(level);Return
void
Parameters
| name | type | Description |
|---|---|---|
| level | string | number | Levels | 紀錄的等級,可以接受 'EMERGENCY'、60、logger.levels.NOTICE 這 3 種方式 |
Explanation
function t4() {
var logger = new BetterLogger.BetterLogger();
logger.set_level("WARNING");
console.log(logger.get_config());
}set_XXX_color
設定 XXX 在 sheet log 時的顏色。
set_XXX_color(color);Return
void
Parameters
| name | type | Description |
|---|---|---|
| color | string | 十六進位字串顏色 |
Explanation
function t4() {
var logger = new BetterLogger.BetterLogger();
logger.set_ALERT_color("#ffff00");
logger.set_level(50);
logger.alert("顏色 == #ffff00");
}set_use_mail
設定是否在 log 時寄送 eamil。
預設是 false .
set_use_mail(boolean);Return
void
Parameters
| name | type | Description |
|---|---|---|
| boolean | boolean | true of false |
Explanation
function t4() {
var logger = new BetterLogger.BetterLogger();
logger.set_use_mail(true);
logger.alert("寄送 Email!");
}set_XXX_mail
設定指定 log level 是否寄送 Email。 如果未指定,則只有 EMERGENCY、ALERT、NOTICE 這三個會寄送。詳見Levels
set_XXX_mail(boolean);Return
void
Parameters
| name | type | Description |
|---|---|---|
| boolean | boolean | true of false |
Explanation
function t4() {
var logger = new BetterLogger.BetterLogger();
logger.set_ERROR_mail(true);
logger.error("寄送 email!");
}set_application
設定指定寄送 Email 時,標題的名稱。 預設 "Google_Apps_Script_Logger"。
set_application(subject);Return
void
Parameters
| name | type | Description |
|---|---|---|
| subject | string | 寄信時的標題名稱 |
Explanation
function t4() {
var logger = new BetterLogger.BetterLogger();
logger.set_application("minecraft");
logger.notice("伺服器重啟成功!");
}元件說明 Component Description
logfmt
logfmt 預設是 "%{datefmt} - %{user} - %{levelname} : %{message}"
種類
| 名稱 | 說明 |
|---|---|
| datefmt | 是時間格式化後的字串,詳見datefmt |
| user | 為使用這個 Logger 的 google 帳號 (xxx@gmail.com) |
| levelname | 是 log 的等級,詳見levels |
| message | 是你想記錄的訊息文字 |
datefmt
datefmt 預設是 "yyyy.MM.dd HH:mm:ss z" 詳細請看 SimpleDateFormat
Levels
| 名稱 | 等級 | 說明 | 預設是否寄 email |
|---|---|---|---|
| EMERGENCY | 70 | 緊急 | ✓ |
| ALERT | 60 | 快訊 | ✓ |
| CRITICAL | 50 | 重要 | ✖ |
| ERROR | 40 | 錯誤 | ✖ |
| WARNING | 30 | 警告 | ✖ |
| INFO | 20 | 資訊 | ✖ |
| DEBUG | 10 | 除錯 | ✖ |
| NOTICE | 0 | 通知 | ✓ |
待做 TODO
- 將 log level 完整對應到 Stackdriver Logging 上,不再用其他代替
- 考慮做 file 版記錄方式
- sheet log 是否要做分天、月 log?