使用单个日志记录库记录不同的项目库

时间:2013-06-24 12:52:13

标签: google-apps-script

我在Apps脚本中有一个使用多个库的项目。该项目需要一个更复杂的记录器(记录级别,颜色编码),所以我写了一个输出到谷歌文档。如果我立即将输出打印到谷歌文档,当我分别在所有库中导入记录器时,一切都很好,花花公子。但是我注意到,在进行大量日志记录时,它需要的时间比没有日志要多得多。所以我正在寻找一种方法,在主脚本完成时,在最后一次写入所有输出。

这需要:

  • 能够定义一次日志库(在主文件中)并以某种方式在附加的libs中访问它。我似乎无法找到从库中获取主要项目的方法。
  • 某种单例记录器对象。不确定是否可以使用库,我无法以任何方式解决它。
  • 扩展内置记录器以满足我的需求,但不确定......

我的项目如下:

主要项目

  • 图书馆1
  • 图书馆2
  • 图书馆3
  • 图书馆4

这就是我使用当前记录器的方式:

var logger = new BetterLogger(/* logging level */);
logger.warn('this is a warning');

谢谢!

1 个答案:

答案 0 :(得分:2)

您可以将日志消息写入Logger Library的ScriptDB实例,并添加.write()方法,而不是在每条记录的消息(这是您的减速源)中写入文件。您的记录器将一次输出消息。您的记录器构造函数可以使用messageGroup参数,该参数可以作为您要编写的行的唯一标识符。这也允许您使用不同的文件来记录输出。

当您将消息构建到正确的输出以写入文件时(不要单独编写每一行,批处理操作是您的朋友),您可能希望从ScriptDB中删除该消息。但是,它也可能是退回旧日志的好地方。

您的消息对象可能如下所示:

{
  message: "My message",
  color: "red",
  messageGroup: "groupName",
  level: 25,
  timeStamp: new Date().getTime(), //ScriptDB won't take date objects natively
  loggingFile: "Document Key"
}

查询看起来像:

var db = ScriptDb.getMyDb();
var results = db.query({messageGroup: "groupName"}).sortBy("timeStamp",db.NUMERIC);