লগিং

যেকোনো ধরনের অ্যাপ তৈরি করার সময়, ডেভেলপমেন্ট চলাকালীন ত্রুটি নির্ণয় করতে, গ্রাহকের সমস্যা শনাক্ত ও নির্ণয় করতে এবং অন্যান্য উদ্দেশ্যে তথ্য লগ করুন।

গুগল অ্যাপস স্ক্রিপ্ট লগিংয়ের জন্য তিনটি ভিন্ন পদ্ধতি প্রদান করে:

  • অন্তর্নির্মিত অ্যাপস স্ক্রিপ্ট এক্সিকিউশন লগ । এই লগটি হালকা এবং রিয়েল টাইমে স্ট্রিম হয়, কিন্তু এটি কেবল অল্প সময়ের জন্য স্থায়ী থাকে।

  • ডেভেলপার কনসোলের ক্লাউড লগিং ইন্টারফেস, যা এমন লগ সরবরাহ করে যা তৈরি হওয়ার পর বহু দিন পর্যন্ত স্থায়ী থাকে।

  • ডেভেলপার কনসোলের এরর রিপোর্টিং ইন্টারফেস, যা আপনার স্ক্রিপ্ট চলার সময় ঘটা ত্রুটিগুলো সংগ্রহ ও রেকর্ড করে।

নিম্নলিখিত বিভাগগুলিতে এগুলি বর্ণনা করা হয়েছে। এই পদ্ধতিগুলি ছাড়াও, আপনার নিজস্ব লগার কোড তৈরি করুন যা, উদাহরণস্বরূপ, একটি লগিং স্প্রেডশিট বা JDBC ডেটাবেসে তথ্য লেখে।

অ্যাপস স্ক্রিপ্ট এক্সিকিউশন লগ ব্যবহার করুন

অ্যাপস স্ক্রিপ্টে লগিং করার একটি সাধারণ পদ্ধতি হলো বিল্ট-ইন এক্সিকিউশন লগ ব্যবহার করা। এই লগগুলো দেখতে, এডিটরের উপরে থাকা ‘এক্সিকিউশন লগ’-এ ক্লিক করুন। যখন আপনি কোনো ফাংশন রান করেন বা ডিবাগার ব্যবহার করেন, তখন লগগুলো রিয়েল টাইমে স্ট্রিম হতে থাকে।

Use either the Logger or console logging services in the built-in execution log.

এই লগগুলো ডেভেলপমেন্ট ও ডিবাগিংয়ের সময় যাচাইয়ের জন্য ব্যবহৃত হয় এবং এগুলো খুব বেশিদিন স্থায়ী হয় না।

উদাহরণস্বরূপ এই ফাংশনটি বিবেচনা করুন:

/**
 * 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

ক্লাউড লগিং

অ্যাপস স্ক্রিপ্ট গুগল ক্লাউড ক্লাউড লগিং পরিষেবাতেও আংশিক অ্যাক্সেস প্রদান করে। যখন আপনার বেশ কয়েক দিন ধরে স্থায়ী লগিং প্রয়োজন হয়, অথবা একাধিক ব্যবহারকারীযুক্ত প্রোডাকশন এনভায়রনমেন্টের জন্য আরও জটিল লগিং সমাধানের প্রয়োজন হয়, তখন ক্লাউড লগিংই হলো পছন্দের বিকল্প। ডেটা ধারণক্ষমতা এবং অন্যান্য কোটার বিবরণের জন্য ক্লাউড লগিং কোটা এবং সীমা দেখুন।

আরও লগিং কোটা অনুরোধ করতে, একটি গুগল ক্লাউড কোটা অনুরোধ জমা দিন । এর জন্য আপনার স্ক্রিপ্ট যে ক্লাউড প্ল্যাটফর্ম প্রজেক্টটি ব্যবহার করে, সেটিতে আপনার অ্যাক্সেস থাকা আবশ্যক।

ক্লাউড লগিং লগ সংরক্ষণের বাইরেও অ্যালার্ট এবং মেট্রিক্সের মতো বেশ কিছু পরিষেবা প্রদান করে। এই পরিষেবাগুলো অ্যাপস স্ক্রিপ্ট থেকে পাওয়া যায় না।

ক্লাউড লগিং ব্যবহার করুন

ক্লাউড লগগুলি আপনার অ্যাপস স্ক্রিপ্টের সাথে যুক্ত গুগল ক্লাউড প্রজেক্টের সাথে সংযুক্ত থাকে। এই লগগুলির একটি সরলীকৃত সংস্করণ অ্যাপস স্ক্রিপ্ট ড্যাশবোর্ডে দেখুন।

ক্লাউড লগিং এবং এর সক্ষমতাগুলোর পূর্ণ সদ্ব্যবহার করতে, আপনার স্ক্রিপ্ট প্রজেক্টের সাথে একটি স্ট্যান্ডার্ড গুগল ক্লাউড প্রজেক্ট ব্যবহার করুন। এর ফলে আপনি সরাসরি গুগল ক্লাউড কনসোলে ক্লাউড লগগুলো অ্যাক্সেস করতে পারবেন এবং এটি আপনাকে আরও বেশি দেখার ও ফিল্টার করার সুবিধা দেবে।

আপনি যদি রাইনো রানটাইম ব্যবহার করেন, তাহলে ক্লাউড লগিং অ্যাপস স্ক্রিপ্ট Logger সার্ভিসটিকে সাপোর্ট করে না। এর পরিবর্তে, console সার্ভিসটি ব্যবহার করুন।

লগ করার সময়, ব্যবহারকারীর কোনো ব্যক্তিগত তথ্য, যেমন ইমেল ঠিকানা, রেকর্ড করা থেকে বিরত থাকা একটি উত্তম গোপনীয়তা অনুশীলন। প্রয়োজনে কোনো নির্দিষ্ট ব্যবহারকারীর লগ বার্তা খুঁজে বের করার জন্য ক্লাউড লগগুলো স্বয়ংক্রিয়ভাবে সক্রিয় ব্যবহারকারী কী (key) দ্বারা লেবেল করা হয়।

অ্যাপস স্ক্রিপ্ট console পরিষেবা দ্বারা প্রদত্ত ফাংশনগুলি ব্যবহার করে স্ট্রিং, ফরম্যাট করা স্ট্রিং এবং এমনকি JSON অবজেক্টও লগ করুন।

নিম্নলিখিত উদাহরণটি দেখায় কিভাবে ক্লাউড অপারেশন্সে তথ্য লগ করতে console পরিষেবা ব্যবহার করতে হয়।

/**
 * 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.
}

সক্রিয় ব্যবহারকারী কী

অস্থায়ী সক্রিয় ব্যবহারকারী কী-গুলি ব্যবহারকারীদের পরিচয় প্রকাশ না করেই ক্লাউড লগ এন্ট্রি থেকে স্বতন্ত্র ব্যবহারকারীদের শনাক্ত করার একটি সুবিধাজনক উপায় প্রদান করে। কী-গুলি স্ক্রিপ্ট-ভিত্তিক এবং প্রায় প্রতি মাসে একবার পরিবর্তিত হয়, যাতে কোনো ব্যবহারকারী কোনো ডেভেলপারের কাছে তার পরিচয় প্রকাশ করলে (উদাহরণস্বরূপ, কোনো সমস্যা জানানোর সময়) অতিরিক্ত নিরাপত্তা নিশ্চিত করা যায়।

ইমেল ঠিকানার মতো লগিং শনাক্তকারীর চেয়ে অস্থায়ী সক্রিয় ব্যবহারকারী কীগুলি শ্রেয়তর, কারণ:

  • আপনার লগিং-এ নতুন করে কিছু যোগ করার প্রয়োজন নেই; সেগুলো আগে থেকেই সেখানে আছে!
  • এগুলোর জন্য ব্যবহারকারীর অনুমোদনের প্রয়োজন নেই।
  • তারা ব্যবহারকারীর গোপনীয়তা রক্ষা করে।

আপনার ক্লাউড লগ এন্ট্রিগুলিতে অস্থায়ী সক্রিয় ইউজার কী খুঁজে পেতে, গুগল ক্লাউড কনসোলে আপনার ক্লাউড লগগুলি দেখুন । এটি কেবল তখনই করুন, যদি আপনার স্ক্রিপ্ট প্রজেক্টটি এমন একটি স্ট্যান্ডার্ড গুগল ক্লাউড প্রজেক্ট ব্যবহার করে যেখানে আপনার অ্যাক্সেস আছে। কনসোলে গুগল ক্লাউড প্রজেক্টটি খোলার পর, আপনার প্রয়োজনীয় একটি লগ এন্ট্রি নির্বাচন করুন এবং মেটাডেটা > লেবেল > script.googleapis.com/user_key দেখতে সেটিকে এক্সপ্যান্ড করুন।

অস্থায়ী সক্রিয় ব্যবহারকারীর কী (key) পেতে, আপনার স্ক্রিপ্টে Session.getTemporaryActiveUserKey কল করুন। এই পদ্ধতিটি ব্যবহার করার একটি উপায় হলো, ব্যবহারকারী যখন আপনার স্ক্রিপ্টটি চালাচ্ছেন, তখন তাকে কী-টি প্রদর্শন করা। এর ফলে, সমস্যা রিপোর্ট করার সময় ব্যবহারকারীরা তাদের কী অন্তর্ভুক্ত করতে পারেন, যা আপনাকে প্রাসঙ্গিক লগগুলি শনাক্ত করতে সাহায্য করবে।

ব্যতিক্রম লগিং

এক্সেপশন লগিং আপনার স্ক্রিপ্ট প্রজেক্ট কোডের অনিয়ন্ত্রিত এক্সেপশনগুলোকে একটি স্ট্যাক ট্রেস সহ ক্লাউড লগিং-এ পাঠিয়ে দেয়।

ব্যতিক্রম লগ দেখতে, এই ধাপগুলো অনুসরণ করুন:

  1. অ্যাপস স্ক্রিপ্ট প্রজেক্টটি খুলুন।
  2. বাম দিকে, Executions ক্লিক করুন।
  3. উপরে, ফিল্টার যোগ করুন > স্ট্যাটাস-এ ক্লিক করুন।
  4. ব্যর্থ এবং সময়সীমা উত্তীর্ণ চেকবক্সগুলো নির্বাচন করুন।

আপনার স্ক্রিপ্ট প্রজেক্টটি যদি এমন কোনো স্ট্যান্ডার্ড গুগল ক্লাউড প্রজেক্ট ব্যবহার করে, যেটিতে আপনার অ্যাক্সেস আছে, তাহলে লগ করা এক্সেপশনগুলো গুগল ক্লাউড কনসোলে দেখুন।

ব্যতিক্রম লগিং সক্ষম করুন

নতুন প্রোজেক্টের জন্য এক্সেপশন লগিং ডিফল্টরূপে সক্রিয় থাকে। পুরোনো প্রোজেক্টের জন্য এক্সেপশন লগিং সক্রিয় করতে, এই ধাপগুলো অনুসরণ করুন:

  1. স্ক্রিপ্ট প্রজেক্টটি খুলুন।
  2. বাম দিকে, প্রজেক্ট ক্লিক করুন।
  3. ‘Log uncaught exceptions to Cloud Operations’ চেকবক্সটি নির্বাচন করুন।

ত্রুটি প্রতিবেদন

এক্সেপশন লগিং স্বয়ংক্রিয়ভাবে ক্লাউড এরর রিপোর্টিং-এর সাথে সংযুক্ত হয়, যা আপনার স্ক্রিপ্টে তৈরি হওয়া ত্রুটিগুলো সংগ্রহ করে এবং প্রদর্শন করে। গুগল ক্লাউড কনসোলে আপনার ক্লাউড এরর রিপোর্টগুলো দেখুন। আপনাকে ম্যানুয়ালি এরর রিপোর্টিং কনফিগার করতে বা ট্রেস এন্ট্রি তৈরি করতে হবে না। যখন কোনো এক্সেপশন থ্রো করা হয় অথবা যখন আপনি একটি Error অবজেক্টের সাথে console.error ব্যবহার করেন, তখন অ্যাপস স্ক্রিপ্ট স্বয়ংক্রিয়ভাবে প্রয়োজনীয় ফিল্ডগুলো পূরণ করে দেয়। যদি আপনাকে "এরর রিপোর্টিং সেট আপ করুন" (Set up Error Reporting) করতে বলা হয়, তার কারণ হলো আপনার স্ক্রিপ্ট এখনও কোনো এক্সেপশন লগ করেনি। এক্সেপশন লগিং চালু করা ছাড়া আর কোনো সেটআপের প্রয়োজন নেই।

লগিং প্রয়োজনীয়তা

অন্তর্নির্মিত এক্সিকিউশন লগ ব্যবহার করার জন্য কোনো পূর্বশর্ত নেই।

অ্যাপস স্ক্রিপ্ট ড্যাশবোর্ডে ক্লাউড লগের একটি সরলীকৃত সংস্করণ দেখুন। তবে, ক্লাউড লগিং এবং ত্রুটি রিপোর্টিংয়ের সম্পূর্ণ সুবিধা নিতে হলে আপনার স্ক্রিপ্টটির গুগল ক্লাউড প্রজেক্টে অ্যাক্সেস থাকতে হবে। এটি কেবল তখনই সম্ভব, যদি আপনার স্ক্রিপ্ট প্রজেক্টটি একটি স্ট্যান্ডার্ড গুগল ক্লাউড প্রজেক্ট ব্যবহার করে।