我有一个脚本,它从 JDBC 连接获取输入并将其写入工作表。有时此操作的结果并非预期结果,因此我在脚本的关键点处散布了如下代码:
Logger.log("Trying to delete rows, received: "
+ e.message) ;
Logger.log(" Continuing.") ;
当我从脚本编辑器的“运行”按钮运行此类代码时,我可以毫不费力地看到最新的执行日志 - 它就在我面前。但是当我从像这样创建的菜单中运行相同的代码时:
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);
etc.
从该菜单运行时,我看不到日志。我已进入编辑器并在那里检查;它似乎不知道在开发环境之外运行的脚本。
我必须做什么才能看到这些日志?我知道有一个云日志选项,但看起来设置起来并不那么简单。文档中没有提到通过菜单或脚本编辑器运行脚本的限制。文档 确实提到了一些限制:
These logs are intended for simple checks during development and debugging, and do not persist very long.
但他们似乎没有解决这个问题。有简单的方法吗?
顺便说一句,对于某些正在执行的操作,从脚本编辑器运行不是一个选项。原因是其中涉及提示和对话框(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 并将此代码添加到脚本编辑器中:
从脚本编辑器运行脚本,您将看到创建的日志条目。
从创建(“处理它”)菜单运行脚本,我找不到该日志条目。
正如我在评论中提到的,您正在使用自定义菜单以编程方式运行该功能,这就是它没有出现在右上角的执行日志中的原因。
以下是对此的简单解释:
如果您手动运行该函数,则可以访问
execution log
应用程序脚本右上角的。由于您正在使用以编程方式运行该函数
Custom Menu
,因此可以在应用程序脚本的左侧访问执行日志历史记录。当用户打开电子表格、文档或演示文稿时, onOpen()触发器会自动运行,通常用于向这些 Google Workspace 应用(以及表单)添加自定义菜单选项。
参考: