通过自定义菜单执行Google Apps Script后如何查看日志?
问题:自定义菜单运行Google Apps Script时无法查看Logger日志
我写了一个通过JDBC连接获取数据并写入工作表的Google Apps Script,为排查异常,在关键位置添加了Logger.log语句:
Logger.log("Trying to delete rows, received: " + e.message); Logger.log(" Continuing.");
在脚本编辑器点击RUN按钮运行时,能直接看到最新执行日志;但通过自定义菜单运行同一脚本时,却找不到日志记录。自定义菜单的创建代码如下:
function onOpen() { var menuItems ; var spreadsheet = SpreadsheetApp.getActive(); var user = Session.getEffectiveUser().getEmail() ; var validUsers = [ validUsersList ] if (spreadsheet.getDataRange().canEdit()) { menuItems = [ {name: 'Process all streams' , functionName: 'processAllStreams'} , {name: 'Build covered artists' , functionName: 'rebuildCoversSheet'} //, {name: 'Add to song list' , functionName: 'buildSongList'} //, {name: 'Process selective streams' , functionName: 'processStreams'} //, {name: 'Move suggestions to top' , functionName: 'moveSuggestionsToTop'} , {name: 'Go to bottom' , functionName: 'showBottomRange'} , {name: 'New livestream details' , functionName: 'getNewLivestreamDetails'} ]; spreadsheet.addMenu('Process it', menuItems); // 其他代码... }
我在脚本编辑器里找不到这些通过外部菜单运行的日志。知道有Cloud Logging选项,但设置太复杂,而且官方文档没提到菜单运行和编辑器运行的日志差异,只说明日志留存时间较短。
另外,部分功能使用了getUi.prompt这类对话框,无法在脚本编辑器里运行,陷入两难境地。
我还做了测试脚本验证问题:
function onOpen() { var menuItems = [ { name: 'Make a log entry', functionName: 'makeEntry' } ]; SpreadsheetApp.getActive().addMenu('Process it', menuItems); } function makeEntry() { Logger.log('here you go....'); }
在新Google Sheet中添加这段代码后,编辑器运行能看到日志,但通过“Process it”菜单运行时,完全找不到日志记录。想请教有没有简单方法查看这些日志?
简单解决方法
方法1:改用console.log并查看执行历史记录
- 直接把代码里的
Logger.log替换成console.log,语法完全一致,无需额外修改参数。 - 打开脚本编辑器,点击左侧菜单栏的执行,选择执行历史记录。
- 在执行历史列表里,找到自定义菜单触发的执行条目(会标注触发方式为“菜单”),点击展开就能看到
console.log输出的所有日志内容。
方法2:把日志写入工作表
如果觉得执行历史记录不够直观,可以临时把日志输出到工作表的专门区域:
// 自定义日志函数,写入到"日志"工作表 function logToSheet(message) { var ss = SpreadsheetApp.getActiveSpreadsheet(); var logSheet = ss.getSheetByName('日志') || ss.insertSheet('日志'); // 追加带时间戳的日志行 logSheet.appendRow([new Date().toLocaleString(), message]); } // 替换原来的Logger.log调用 logToSheet("Trying to delete rows, received: " + e.message);
每次运行脚本时,日志会自动追加到“日志”工作表,排查完成后删除该工作表即可,操作简单直观。
方法3:用Toast通知显示关键日志
对于需要即时查看的关键错误或状态信息,可以用弹窗提示临时显示:
// 弹出5秒的临时提示 SpreadsheetApp.getUi().showToast( "Trying to delete rows, received: " + e.message, "运行日志", 5 // 显示时长(秒) );
这种方式适合快速查看核心信息,不会干扰正常操作,不需要额外打开日志页面。
内容的提问来源于stack exchange,提问作者Dennis
相关产品推荐
相关产品推荐

