[logging] Google Apps Script에서 콘솔로 인쇄 하시겠습니까?

저는 프로그래밍에 익숙하지 않습니다 (Codecademy에서 일부 JS 과정을 수강했습니다). 포커 게임 결과가 포함 된 스프레드 시트가 주어지면 누가 지불해야하는지 간단한 스크립트를 작성하려고합니다. Google Apps Script를 열고 시작하기 위해 다음을 작성했습니다.

function addplayerstoArray(numplayers) {

  var playerArray = [];

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

addplayerstoArray(7);

console.log(playerArray[3])

아이디어는 총 플레이어 수로 배열을 만드는 것입니다. 코드를 실행할 때 콘솔에 “3”이 출력 될 것이라고 생각했습니다. 그러나 아무 일도 일어나지 않았습니다. 그것은 말했다

“ReferenceError :”콘솔 “이 정의되지 않았습니다.”

A) 내 코드가 내가 원하는 것을 수행하는지 확인할 수 있도록 인쇄와 관련하여 Google Apps Script 콘솔이 어떻게 작동하는지 이해하지 못하는 것은 무엇입니까?

B) 코드에 문제가 있습니까?



답변

코드가 브라우저가 아닌 클라우드에서 실행 중이므로 콘솔을 사용할 수 없습니다. 대신 GAS에서 제공 하는 Logger 클래스를 사용하세요 .

Logger.log(playerArray[3])

그런 다음보기> 로그 … 아래의 IDE에서 결과를 봅니다.

다음 은 GAS를 사용한 로깅 에 대한 몇 가지 문서입니다 .

수정 : 2017-07-20 Apps 스크립트는 이제 Stackdriver Logging 도 제공합니다 . 보기-콘솔 로그 아래의 스크립트 편집기에서 이러한 로그를 봅니다.


답변

위의 vinnief의 해키 솔루션을 구축하기 위해 다음과 같이 MsgBox를 사용합니다.

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

중단 점처럼 작동하고 스크립트를 중지하고 필요한 문자열을 팝업 상자에 출력합니다. 특히 Logger.log에 문제가있는 Sheets에서 대부분의 경우 적절한 해결 방법을 제공합니다.


답변

Logger.log()기술적으로 콘솔에 무언가를 출력하는 올바른 방법 이지만 몇 가지 성가심이 있습니다.

  1. 출력은 구조화되지 않은 엉망 일 수 있으며 빠르게 소화하기 어려울 수 있습니다.
  2. 먼저 스크립트를 실행 한 다음보기 / 로그를 클릭해야합니다. 두 번의 추가 클릭 (Ctrl + Enter 키보드 단축키를 기억하는 경우 한 번)입니다.
  3. 을 삽입해야하며 Logger.log(playerArray)디버깅 후를 제거하고 싶을 Logger.log(playerArray)것이므로 추가로 1-2 단계가 더 필요합니다.
  4. 오버레이를 닫으려면 확인을 클릭해야합니다 (또 다른 추가 클릭).

대신 디버깅을 원할 때마다 중단 점을 추가하고 (줄 번호를 클릭) 디버그 버튼 (버그 아이콘)을 누릅니다. 중단 점은 변수에 무언가를 할당 할 때 잘 작동하지만 변수를 시작하고 나중에 그 내부를 들여다보고 싶을 때는 잘 작동하지 않습니다. 이 경우 “x”(x는 지점을 표시합니다!)를 입력하여 중단 조건을 강제 실행하여 런타임 오류를 발생시킵니다.

여기에 이미지 설명 입력

로그보기와 비교 :

여기에 이미지 설명 입력

디버그 콘솔에는 더 많은 정보가 포함되어 있으며 로그 오버레이보다 읽기가 훨씬 쉽습니다. 이 방법의 한 가지 사소한 이점은 깨끗한 코드를 유지하는 것이 당신의 일이라면 많은 로깅 명령으로 코드를 오염시키는 것에 대해 걱정할 필요가 없다는 것입니다. “x”를 입력하더라도 디버깅 프로세스의 일부로 제거해야한다는 것을 기억해야합니다. 그렇지 않으면 코드가 실행되지 않습니다 (내장 된 정리 측정, 예).


답변

OP 질문에 답하기

A) 내 코드가 내가 원하는 것을 수행하는지 확인할 수 있도록 인쇄와 관련하여 Google Apps Script 콘솔이 어떻게 작동하는지 이해하지 못하는 것은 무엇입니까?

Google Apps Script 프로젝트의 .gs 파일에있는 코드는 웹 브라우저가 아닌 서버에서 실행됩니다. 메시지를 기록하는 방법은 Class Logger 를 사용하는 것 입니다.

B) 코드에 문제가 있습니까?

오류 메시지에서 말했듯이 문제는 console정의되지 않았지만 오늘날 동일한 코드가 다른 오류를 발생시킵니다.

ReferenceError : “playerArray”가 정의되지 않았습니다. (12 행, 파일 “Code”)

이는 playerArray가 지역 변수로 정의되기 때문입니다. 함수에서 줄을 이동하면이 문제가 해결됩니다.

var playerArray = [];

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

addplayerstoArray(7);

console.log(playerArray[3])

이제 코드가 오류없이 실행되므로 브라우저 콘솔 대신 Stackdriver Logging을 살펴 봐야합니다. Google Apps Script 편집기 UI에서 보기> Stackdriver Logging을 클릭합니다 .

추가

2017 년에 Google은 모든 스크립트 Stackdriver Logging을 출시하고 클래스 콘솔을 추가했습니다. 따라서 다음과 같은 것을 포함해도 console.log('Hello world!')오류가 발생하지 않지만 로그는 브라우저 콘솔이 아닌 Google Cloud Platform Stackdriver Logging Service에 있습니다.

에서 Google 애플리케이션 스크립트 릴리스 노트 2017

2017 년 6 월 23 일

Stackdriver Logging앞서 해보기 에서 이동되었습니다. 이제 모든 스크립트가 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.
}


답변

Google 스크립트 프로젝트에서 html 파일 (예 : index.html) 또는 gs 파일 (예 : code.gs)을 만들 수 있습니다. .gs 파일은 서버에서 실행되며 @Peter Herrman이 설명하는대로 Logger.log를 사용할 수 있습니다. 그러나 함수가 .html 파일로 생성되면 사용자의 브라우저에서 실행되고 console.log를 사용할 수 있습니다. Chrome 브라우저 콘솔은 Windows / Linux의 Ctrl Shift J 또는 Mac의 Cmd Opt J 로 수 있습니다 .

html 파일에서 Logger.log를 사용하려는 경우 스크립틀릿 을 사용 하여 html 파일에서 Logger.log 함수를 호출 할 수 있습니다 . 그렇게하려면 <? Logger.log (something)?> 로그하려는 항목으로 대체합니다. <? 구문을 사용하는 표준 스크립틀릿 …?>, 페이지에 콘텐츠를 명시 적으로 출력하지 않고 코드를 실행합니다.


답변

2020 년 업데이트

2020 년 2 월, Google 은 기본 제공 Google Apps Script IDE 의 주요 업그레이드 를 발표 했으며 이제 console.log ()를 지원합니다 . 따라서 이제 두 가지를 모두 사용할 수 있습니다.

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

즐거운 코딩 되세요!


답변