Logging

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

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

หากต้องการใช้ Cloud Logging และความสามารถต่างๆ อย่างเต็มที่ ให้ใช้โปรเจ็กต์ Google Cloud มาตรฐานกับโปรเจ็กต์สคริปต์ ซึ่งช่วยให้คุณเข้าถึงบันทึกของ 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 ได้ง่ายโดยไม่เปิดเผยตัวตนของผู้ใช้เหล่านั้น โดยคีย์มีไว้สำหรับสคริปต์และเปลี่ยนประมาณเดือนละครั้งเพื่อให้ความปลอดภัยเพิ่มเติมในกรณีที่ผู้ใช้เปิดเผยตัวตนของตนต่อนักพัฒนาซอฟต์แวร์ เช่น ขณะรายงานปัญหา

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

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

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

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

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

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