Ghi nhật ký

Khi phát triển bất cứ loại ứng dụng nào, bạn thường muốn ghi nhật ký thông tin để trợ giúp chẩn đoán lỗi trong quá trình phát triển, để xác định và chẩn đoán vấn đề của khách hàng, và cho các mục đích khác.

Apps Script cung cấp 3 cơ chế khác nhau để ghi nhật ký:

  • Nhật ký thực thi Apps Script tích hợp sẵn. Nhật ký này gọn nhẹ và truyền trực tuyến trong thời gian thực, nhưng chỉ tồn tại trong một khoảng thời gian trong một khoảng thời gian ngắn.

  • Giao diện Cloud Logging trong Developer Console, cung cấp nhật ký tồn tại trong nhiều ngày sau khi sáng tạo.

  • Giao diện Báo cáo lỗi trong Play Console. Tính năng này thu thập và ghi lại các lỗi xảy ra trong khi tập lệnh của bạn đang chạy.

Những cách này được mô tả trong các phần sau. Ngoài các cơ chế này, bạn cũng có thể tạo mã trình ghi nhật ký của riêng mình, chẳng hạn như ghi thông tin vào một bảng tính ghi nhật ký hoặc cơ sở dữ liệu JDBC.

Sử dụng nhật ký thực thi Apps Script

Phương pháp cơ bản để ghi nhật ký vào Apps Script là sử dụng lệnh tích hợp sẵn nhật ký thực thi. Để xem những nhật ký này, ở trên cùng của trình chỉnh sửa, hãy nhấp vào Nhật ký thực thi. Khi bạn chạy một hàm hoặc sử dụng trình gỡ lỗi, luồng nhật ký theo thời gian thực.

Bạn có thể sử dụng Logger hoặc dịch vụ ghi nhật ký của console trong nhật ký thực thi tích hợp sẵn.

Các nhật ký này dùng để kiểm tra đơn giản trong quá trình phát triển và gỡ lỗi, và không duy trì quá lâu.

Ví dụ: hãy xem xét hàm này:

utils/logging.gs
/**
 * Logs Google Sheet information.
 * @param {number} rowNumber The spreadsheet row number.
 * @param {string} email The email to send with the row data.
 */
function emailDataRow(rowNumber, email) {
  console.log('Emailing data row ' + rowNumber + ' to ' + email);
  try {
    const sheet = SpreadsheetApp.getActiveSheet();
    const data = sheet.getDataRange().getValues();
    const rowData = data[rowNumber - 1].join(' ');
    console.log('Row ' + rowNumber + ' data: ' + rowData);
    MailApp.sendEmail(email, 'Data in row ' + rowNumber, rowData);
  } catch (err) {
    // TODO (developer) - Handle exception
    console.log('Failed with error %s', err.message);
  }
}

Khi tập lệnh này chạy với thông tin đầu vào "2" và "john@example.com" thời gian các nhật ký sau được ghi:

[16-09-12 13:50:42:193 PDT] Gửi email hàng dữ liệu 2 tới john@example.com
[16-09-12 13:50:42:271 PDT] Dữ liệu của hàng 2: Chi phí 103,24

Cloud Logging

Apps Script cũng cấp quyền truy cập một phần vào Google Cloud Platform (GCP) Cloud Logging (Ghi nhật ký trên đám mây). Khi yêu cầu ghi nhật ký vẫn tồn tại trong vài ngày hoặc cần một quy trình ghi nhật ký phức tạp hơn cho môi trường sản xuất nhiều người dùng, Cloud Logging là giải pháp được ưu tiên lựa chọn. Xem các hạn mức và giới hạn của tính năng Ghi nhật ký trên đám mây để giữ lại dữ liệu và các chi tiết khác về hạn mức.

Nếu cần thêm hạn mức ghi nhật ký, bạn có thể gửi yêu cầu hạn mức Google Cloud Platform. Để làm được như vậy, bạn phải có quyền truy cập vào Dự án Cloud Platform mà tập lệnh của bạn sử dụng.

Sử dụng tính năng ghi nhật ký trên đám mây

Nhật ký trên đám mây được đính kèm với dự án Google Cloud được liên kết với Apps Script của bạn. Bạn có thể xem phiên bản đơn giản của các báo cáo này đăng nhập vào trang tổng quan Apps Script.

Để tận dụng tối đa tính năng Ghi nhật ký trên đám mây và các tính năng của tính năng này, hãy sử dụng dự án chuẩn trên Google Cloud với dự án tập lệnh của bạn. Việc này cho phép bạn truy cập vào nhật ký Cloud ngay trong Bảng điều khiển GCP đồng thời cung cấp cho bạn nhiều tuỳ chọn xem và lọc hơn.

Khi ghi nhật ký, tốt nhất là bạn nên tránh ghi âm thông tin về người dùng, chẳng hạn như địa chỉ email. Nhật ký đám mây được tự động gắn nhãn với khoá người dùng đang hoạt động bạn có thể dùng để xác định thông điệp nhật ký của một người dùng cụ thể khi cần.

Bạn có thể ghi nhật ký các chuỗi, chuỗi được định dạng và thậm chí cả đối tượng JSON bằng cách sử dụng các hàm do Apps Script cung cấp Dịch vụ console.

Ví dụ sau đây trình bày cách sử dụng console để ghi thông tin trong Cloud Operations.

utils/logging.gs
/**
 * Logs the time taken to execute 'myFunction'.
 */
function measuringExecutionTime() {
  // A simple INFO log message, using sprintf() formatting.
  console.info('Timing the %s function (%d arguments)', 'myFunction', 1);

  // Log a JSON object at a DEBUG level. The log is labeled
  // with the message string in the log viewer, and the JSON content
  // is displayed in the expanded log structure under "jsonPayload".
  const parameters = {
    isValid: true,
    content: 'some string',
    timestamp: new Date()
  };
  console.log({message: 'Function Input', initialData: parameters});
  const label = 'myFunction() time'; // Labels the timing log entry.
  console.time(label); // Starts the timer.
  try {
    myFunction(parameters); // Function to time.
  } catch (e) {
    // Logs an ERROR message.
    console.error('myFunction() yielded an error: ' + e);
  }
  console.timeEnd(label); // Stops the timer, logs execution duration.
}

Khoá người dùng đang hoạt động

Khoá tạm thời của người dùng đang hoạt động giúp thuận tiện để xác định người dùng riêng biệt Nhập nhật ký đám mây mà không tiết lộ danh tính của những người dùng đó. Khoá theo mỗi tập lệnh và thay đổi khoảng một lần mỗi tháng để tăng cường bảo mật khi người dùng tiết lộ danh tính của họ cho nhà phát triển, chẳng hạn như trong khi báo cáo sự cố.

Khoá người dùng đang hoạt động tạm thời vượt trội hơn so với giá trị nhận dạng ghi nhật ký như email vì:

  • Bạn không phải thêm gì vào nhật ký của mình; thì họ đã có mặt trên Google!
  • Chúng không yêu cầu sự cho phép của người dùng.
  • Chúng bảo vệ quyền riêng tư của người dùng.

Cách tìm khoá người dùng đang hoạt động tạm thời trong các mục nhập của Nhật ký trên đám mây: xem nhật ký Cloud của bạn trong bảng điều khiển Google Cloud. Bạn chỉ có thể thực hiện việc này nếu dự án tập lệnh của bạn đang sử dụng dự án chuẩn trên Google Cloud mà bạn có quyền truy cập. Sau khi mở dự án Google Cloud trong bảng điều khiển, chọn một mục nhập nhật ký bạn quan tâm và mở rộng mục đó để xem siêu dữ liệu > nhãn > script.googleapis.com/user_key.

Bạn cũng có thể nhận khoá tạm thời của người dùng đang hoạt động bằng cách gọi Session.getTemporaryActiveUserKey() trong tập lệnh của bạn. Một cách để sử dụng phương thức này là hiển thị khoá cho người dùng trong khi chạy tập lệnh của bạn. Sau đó, người dùng có thể chọn thêm khoá của họ khi báo cáo sự cố để giúp bạn xác định các nhật ký có liên quan.

Ghi nhật ký trường hợp ngoại lệ

Tính năng ghi nhật ký ngoại lệ sẽ gửi các ngoại lệ chưa được xử lý trong mã dự án tập lệnh của bạn đến tính năng Ghi nhật ký trên đám mây, cùng với dấu vết ngăn xếp.

Để xem nhật ký ngoại lệ, hãy làm theo các bước dưới đây:

  1. Mở dự án Apps Script.
  2. Ở bên trái, hãy nhấp vào biểu tượng Các lượt thực thi .
  3. Ở phía trên cùng, hãy nhấp vào Thêm bộ lọc > Trạng thái.
  4. Chọn các hộp đánh dấu Không thành côngHết thời gian chờ.

Bạn cũng có thể xem các trường hợp ngoại lệ đã ghi lại trong bảng điều khiển GCP nếu dự án tập lệnh của bạn đang sử dụng dự án Google Cloud chuẩn mà bạn có quyền truy cập.

Bật ghi nhật ký ngoại lệ

Tính năng ghi nhật ký ngoại lệ được bật theo mặc định cho các dự án mới. Để bật ngoại lệ Ghi nhật ký cho các dự án cũ hơn, hãy làm theo các bước bên dưới:

  1. Mở dự án tập lệnh.
  2. Ở bên trái, hãy nhấp vào Cài đặt dự án .
  3. Chọn hộp đánh dấu Ghi nhật ký ngoại lệ chưa nắm bắt vào Hoạt động trên đám mây.

Error Reporting

Tính năng ghi nhật ký ngoại lệ tự động tích hợp với Báo cáo lỗi trên đám mây, dịch vụ tổng hợp và hiển thị các lỗi xảy ra trong tập lệnh của bạn. Bạn có thể xem báo cáo lỗi của bạn trên Google Cloud trong bảng điều khiển Google Cloud. Nếu bạn được nhắc "Thiết lập báo cáo lỗi" điều này là do tập lệnh của bạn chưa ghi lại bất kỳ ngoại lệ nào. Không cần thiết lập gì ngoài bật tính năng ghi nhật ký ngoại lệ.

Yêu cầu ghi nhật ký

Không có yêu cầu nào đối với việc sử dụng nhật ký thực thi tích hợp sẵn.

Bạn có thể xem phiên bản đơn giản của nhật ký trên Cloud trong Trang tổng quan Apps Script. Tuy nhiên, để khai thác tối đa tính năng Ghi nhật ký trên đám mây và báo cáo lỗi mà bạn phải có quyền truy cập dự án GCP của tập lệnh. Điều này chỉ có thể nếu dự án tập lệnh của bạn đang sử dụng một dự án Google Cloud chuẩn.