Google Apps स्क्रिप्ट में कंसोल पर मुद्रण?


89

मैं प्रोग्रामिंग के लिए बहुत नया हूं (कोडेक अकादमी पर जेएस पाठ्यक्रमों में से कुछ ले लिया है)। मैं यह निर्धारित करने के लिए एक सरल स्क्रिप्ट बनाने की कोशिश कर रहा हूं, अगर एक पोकर गेम के परिणामों के साथ एक स्प्रेडशीट दी जाए, तो किसे भुगतान करना चाहिए। मैंने Google Apps स्क्रिप्ट खोली, और आरंभ करने के लिए निम्नलिखित लिखा:

function addplayerstoArray(numplayers) {

  var playerArray = [];

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

addplayerstoArray(7);

console.log(playerArray[3])

विचार यह है कि इसमें कुल खिलाड़ियों की संख्या के साथ एक सरणी बनाई जाए। कोड चलाते समय, मुझे लगा कि यह कंसोल पर "3" प्रिंट करेगा। पर कुछ नहीं हुआ। यह कहा

"संदर्भ संदर्भ:" कंसोल "परिभाषित नहीं है।"

क) Google Apps Script कंसोल मुद्रण के संबंध में कैसे काम करता है, इसके बारे में मुझे क्या समझ में नहीं आता है ताकि मैं देख सकूं कि क्या मेरा कोड पूरा हो रहा है?

बी) यह कोड के साथ एक समस्या है?

जवाबों:


144

कंसोल उपलब्ध नहीं है क्योंकि कोड क्लाउड में चल रहा है, आपके ब्राउज़र में नहीं। इसके बजाय, GAS द्वारा प्रदान किए गए लकड़हारा वर्ग का उपयोग करें :

Logger.log(playerArray[3])

और फिर देखें> लॉग्स के तहत आईडीई में परिणाम देखें ...

यहां GAS के साथ लॉग इन करने पर कुछ दस्तावेज हैं ।

संपादित करें: 2017-07-20 ऐप स्क्रिप्ट अब स्टैकड्राइवर लॉगिंग भी प्रदान करता है । इन लॉग को स्क्रिप्ट एडिटर में देखें - कंसोल लॉग के तहत देखें।


28
स्प्रेडशीट के लिए फ़ंक्शन लिखते समय यह कैसे किया जाता है? मुझे नहीं लगता कि कहां लॉगिंग आउटपुट जाता है।
TechplexEngineer

4
सुपर सहायक। धन्यवाद! अब अगर केवल लॉग लाइव-अपडेट थे और त्वरित परीक्षण के लिए एक आउट-ऑफ-द-वे स्थान में।
केविनकोलेमैन

1
HTML टेम्पलेट के बारे में क्या है?
ट्रेवर

1
स्प्रैडशीट में, आप आउटपुट को MsgBox के साथ या साइडबार के साथ साइडबार में रख सकते हैं। आप इसे शीट में बाहर की जगह से भी डाल सकते हैं।
vinnief

स्प्रेडशीट के लिए यहां लॉगिंग लॉगरल लाइब्रेरी
इगोर

17

बस ऊपर vinnief हैकी समाधान पर बनाने के लिए, मैं इस तरह MsgBox का उपयोग करें:

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

और यह एक ब्रेक प्वाइंट की तरह थोड़े काम करता है, स्क्रिप्ट को रोकता है और पॉप-अप बॉक्स के लिए आपको जो भी स्ट्रिंग की आवश्यकता होती है उसे आउटपुट करता है। मैं विशेष रूप से शीट्स में पाता हूं, जहां मुझे लॉगर.लॉग से परेशानी होती है, यह ज्यादातर समय पर्याप्त लाभ प्रदान करता है।


12

भले ही Logger.log()तकनीकी रूप से कंसोल के लिए कुछ उत्पादन करने का सही तरीका है, इसमें कुछ झुंझलाहट हैं:

  1. आउटपुट एक असंरचित गड़बड़ हो सकता है और जल्दी से पचाने में मुश्किल हो सकता है।
  2. आपको पहले स्क्रिप्ट को चलाना होगा, फिर View / Logs पर क्लिक करना होगा, जो दो अतिरिक्त क्लिक हैं (एक यदि आपको Ctrl + Enter कीबोर्ड शॉर्टकट याद है)।
  3. आपको डालना है Logger.log(playerArray) , और फिर डिबगिंग के बाद आप संभवतः निकालना चाहेंगे Logger.log(playerArray), इसलिए अतिरिक्त 1-2 और चरण।
  4. आपको ओवरले को बंद करने के लिए ओके पर क्लिक करना होगा (फिर भी एक और अतिरिक्त क्लिक)।

इसके बजाय, जब भी मैं कुछ डिबग करना चाहता हूं तो मैं ब्रेकपॉइंट जोड़ता हूं (लाइन नंबर पर क्लिक करें) और डीबग बटन (बग आइकन) दबाएं। जब आप किसी चर को कुछ असाइन कर रहे होते हैं, तो ब्रेकप्वाइंट अच्छी तरह से काम करते हैं, लेकिन इतनी अच्छी तरह से नहीं जब आप एक चर की शुरुआत कर रहे हैं और बाद के बिंदु पर इसके अंदर झांकना चाहते हैं, जो कि op करने की कोशिश कर रहा है के समान है। इस स्थिति में, मैं एक रन-टाइम त्रुटि फेंकने के लिए "x" (x निशान द स्पॉट!) दर्ज करके ब्रेक की स्थिति को मजबूर करूंगा:

यहाँ छवि विवरण दर्ज करें

लॉग देखने के साथ तुलना करें:

यहाँ छवि विवरण दर्ज करें

डीबग कंसोल में अधिक जानकारी होती है और लॉग ओवरले की तुलना में पढ़ना बहुत आसान है। इस विधि के साथ एक मामूली लाभ यह है कि आपको कभी भी अपने कोड को प्रदूषित करने के बारे में चिंता करने की आवश्यकता नहीं है यदि लॉगिंग कमांड्स का एक गुच्छा है, तो स्वच्छ कोड रखना आपकी बात है। यहां तक ​​कि अगर आप "x" दर्ज करते हैं, तो आप इसे डिबगिंग प्रक्रिया के भाग के रूप में निकालने के लिए याद करने के लिए मजबूर हैं या फिर आपका कोड नहीं चलेगा (अंतर्निहित क्लीनअप उपाय, याय)।


1
जोड़ने के xलिए जोड़ने के रूप में एक ही कार्यक्षमता होगीdebugger;
JSDBroughton

पूर्णतया सहमत। डीबगर की तुलना में Logger.log उपयोगी नहीं है।
स्टीव गॉन

10

ओपी सवालों के जवाब दे रहा है

क) Google Apps Script कंसोल मुद्रण के संबंध में कैसे काम करता है, इसके बारे में मुझे क्या समझ में नहीं आता है ताकि मैं देख सकूं कि क्या मेरा कोड पूरा हो रहा है?

एक Google Apps स्क्रिप्ट प्रोजेक्ट की .gs फ़ाइलें वेब ब्राउज़र के बजाय सर्वर पर चलती हैं। संदेशों को लॉग करने का तरीका क्लास लॉगर का उपयोग करना था ।

बी) यह कोड के साथ एक समस्या है?

जैसा कि त्रुटि संदेश ने कहा, समस्या यह थी कि consoleपरिभाषित नहीं की गई थी, लेकिन आजकल एक ही कोड अन्य त्रुटि को फेंक देगा:

ReferenceError: "playerArray" परिभाषित नहीं है। (पंक्ति 12, फ़ाइल "कोड")

ऐसा इसलिए है क्योंकि playerArray को स्थानीय चर के रूप में परिभाषित किया गया है। फ़ंक्शन से बाहर की ओर ले जाने से यह हल हो जाएगा।

var playerArray = [];

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

addplayerstoArray(7);

console.log(playerArray[3])

अब जब कोड त्रुटियों को फेंकने के बिना निष्पादित होता है, तो ब्राउज़र कंसोल को देखने के बजाय हमें स्टैकड्राइवर लॉगिंग को देखना चाहिए। Google Apps स्क्रिप्ट एडिटर UI से View> Stackdriver Logging पर क्लिक करें ।

परिशिष्ट

2017 में Google ने सभी स्क्रिप्ट्स स्टैकड्राइवर लॉगिंग के लिए जारी किया और क्लास कंसोल को जोड़ा, इसलिए कुछ ऐसा शामिल है जिसमें console.log('Hello world!')कोई त्रुटि नहीं होगी लेकिन लॉग ब्राउज़र कंसोल के बजाय Google क्लाउड प्लेटफ़ॉर्म स्टैकड्राइवर लॉगिंग सेवा पर होगा।

से Google Apps स्क्रिप्ट रिलीज नोट्स 2017

23 जून, 2017

स्टैकड्राइवर लॉगिंग को प्रारंभिक पहुंच से बाहर कर दिया गया है। सभी लिपियों में अब स्टैकड्राइवर लॉगिंग की पहुंच है।

से लॉगिंग> Stackdriver लॉगिंग

निम्न उदाहरण दिखाता है कि 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

एक Google स्क्रिप्ट प्रोजेक्ट में आप html फाइल्स (उदाहरण: index.html) या gs फाइल्स बना सकते हैं (उदाहरण: code.gs)। .Gs फाइलें सर्वर पर निष्पादित की जाती हैं और आप @Peter Herrman के रूप में Logger.log का उपयोग कर सकते हैं। हालाँकि, यदि फ़ंक्शन एक .html फ़ाइल में बनाया गया है, तो इसे उपयोगकर्ता के ब्राउज़र पर निष्पादित किया जा रहा है और आप कंसोल का उपयोग कर सकते हैं। Chrome ब्राउज़र कंसोल को Windows / Linux पर Ctrl Shift J और Mac पर Cmd Opt J द्वारा देखा जा सकता है

यदि आप एक html फ़ाइल पर Logger.log का उपयोग करना चाहते हैं, तो आप HTML फ़ाइल से Logger.log फ़ंक्शन को कॉल करने के लिए एक स्क्रिप्टलेट का उपयोग कर सकते हैं । ऐसा करने के लिए आप इंसर्ट करेंगे <? Logger.log (कुछ)?> जो भी आप लॉग इन करना चाहते हैं उसके साथ कुछ बदलना। मानक स्क्रिप्टलेट, जो वाक्य रचना का उपयोग करते हैं <? ...?>, पृष्ठ पर सामग्री को स्पष्ट रूप से आउटपुट करने के बिना कोड निष्पादित करें।


2

2020 के लिए अद्यतन किया गया

2020 के फरवरी में, Google ने अंतर्निहित Google Apps स्क्रिप्ट IDE में एक प्रमुख अपग्रेड की घोषणा की , और यह अब कंसोल.लॉग () का समर्थन करता है । तो, अब आप दोनों का उपयोग कर सकते हैं:

  1. Logger.log ()
  2. console.log ()

हैप्पी कोडिंग!


console.logनिर्दिष्ट अपग्रेड से पहले समर्थित था ( मेरा उत्तर देखें )
रुबेन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.