Logging

เมื่อพัฒนาแอปประเภทใด คุณมักต้องการบันทึกข้อมูลเพื่อช่วย วินิจฉัยข้อบกพร่องระหว่างการพัฒนา เพื่อระบุและวินิจฉัยปัญหาของลูกค้า และเพื่อวัตถุประสงค์อื่นๆ

Apps Script มีกลไก 3 แบบในการบันทึก ดังนี้

  • บันทึกการดำเนินการของ Apps Script ในตัว บันทึกนี้เป็นการบันทึกที่ง่ายดายและสตรีมในแบบเรียลไทม์ แต่จะแสดงได้ในระยะเวลาสั้นๆ เท่านั้น

  • อินเทอร์เฟซ Cloud Logging ใน Play Console ซึ่งให้บันทึกที่คงอยู่เป็นเวลาหลายวันหลังจากที่สร้าง

  • อินเทอร์เฟซการรายงานข้อผิดพลาดใน Developer Console ซึ่งเก็บรวบรวมและบันทึกข้อผิดพลาดที่เกิดขึ้นขณะที่สคริปต์ทำงานอยู่

ซึ่งอธิบายไว้ในส่วนต่อไปนี้ นอกเหนือจากกลไกเหล่านี้แล้ว คุณยังสร้างโค้ดบันทึกของคุณเองได้ด้วย เช่น เขียนข้อมูลลงในสเปรดชีตหรือฐานข้อมูล JDBC สำหรับการบันทึก

ใช้บันทึกการดำเนินการของ Apps Script

วิธีพื้นฐานในการลงชื่อเข้าสู่ระบบ Apps Script คือการใช้บันทึกการดำเนินการในตัว หากต้องการดูบันทึกเหล่านี้ ให้คลิกบันทึกการดำเนินการที่ด้านบนของตัวแก้ไข เมื่อคุณเรียกใช้ฟังก์ชันหรือใช้โปรแกรมแก้ไขข้อบกพร่อง ระบบจะสตรีมบันทึกแบบเรียลไทม์

คุณจะใช้บริการบันทึก Logger หรือ console ในบันทึกการดำเนินการในตัวได้

บันทึกเหล่านี้มีไว้เพื่อการตรวจสอบง่ายๆ ระหว่างการพัฒนาและการแก้ไขข้อบกพร่อง และจะคงอยู่เป็นระยะเวลานาน

ตัวอย่างเช่น ลองพิจารณาฟังก์ชันนี้

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);
  }
}

เมื่อเรียกใช้สคริปต์นี้กับอินพุต "2" และ "john@example.com" จะมีการเขียนบันทึกต่อไปนี้

[16-09-12 13:50:42:193 PDT] การส่งอีเมลแถว 2 ไปยัง john@example.com
[16-09-12 13:50:42:271 PDT] ข้อมูลแถว 2: ค่าใช้จ่าย 103.24

Cloud Logging

Apps Script ยังให้สิทธิ์เข้าถึงบริการ Cloud Logging ของ Google Cloud Platform (GCP) ได้บางส่วนด้วย เมื่อคุณต้องการให้บันทึกที่ต่อเนื่องเป็นเวลาหลายวัน หรือต้องการโซลูชันการบันทึกที่ซับซ้อนยิ่งขึ้นสำหรับสภาพแวดล้อมการใช้งานจริงที่มีผู้ใช้หลายคน เราขอแนะนำให้ใช้ Cloud Logging ดูโควต้าและขีดจำกัดของ Cloud Logging สำหรับการเก็บรักษาข้อมูลและรายละเอียดโควต้าอื่นๆ

หากต้องการโควต้าการบันทึกเพิ่มเติม ให้ส่งคำขอโควต้า Google Cloud Platform คุณต้องมีสิทธิ์เข้าถึงโปรเจ็กต์ Cloud Platform ที่สคริปต์ใช้

การใช้ Cloud Logging

บันทึกของ Cloud จะแนบอยู่กับโปรเจ็กต์ Google Cloud ที่เชื่อมโยงกับ Apps Script ของคุณ คุณดูบันทึกเวอร์ชันอย่างง่ายได้ในแดชบอร์ด Apps Script

ใช้โปรเจ็กต์ Google Cloud มาตรฐานกับโปรเจ็กต์สคริปต์เพื่อใช้ประโยชน์จาก Cloud Logging อย่างเต็มที่และความสามารถที่มี ซึ่งจะช่วยให้คุณเข้าถึงบันทึกของ Cloud ได้โดยตรงในคอนโซล GCP และมีตัวเลือกในการดูและการกรองมากขึ้น

เมื่อบันทึก เป็นแนวทางปฏิบัติด้านความเป็นส่วนตัวที่ดีในการหลีกเลี่ยงการบันทึกข้อมูลส่วนบุคคลใดๆ เกี่ยวกับผู้ใช้ เช่น อีเมล บันทึกของ Cloud จะมีป้ายกำกับโดยอัตโนมัติด้วยคีย์ผู้ใช้ที่ใช้งานอยู่ ซึ่งคุณจะใช้ค้นหาข้อความในบันทึกของผู้ใช้ที่ต้องการได้ เมื่อจำเป็น

คุณบันทึกสตริง สตริงที่มีการจัดรูปแบบ และแม้แต่ออบเจ็กต์ JSON ได้โดยใช้ฟังก์ชันที่บริการ Apps Script console มีให้

ตัวอย่างต่อไปนี้แสดงวิธีใช้บริการ console เพื่อบันทึกข้อมูลใน 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.
}

คีย์ผู้ใช้ที่ใช้งานอยู่

คีย์ผู้ใช้ที่ใช้งานอยู่ชั่วคราวช่วยให้คุณระบุผู้ใช้ที่ไม่ซ้ำในรายการ Cloud Log ได้โดยไม่เปิดเผยตัวตนของผู้ใช้ คีย์เป็นแบบต่อสคริปต์และจะเปลี่ยนแปลงประมาณเดือนละครั้งเพื่อเพิ่มความปลอดภัยในกรณีที่ผู้ใช้เปิดเผยตัวตนต่อนักพัฒนาซอฟต์แวร์ เช่น ขณะรายงานปัญหา

คีย์ผู้ใช้ที่ใช้งานอยู่ชั่วคราวดีกว่าตัวระบุการบันทึก เช่น อีเมล เนื่องจากสาเหตุต่อไปนี้

  • คุณไม่จำเป็นต้องเพิ่มอะไรลงในบันทึกของคุณ เพราะข้อมูลเหล่านี้จะมีให้ใช้งานแล้ว
  • ไม่จำเป็นต้องมีการให้สิทธิ์จากผู้ใช้
  • เพื่อคุ้มครองความเป็นส่วนตัวของผู้ใช้

หากต้องการค้นหาคีย์ผู้ใช้ที่ใช้งานอยู่ชั่วคราวในรายการบันทึก Cloud ให้ดูบันทึก Cloud ในคอนโซล Google Cloud คุณจะดำเนินการนี้ได้ก็ต่อเมื่อโปรเจ็กต์สคริปต์ใช้โปรเจ็กต์ Google Cloud มาตรฐานที่คุณมีสิทธิ์เข้าถึงเท่านั้น เมื่อเปิดโปรเจ็กต์ Google Cloud ในคอนโซลแล้ว ให้เลือกรายการบันทึกที่สนใจและขยายเพื่อดูข้อมูลเมตา > ป้ายกำกับ > Script.googleapis.com/user_key

นอกจากนี้ คุณยังรับคีย์ผู้ใช้ที่ใช้งานอยู่ชั่วคราวได้โดยเรียกใช้ Session.getTemporaryActiveUserKey() ในสคริปต์ วิธีหนึ่งในการใช้วิธีนี้คือการแสดงคีย์ต่อผู้ใช้ขณะที่ผู้ใช้เรียกใช้สคริปต์ จากนั้นผู้ใช้อาจเลือกรวมคีย์ของตนไว้ในการรายงานปัญหาเพื่อช่วยให้คุณระบุบันทึกที่เกี่ยวข้องได้

การบันทึกข้อยกเว้น

การบันทึกข้อยกเว้นจะส่งข้อยกเว้นที่ไม่มีการจัดการในโค้ดโปรเจ็กต์สคริปต์ไปยัง Cloud Logging พร้อมกับสแต็กเทรซ

หากต้องการดูบันทึกข้อยกเว้น ให้ทำตามขั้นตอนด้านล่าง

  1. เปิดโครงการ Apps Script
  2. คลิกการดำเนินการ ทางด้านซ้าย
  3. คลิกเพิ่มตัวกรอง > สถานะที่ด้านบน
  4. เลือกช่องทำเครื่องหมายไม่สำเร็จและหมดเวลา

นอกจากนี้ คุณยังดูข้อยกเว้นที่บันทึกไว้ในคอนโซล GCP ได้ด้วยหากโปรเจ็กต์สคริปต์ใช้โปรเจ็กต์ Google Cloud มาตรฐานที่คุณมีสิทธิ์เข้าถึง

เปิดใช้การบันทึกข้อยกเว้น

ระบบจะเปิดใช้การบันทึกข้อยกเว้นโดยค่าเริ่มต้นสำหรับโปรเจ็กต์ใหม่ หากต้องการเปิดใช้การบันทึกข้อยกเว้นสำหรับโปรเจ็กต์เก่า ให้ทำตามขั้นตอนต่อไปนี้

  1. เปิดโปรเจ็กต์สคริปต์
  2. คลิกการตั้งค่าโปรเจ็กต์ ทางด้านซ้าย
  3. เลือกช่องทำเครื่องหมายบันทึกข้อยกเว้นที่ตรวจไม่พบสำหรับ Cloud Operations

Error Reporting

การบันทึกข้อยกเว้นจะผสานรวมกับ Cloud Error Reporting โดยอัตโนมัติ ซึ่งเป็นบริการที่รวบรวมและแสดงข้อผิดพลาดที่เกิดขึ้นในสคริปต์ของคุณ คุณดูรายงานข้อผิดพลาดของระบบคลาวด์ได้ในคอนโซล Google Cloud หากคุณได้รับแจ้งให้ "ตั้งค่าการรายงานข้อผิดพลาด" เนื่องจากสคริปต์ของคุณยังไม่ได้บันทึกข้อยกเว้นใดๆ คุณไม่จำเป็นต้องตั้งค่าอะไรนอกจากการเปิดใช้การบันทึกข้อยกเว้น

ข้อกำหนดในการบันทึก

ไม่มีข้อกำหนดในการใช้บันทึกการดำเนินการในตัว

คุณดูบันทึกของ Cloud เวอร์ชันพื้นฐานได้ในแดชบอร์ด Apps Script อย่างไรก็ตาม คุณต้องมีสิทธิ์เข้าถึงโปรเจ็กต์ GCP ของสคริปต์เพื่อให้ได้รับประโยชน์สูงสุดจาก Cloud Logging และการรายงานข้อผิดพลาด ซึ่งจะเป็นไปได้เฉพาะเมื่อโปรเจ็กต์สคริปต์ของคุณใช้โปรเจ็กต์ Google Cloud มาตรฐานเท่านั้น