2013-06-24 29 views
1

我在使用多个库的Apps脚本中有一个项目。该项目需要一个更复杂的记录器(日志级别,颜色编码),所以我写了一个输出到谷歌文档。如果我立即将输出结果打印到Google文档,那么当我单独将所有库中的记录器导入时,所有这一切都很好。但是我注意到,在做大量日志记录时,需要比没有更长的时间。因此,我正在寻找一种方法,在主脚本结束时最后一次写入所有输出。使用单个日志记录库记录不同的项目库

这就要求之一:

  • 如果能够(在主文件)中定义一次日志库和附属库莫名其妙访问此。我似乎无法找到让图书馆内部的主要项目关闭的方法。
  • 某种单身记录器对象。不知道这是否可以从图书馆,我无法找出任何方式。
  • 扩展内置记录仪,以满足我的需求,不知道虽然...

我的项目着眼于如下:

主项目

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

这是我如何使用我目前的记录:

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

谢谢!

回答

2

而不是在每一个登录信息写入到文件(这是你的速度慢下来的来源),你可以写你的日志消息记录仪图书馆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); 
+0

哇,伟大的答案!我根本没有想到ScriptDB。更好的是,我可以查询我的日志。不过,我还不知道messageGroup的目的,你能举一个你会在那里存储信息的例子吗? –

+1

我的初始虽然是'messageGroup'会问作为一个记录器实例变量。它可以用很多方式使用:您可能会为每次运行存储一个唯一的值,并在所有库中使用相同的组。 (为你的库添加一个'init'类型的函数。)或者每个库可能有一个'messageGroup',然后通过run start(在构造函数中设置)进行查询。你甚至可以在每个函数中创建一个记录器的新实例并实现很好的粒度。我实际上只是建议在日志消息之外加入一些数据,以使记录器更加灵活。 – fooby

+0

注意:ScriptDB已于2014年5月15日弃用 –