การบันทึก

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

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

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

  • อินเทอร์เฟซ Cloud Logging ใน Developer 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}`);
  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);
}

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

> [16-09-12 13:50:42:193 PDT] Emailing data row 2 to john@example.com
> [16-09-12 13:50:42:271 PDT] Row 2 data: Cost 103.24

Cloud Logging

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

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

Cloud Logging มีบริการต่างๆ นอกเหนือจากการจัดเก็บบันทึก เช่น การแจ้งเตือน และเมตริก บริการเหล่านี้ไม่พร้อมใช้งานจาก Apps Script

ใช้ Cloud Logging

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

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

หากคุณใช้รันไทม์ Rhino Cloud Logging จะไม่รองรับบริการ Apps Script Logger แต่ให้ใช้บริการ console แทน

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

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

ตัวอย่างต่อไปนี้แสดงวิธีใช้บริการ console เพื่อบันทึกข้อมูลใน Cloud Operations

utils/logging.gs
/**
 * A placeholder function to be timed.
 * @param {Object} parameters
 */
function myFunction(parameters) {
  // Placeholder for the function being timed.
}

/**
 * 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 โดยไม่ต้องเปิดเผยตัวตนของผู้ใช้เหล่านั้น คีย์จะขึ้นอยู่กับ สคริปต์และจะเปลี่ยนประมาณเดือนละครั้งเพื่อเพิ่มความปลอดภัยในกรณีที่ ผู้ใช้เปิดเผยตัวตนของตนเองแก่นักพัฒนาแอป เช่น ขณะรายงานปัญหา

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

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

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

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

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

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

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

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

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

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

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

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

Error Reporting

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

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

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

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