簡體   English   中英

如何在 Google Application Script 中調試 web 開發?

[英]How to debug web development in Google Application Script?

我正在測試/學習 webhook。 如何發送,接收它。 所以我想我會使用 GAS。

我有這個簡單的腳本,我想知道為什么Logger不起作用。 Projects/Executions中,我可以看到腳本 doPost 已執行但沒有日志。 Email 已發送,腳本返回值。

  • 使用舊的舊版編輯器(不知道如何獲得新的)
  • 在 Menu-Resources-Cloud Platform Project 中說“這個腳本有一個 Apps Script-managed Cloud Platform 項目”。
  • 當我在編輯器中打開項目時,我收到此消息“該項目正在我們由 Chrome V8 提供支持的新 Apps 腳本運行時上運行。”
  • 異常日志記錄設置為“exceptionLogging”:“STACKDRIVER”設置為默認值

我試過console.log(e); 但這對我不起作用。

function doPost(e) {
  
 Logger.log("I was called")
 if(typeof e !== 'undefined'){

    Logger.log(e.parameter);
    Logger.log("I was called 2")
 
    MailApp.sendEmail({
     to: "radek@gmail.com",
     subject: "Call Sucessful",
     htmlBody: "I am your <br>" +
               JSON.stringify(e)+ "<br><br>" +
               JSON.stringify(e.parameters)
      
    });
    
  }  
  return ContentService.createTextOutput(JSON.stringify(e))
}

問題 1:我可以讓 Logger 工作嗎?

問題 2:我想在 Debugger 中查看接受的數據,可以嗎?

問題3: GAS有沒有什么辦法把它收到的數據推送到我的web瀏覽器。 當然,瀏覽器不會發送數據。

問題 4:主題無關,但是...您知道我需要做什么才能使用新的編輯器嗎?

如果您希望自己的自定義日志信息到 go 到 Stackdriver,那么您需要創建一個 Google Cloud Platform 項目,並將該 GCP 項目與您的 Apps Script 項目相關聯。

首先創建一個新的 GCP 項目:Go 到您的 GCP 儀表板: https://console.cloud.google.com/home/dashboard?authuser=0

在頂部的藍色欄中,有一個項目名稱的下拉菜單。 單擊它,應該會出現一個對話框,其中包含一個創建新項目的按鈕。 創建一個新的 Google Cloud Platform 項目。 復制項目編號。

Go 返回 Apps 腳本編輯器。 在舊版 Apps 腳本編輯器中,點擊“資源”菜單。 單擊雲平台項目。 粘貼項目編號並單擊按鈕。

現在,您擁有的任何 console.log() 語句都會將日志發送到 Stackdriver。 並且可以在瀏覽器中查看 Stackdriver。

注意:有些人設置了自己的日志記錄系統,將服務器端 Apps 腳本代碼中的信息記錄到 Google 表格中。 有一些可用的開源存儲庫。

新的代碼編輯器確實具有將服務器端信息記錄到日志窗格代碼編輯器 window 的“內置”方式。 但是,這當然假設您正在從代碼編輯器運行代碼。 此新功能無需更改瀏覽器選項卡即可查看您的日志記錄 output。 我不知道有什么方法可以將服務器端信息記錄到您的瀏覽器控制台。 您可以將日志信息保存到 object 中,然后在服務器代碼完成后將其發送回客戶端,然后在控制台中記錄所有內容。

獲取日志信息的方式取決於最初觸發代碼的方式。

  • 從代碼編輯器
  • 來自使用您應用的用戶
  • 從 Http 請求到您的 Web 應用程序

登錄 Apps 腳本的工作方式不同,具體取決於:

  • 正在使用的運行時版本 - V8 或 DEPRECATED_ES5 - 在 appsscript.json 文件中或通過舊版編輯器中的“運行”菜單設置,在新 IDE 的“設置”中設置 - 新應用程序腳本項目默認為 V8,因此您的項目可能是使用 V8。
  • 您的 Apps 腳本項目是與 Google Cloud Platform (GCP) 默認項目還是標准項目相關聯
  • 異常日志是否設置為“exceptionLogging”:“STACKDRIVER” - 在 appsscript.json 文件中設置 - 默認始終包含它 - 除非您刪除它,否則可能已經正確。
  • 使用Logger.logconsole.log
  • 在服務器“.gs”文件或客戶端“.html”文件中使用console.log console.log可以在服務器端和客戶端代碼中使用,但日志打印輸出到不同的地方。 您無法通過服務器代碼中的console.log語句查看瀏覽器開發工具中的日志。 如果您在服務器端.gs 文件中使用console.log ,並且 Apps 腳本項目與標准 GCP 項目關聯,則日志只會發送到您的“執行”。 我相信將日志發送到 Stackdriver 的唯一方法是使用標准 GCP 項目。 這樣做的問題是,您只有這么多 GCP 項目可以使用,而無需請求增加配額。

另外,根據您設置日志記錄的方式和其他因素,可能會出現問題(錯誤)。

例如: https://issuetracker.google.com/issues/134374008

正如很多人指定的那樣,您可以為此使用console.log

但是,我有時也會使用 webhook。 而且我發現直接調試到谷歌電子表格更舒服,使用這樣的代碼

function doPost(e) {
  log('# doPost', JSON.stringify(e));
  try {
    // Some webhook-processing logic here
    if(e.parameter.action == 'test-error') {
      item.something = nothing;
    }
    if(e.parameter.action == 'test-log') {
      log('# custom log', 'Some data');
    }
  } catch(error) {
    log('# error', JSON.stringify([error, error.stack]));
  }
}

function log(event, message){
  SpreadsheetApp.getActive().getSheetByName('Log').appendRow([new Date(), event, message])
}

電子表格示例: https://docs.google.com/spreadsheets/d/144i9pxDIB_C8ZRZ-6vd9DiPIw8Rt85hTtVoqk7dtHQg/edit?usp=sharing

您可以通過這樣的方式觸發日志記錄

curl -X POST https://script.google.com/macros/s/AKfycby3EoaQ8DOt8H_Mc4vjH6JZkhsaAwYHk_sa9HE5Be3qVo0Ym0b2/exec?action=test-error

或者

curl -X POST https://script.google.com/macros/s/AKfycby3EoaQ8DOt8H_Mc4vjH6JZkhsaAwYHk_sa9HE5Be3qVo0Ym0b2/exec?action=test-log

您可以在 webhook 解析期間使用相同的日志來自定義一些中間變量的日志記錄。

我更喜歡標准堆棧驅動程序日志記錄的原因是谷歌表格更明確且更易於管理。

您可以使用 console.log() 查看“我的執行”中的內容。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM