1

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

这将需要:

  • 能够定义一次日志库(在主文件中)并以某种方式在附加的库中访问它。不过,我似乎找不到从库中关闭主要项目的方法。
  • 某种单例记录器对象。不确定这是否可以通过图书馆实现,无论哪种方式我都无法弄清楚。
  • 扩展内置记录器以满足我的需要,但不确定......

我的项目如下:

主要项目

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

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

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

谢谢!

4

1 回答 1

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);
于 2013-06-24T13:45:35.077 回答