In ra bảng điều khiển trong Google Apps Script?


87

Tôi là người mới lập trình (đã tham gia một số khóa học JS trên Codecademy). Tôi đang cố gắng tạo một tập lệnh đơn giản để xác định, nếu được cung cấp một bảng tính có kết quả từ trò chơi poker, ai sẽ trả cho ai. Tôi đã mở Google Apps Script và viết những điều sau để bắt đầu:

function addplayerstoArray(numplayers) {

  var playerArray = [];

  for (i=0; i<numplayers; i++) {
    playerArray.push(i);
  }
}  

addplayerstoArray(7);

console.log(playerArray[3])

Ý tưởng là tạo một mảng với tổng số người chơi trong đó. Khi chạy mã, tôi nghĩ rằng nó sẽ in "3" vào bảng điều khiển. Nhưng không có gì xảy ra. Nó nói rằng

"ReferenceError:" console "không được xác định."

A) Tôi không hiểu gì về cách bảng điều khiển Google Apps Script hoạt động liên quan đến việc in để tôi có thể xem liệu mã của mình có đạt được những gì tôi muốn không?

B) Có vấn đề với mã không?

Câu trả lời:


139

Bảng điều khiển không khả dụng vì mã đang chạy trên đám mây, không phải trong trình duyệt của bạn. Thay vào đó, hãy sử dụng lớp Logger do GAS cung cấp:

Logger.log(playerArray[3])

và sau đó xem kết quả trong IDE dưới Xem> Nhật ký ...

Dưới đây là một số tài liệu về ghi nhật ký bằng GAS .

Chỉnh sửa: 2017-07-20 Tập lệnh ứng dụng hiện cũng cung cấp tính năng Ghi nhật ký Stackdriver . Xem các nhật ký này trong trình chỉnh sửa tập lệnh trong View - Console Logs.


28
Điều này được thực hiện như thế nào khi viết hàm cho bảng tính? Tôi dường như không thể tìm thấy nơi đầu ra ghi nhật ký đi.
TechplexEngineer

4
Siêu hữu ích. Cảm ơn bạn! Bây giờ nếu chỉ có nhật ký được cập nhật trực tiếp và ở một vị trí xa để kiểm tra nhanh.
kevincoleman

1
Còn trong một mẫu HTML thì sao?
Trevor

1
Trong bảng tính, bạn có thể đưa đầu ra vào một cửa sổ bật lên với MsgBox hoặc trong một thanh bên với Sidebar. Bạn cũng có thể đặt nó trong trang tính ở một nơi khác.
vinnief

Đối với bảng tính, ghi nhật ký ở đây phù hợp với thư viện BetterLog
Igor Savinkin

17

Chỉ để xây dựng giải pháp hacky của vinnief ở trên, tôi sử dụng MsgBox như sau:

Browser.msgBox('BorderoToMatriz', Browser.Buttons.OK_CANCEL);

và nó hoạt động giống như một điểm ngắt, dừng tập lệnh và xuất bất kỳ chuỗi nào bạn cần vào một hộp bật lên. Tôi thấy đặc biệt là trong Trang tính, nơi tôi gặp sự cố với Logger.log, điều này cung cấp một giải pháp thích hợp hầu hết các lần.


12

Mặc dù Logger.log()về mặt kỹ thuật là cách chính xác để xuất một thứ gì đó ra bảng điều khiển, nhưng nó có một số khó chịu:

  1. Đầu ra có thể là một mớ hỗn độn không có cấu trúc và khó tiêu hóa nhanh chóng.
  2. Trước tiên, bạn phải chạy tập lệnh, sau đó nhấp vào Xem / Nhật ký, đây là hai lần nhấp bổ sung (một lần nhấp nếu bạn nhớ phím tắt Ctrl + Enter).
  3. Bạn phải chèn Logger.log(playerArray), và sau khi gỡ lỗi, bạn có thể muốn xóa Logger.log(playerArray), do đó cần thêm 1-2 bước nữa.
  4. Bạn phải nhấp vào OK để đóng lớp phủ (thêm một lần nhấp nữa).

Thay vào đó, bất cứ khi nào tôi muốn gỡ lỗi điều gì đó, tôi thêm các điểm ngắt (nhấp vào số dòng) và nhấn nút Gỡ lỗi (biểu tượng lỗi). Các điểm ngắt hoạt động tốt khi bạn gán một thứ gì đó cho một biến, nhưng lại không tốt khi bạn đang khởi tạo một biến và muốn nhìn vào bên trong nó vào thời điểm sau, điều này tương tự như những gì op đang cố gắng thực hiện. Trong trường hợp này, tôi sẽ buộc một điều kiện ngắt bằng cách nhập "x" (x đánh dấu vị trí!) Để tạo ra lỗi thời gian chạy:

nhập mô tả hình ảnh ở đây

So sánh với việc xem Nhật ký:

nhập mô tả hình ảnh ở đây

Bảng điều khiển gỡ lỗi chứa nhiều thông tin hơn và dễ đọc hơn nhiều so với lớp phủ Nhật ký. Một lợi ích nhỏ với phương pháp này là bạn không bao giờ phải lo lắng về việc làm ô nhiễm mã của mình bằng một loạt các lệnh ghi nhật ký nếu việc giữ mã sạch là việc của bạn. Ngay cả khi bạn nhập "x", bạn buộc phải nhớ xóa nó như một phần của quá trình gỡ lỗi, nếu không mã của bạn sẽ không chạy (biện pháp dọn dẹp tích hợp, yay).


1
thêm vào xsẽ có cùng chức năng như thêmdebugger;
JSDBroughton, 29/09/17

Hoàn toàn đồng ý. Logger.log không hữu ích so với Gỡ lỗi.
Steve Gon,

10

Trả lời câu hỏi OP

A) Tôi không hiểu gì về cách bảng điều khiển Google Apps Script hoạt động liên quan đến việc in để tôi có thể xem liệu mã của mình có đạt được những gì tôi muốn không?

Mã trên tệp .gs của dự án Google Apps Script chạy trên máy chủ chứ không phải trên trình duyệt web. Cách ghi nhật ký tin nhắn là sử dụng Class Logger .

B) Có vấn đề với mã không?

Như thông báo lỗi đã nói, vấn đề consolelà không được xác định nhưng ngày nay cùng một mã sẽ gây ra lỗi khác:

ReferenceError: "playerArray" không được xác định. (dòng 12, tệp "Mã")

Đó là bởi vì playerArray được định nghĩa là biến cục bộ. Di chuyển dòng ra khỏi hàm sẽ giải quyết điều này.

var playerArray = [];

function addplayerstoArray(numplayers) {
  for (i=0; i<numplayers; i++) {
    playerArray.push(i);
  }
}  

addplayerstoArray(7);

console.log(playerArray[3])

Bây giờ mã thực thi mà không gặp lỗi, thay vào đó, để nhìn vào bảng điều khiển trình duyệt, chúng ta nên xem Ghi nhật ký Stackdriver. Từ giao diện người dùng của trình soạn thảo Google Apps Script, nhấp vào Xem> Ghi nhật ký Stackdriver .

Phụ lục

Vào năm 2017, Google đã phát hành cho tất cả các tập lệnh Stackdriver Logging và thêm Class Console, do đó, việc bao gồm một cái gì đó như console.log('Hello world!')sẽ không gây ra lỗi nhưng nhật ký sẽ có trên Google Cloud Platform Stackdriver Logging Service thay vì bảng điều khiển trình duyệt.

Từ Ghi chú phát hành Google Apps Script 2017

23 tháng 6, 2017

Tính năng Ghi nhật ký Stackdriver đã được chuyển ra khỏi Quyền truy cập sớm. Tất cả các tập lệnh hiện có quyền truy cập vào ghi nhật ký Stackdriver.

Từ Ghi nhật ký> Ghi nhật ký Stackdriver

Ví dụ sau đây cho thấy cách sử dụng dịch vụ bảng điều khiển để đăng nhập thông tin trong Stackdriver.

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 "structPayload".
  var parameters = {
      isValid: true,
      content: 'some string',
      timestamp: new Date()
  };
  console.log({message: 'Function Input', initialData: parameters});

  var 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.
}

6

Trong một dự án tập lệnh của google, bạn có thể tạo tệp html (ví dụ: index.html) hoặc tệp gs (ví dụ: code.gs). Các tệp .gs được thực thi trên máy chủ và bạn có thể sử dụng Logger.log như @Peter Herrman mô tả. Tuy nhiên, nếu hàm được tạo trong tệp .html thì nó đang được thực thi trên trình duyệt của người dùng và bạn có thể sử dụng console.log. Bảng điều khiển trình duyệt Chrome có thể được xem bằng Ctrl Shift J trên Windows / Linux hoặc Cmd Opt J trên Mac

Nếu bạn muốn sử dụng Logger.log trên một file html bạn có thể sử dụng một scriptlet để gọi hàm Logger.log từ tập tin html. Để làm như vậy bạn sẽ chèn <? Logger.log (something)?> Thay thế thứ gì đó bằng bất cứ thứ gì bạn muốn ghi lại. Tập lệnh chuẩn, sử dụng cú pháp <? ...?>, thực thi mã mà không xuất nội dung ra trang một cách rõ ràng.


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.