You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

通过自定义菜单执行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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 15:28:11