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


87

저는 프로그래밍에 익숙하지 않습니다 (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) 코드에 문제가 있습니까?

답변:


139

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

Logger.log(playerArray[3])

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

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

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


27
스프레드 시트 용 함수를 작성할 때 어떻게 수행됩니까? 로깅 출력이 어디로 가는지 찾을 수없는 것 같습니다.
TechplexEngineer

4
매우 유용합니다. 감사합니다! 이제 로그 만 실시간 업데이트되고 빠른 테스트를 위해 비정상적인 위치에있는 경우.
kevincoleman

1
HTML 템플릿은 어떻습니까?
트레버

1
스프레드 시트에서 MsgBox를 사용하여 팝업에 출력하거나 사이드 바가있는 사이드 바에 출력 할 수 있습니다. 당신은 또한 방해 장소에 시트에 넣을 수 있습니다.
vinnief

여기에 로그인 스프레드 시트에 맞는 BetterLog 라이브러리
이고르 Savinkin

17

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

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

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


12

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

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

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

여기에 이미지 설명 입력

로그보기와 비교 :

여기에 이미지 설명 입력

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


1
추가하면 x추가하는 것과 동일한 기능 것debugger;
JSDBroughton

전적으로 동의합니다. Logger.log는 Debug에 비해 유용하지 않습니다.
Steve Gon

10

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

6

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)?> 로그하려는 항목으로 대체합니다. <? 구문을 사용하는 표준 스크립틀릿 ...?>, 페이지에 콘텐츠를 명시 적으로 출력하지 않고 코드를 실행합니다.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.