1

次のようにクエリパラメーターを取得する単純な Web アプリ (匿名ユーザーがアクセスできるように公開) を作成しました。

function doGet(e){Logger.log("Key is"+e.parameter.key);}

次のようにパラメーターをアプリに渡しました: https://script.google.com/macros/s/AKfycbxZ_r7tTs1sCQH9UOhPg2AVdWuMCDk6zD58lnsXciazRLmZ7q7P/exec?key=test

ログインしたユーザーとしてURLにアクセスし、パラメーターを取得できると、正常に機能します。しかし、匿名ユーザーが同じことをすると、データはログに記録されません。

出来ますか。これを達成する方法は?

4

1 に答える 1

3

ここで、問題の説明を少し調整します。Logger は、スクリプトの所有者 (たまたまログに記録されている) に対してのみ機能します。再確認しましたが、これは実際に動作です。テスト アカウントで別のログイン ユーザーとして単純な Web アプリにアクセスすることを確認しましたが、Logger はそのアカウントでも機能しませんでした。

これは、実際には現在ロガーの既知の制限です。

ロガーは、他の人がコードにアクセスしているときではなく、コードを書いているときのデバッグに役立ちます。ロガー情報も、異なる実行間で保持されません。

実際には、ログ ステートメントを単純なファイルに書き込むことになります。タイムスタンプなどの小さなものを追加すると、これをより堅牢にすることができます。必要に応じて、例外ログと有効なユーザー情報を追加することもできます。

これは、読者に残されているいくつかの演習で、私が通常これをどのように設定するかについてのいくつかのスニペットです.

一度実行する関数 -

function initLog() {
  //add check to see if log already exists so you don't init multiple times
  var logfile = DocsList.createFile('Log file for my script','') ;
  ScriptProperties.setProperty('LogFile', logfile.getId());
  logfile.getId();
}

コードのどこからでも呼び出すことができるユーティリティ関数 -

function logMsg(msg){
 //add more checks here to init log if its not already done
 var logfile = DocsList.getFileById(ScriptProperties.getProperty('LogFile'));
 logfile.append(new Date().toString() + ' - ' + msg + '\n');  
}

これがどのように機能するかを示すための簡単な構成のハーネス -

function logTests(){
 initLog();
 logMsg('hello world');
 logMsg('test message');
}

そして、これがどのように見えるかです。お役に立てれば。 ここに画像の説明を入力

于 2013-01-24T20:24:58.163 に答える