エラーの報告

次のように、Cloud 関数から Stackdriver Error Reporting にエラーを送信できます。

Node.js

// These WILL be reported to Stackdriver Error Reporting
    console.error(new Error('I failed you'));
    console.error('I failed you', new Error('I failed you too'));
    throw new Error('I failed you'); // Will cause a cold start if not caught

    // These will NOT be reported to Stackdriver Error Reporting
    console.info(new Error('I failed you')); // Logging an Error object at the info level
    console.error('I failed you'); // Logging something other than an Error object
    throw 1; // Throwing something other than an Error object
    callback('I failed you');
    res.status(500).send('I failed you');

Python

# This WILL be reported to Stackdriver Error
    # Reporting, and WILL NOT show up in logs or
    # terminate the function.
    from google.cloud import error_reporting
    client = error_reporting.Client()

    try:
        raise RuntimeError('I failed you')
    except RuntimeError:
        client.report_exception()

    # This WILL be reported to Stackdriver Error Reporting,
    # and WILL terminate the function
    raise RuntimeError('I failed you')

    # WILL NOT be reported to Stackdriver Error Reporting, but will show up
    # in logs
    import logging
    print(RuntimeError('I failed you (print to stdout)'))
    logging.warn(RuntimeError('I failed you (logging.warn)'))
    logging.error(RuntimeError('I failed you (logging.error)'))
    sys.stderr.write('I failed you (sys.stderr.write)\n')

    # This WILL be reported to Stackdriver Error Reporting
    from flask import abort
    return abort(500)

Go


    package tips

    import (
    	"fmt"
    	"net/http"
    	"os"
    )

    // HTTPError describes how errors are handled in an HTTP function.
    func HTTPError(w http.ResponseWriter, r *http.Request) {
    	// An error response code is NOT reported to Error Reporting.
    	// http.Error(w, "An error occurred", http.StatusInternalServerError)

    	// Printing to stdout and stderr is NOT reported to Error Reporting.
    	fmt.Println("An error occurred (stdout)")
    	fmt.Fprintln(os.Stderr, "An error occurred (stderr)")

    	// Calling log.Fatal sets a non-zero exit code and is NOT reported to Error
    	// Reporting.
    	// log.Fatal("An error occurred (log.Fatal)")

    	// Panics are reported to Error Reporting.
    	panic("An error occurred (panic)")
    }
    

より詳細なエラー報告が必要な場合は、Stackdriver Error Reporting クライアント ライブラリを使用します。

報告されたエラーは、Cloud Console の Stackdriver Error Reporting で表示できます。また、Cloud Console で関数のリストから関数を選択すると、その関数から報告されたエラーを確認できます。

関数によって生成され、キャッチされていない例外は、Stackdriver Error Reporting に表示されます。キャッチされていない例外(非同期でスローされた例外など)は、将来の関数呼び出しでコールド スタートの原因となる可能性があります。これにより、関数のパフォーマンスが低下します。