【问题标题】:Stackdriver export to .txt or PDF on drive/mailStackdriver 导出到驱动器/邮件上的 .txt 或 PDF
【发布时间】:2018-10-04 11:48:48
【问题描述】:

我已经设置了一个脚本,它从电子表格中读取数据并根据这些数据发送电子邮件。

现在,我还将它设置为通过 stackdriver 进行一些简单的日志记录。

我想做的是将这些日志(在每次执行邮件脚本之后/结束时)导出到 .txt.pdf 文件,然后将其保存到特定的 Google Drive 文件夹或已通过邮件发送。

不幸的是,我似乎不知道如何做到这一点,或者它是否可行?

【问题讨论】:

  • 而使用支持getLogs()的原生Logger类不可行?

标签: google-apps-script google-api google-drive-api google-cloud-stackdriver


【解决方案1】:

如果您打算这样做,则无法编辑 Google 文档文件。您必须在本地创建 .txt 或 .pdf 文件,然后将文件上传到 Google 驱动器或以电子邮件的形式发送。从技术上讲,如果您将文件上传为 .txt,我认为 Google 驱动器将允许您将其导出为 pdf,但我尚未尝试使用新版本的 Google 驱动器。

var fileId = '1ZdR3L3qP4Bkq8noWLJHSr_iBau0DNT4Kli4SxNc2YEo';
var dest = fs.createWriteStream('/tmp/resume.pdf');
drive.files.export({
  fileId: fileId,
  mimeType: 'application/pdf'
})
    .on('end', function () {
      console.log('Done');
    })
    .on('error', function (err) {
      console.log('Error during download', err);
    })
    .pipe(dest);

Downloading google Documents

我也不认为您可以直接从 Google Drive 通过电子邮件发送文件,您必须在本地下载文件然后添加发送您的电子邮件。

【讨论】:

  • 您好,感谢您的回复。我忘了提及:脚本(apps 脚本)使用 GmailApp.sendEmail 命令发送邮件。我不知道我们是否在解释上处于同一条线上,但可以肯定的是:我想做的是获取日志文件/日志行,并将它们导出到一个文件(.txt of . pdf)然后,此文件应保存到 Google Drive,或由 MailApp 发送到某个邮件地址。发送文件不是问题,因为当前脚本已经从驱动器中获取文件并将它们添加为附件。唯一的问题是如何将日志导出到文件?
  • 据我所知,应用脚本只有在您有指向该文件的 url 链接时才能读取该文件 UrlFetchApp.fetch(url).getContentText();
  • 此答案包含错误信息。 Drive.Files.export() 不会接受对象作为参数。 Drive.Files.export(fileId, mimeType) 有两个参数。
【解决方案2】:

Stackdriver 有一个错误报告 API。 Documentation for Stackdriver API 具有 REST 功能,这意味着您可以使用 UrlFetchApp.fetch(url) 从 Apps 脚本调用它,其中 url 是获取错误报告信息所需的 url。 Stackdriver API 的基本 url 是:https://clouderrorreporting.googleapis.com API 必须启用。

API 可以使用多种方法。

你可能需要的方法是list方法,它需要url:

https://clouderrorreporting.googleapis.com/v1beta1/{projectName=projects/*}/events

其中projectName 参数必须是 Google Cloud Platform 项目 ID。

请参阅list 上的文档:projects.events.list

该 HTTPS 请求的返回值,如果成功,是具有以下结构和数据的“响应体”:

{
  "errorEvents": [
    {
      object (ErrorEvent)
    }
  ],
  "nextPageToken": string,
  "timeRangeBegin": string
}

ErrorEvent 是一个 JSON 对象,具有以下结构和数据:

{
  "eventTime": string,
  "serviceContext": {
    object (ServiceContext)
  },
  "message": string,
  "context": {
    object (ErrorContext)
  }
}

所以,如果您想从 Stackdriver 发送包含错误数据的电子邮件,它不会直接从 Stackdriver 发送,您需要从 Apps Script 向 Stackdriver 发出请求,获取错误信息,然后发送电子邮件来自 Apps 脚本。

当然,您可以拥有自己的错误处理系统,使用 UrlFetchApp.fetch(url); 将错误信息记录到某个外部目标(例如您的电子表格或数据库);

要向 Stackdriver API 发出请求,您需要如下代码:

var projectID = "Enter project ID";
var url = 'https://clouderrorreporting.googleapis.com/v1beta1/' + projectID 
 + '/events';
var tkn = ScriptApp.getOAuthToken();

var options = {};
options.headers = {Authorization: 'Bearer ' + tkn}
options.muteHttpExceptions = true;

var rtrnObj = UrlFetchApp.fetch(url,options);

Logger.log(rtrnObj.getContentText())

我没有使用过这个 API,也没有测试过这个代码。如果有人使用它,并且有信息或发现错误,请发表评论。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-18
    • 1970-01-01
    • 1970-01-01
    • 2017-08-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多