プライベートスプレッドシートデータにアクセスできるパブリックWebアプリを作成しました。 intry..catch
で例外をキャッチしてログに記録できますが、
window.onerror
などの未処理の例外をすべてキャッチすることは可能ですか?これらは非常に単純な質問なので、質問するのは少し混乱していますが、数時間の調査の後、答えを見つけることができませんでした。
前もって感謝します。
これらは現在対処されている問題です。現在、Appsスクリプトの早期アクセスプログラムには、これらのケースを処理する2つの新しい追加機能があります。 1つは、stackdriverロギングとgoogle.script.run.withLogger()
の追加とのネイティブ統合です。
まず最初に、EAPを申請する必要があります。
https://developers.google.com/apps-script/guides/apps-script-eap
Stackdriverにログを記録するために、console
オブジェクトがサーバー側に追加されました。
code.gs
_console.log('This will log to stackdriver')
_
console
のすべてのメソッドのドキュメントをご覧ください。
https://developers.google.com/apps-script/guides/logging#stackdriver_logging
ドキュメントの例:
_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);
}
_
さらに、スクリプトプロパティで_Log Exceptions
_を確認することもできます。これにより、スクリプトでエラーが発生するたびにstackdriverエントリが生成されます。
Webアプリで障害から回復するには、_google.script.run
_オブジェクトにあるwithFailureHandler()
メソッドにアクセスできます。これにより、スクリプトが例外にヒットした場合にコールバックを登録できます。
完全なドキュメントは次の場所にあります。
https://developers.google.com/apps-script/guides/html/reference/run
_try...catch
_を使用してサーバー側のチェックを行っている場合、例外が発生する可能性がありますが、正常に処理されます。この場合、withFailureHandler()は実行されず、onSuccessHandler()はエラーを処理するのに最適な場所ではありません。 EAPには、_google.script.run
_へのwithLogger
メソッドがあります。現時点では、google.script.run.withLogger()
のドキュメントはありません。 devtoolsを掘り下げて見つけました。 withLogger()
を使用すると、stackdriverエントリが作成されるたびにコールバックとして関数を登録できます。これは、スクリプトプロパティで_log exceptions
_がチェックされている場合に特に役立ちます。この意味で、それはwithFailureHandler()
に少し似ていますが、サーバー側のconsole
オブジェクトを介して追加したスタックドライバーエントリによってトリガーできます。
index.html
_<script>
google.script.run
.withSuccessHandler(function(){console.log('OK')})
.withFailureHandler(function(e){console.error(e)})
.withLogger(function(e){console.warn("The following log was generated:"+e)})
.serverFunctionCall();
</script>
_
code.gs
_function serverFunctionCall(){
console.log("This log will generate a callback");
return true;
}
_