## Automatically reporting errors

You can emit an error from a function to
[Error Reporting](https://cloud.google.com/error-reporting/docs) as shown below:

### Node.js

```javascript
// These WILL be reported to Error Reporting
throw new Error('I failed you'); // Will cause a cold start if not caught
```

### Python

```python
@functions_framework.http
def hello_error_1(request):
    # This WILL be reported to 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 Error Reporting,
    # and WILL terminate the function
    raise RuntimeError("I failed you")

@functions_framework.http
def hello_error_2(request):
    # These errors WILL NOT be reported to Error
    # Reporting, but will show up in logs.
    import logging
    import sys

    print(RuntimeError("I failed you (print to stdout)"))
    logging.warning(RuntimeError("I failed you (logging.warning)"))
    logging.error(RuntimeError("I failed you (logging.error)"))
    sys.stderr.write("I failed you (sys.stderr.write)\n")

    # This is considered a successful execution and WILL NOT be reported
    # to Error Reporting, but the status code (500) WILL be logged.
    from flask import abort

    return abort(500)
```

If you would like more fine-grained error reporting, you can use the [Error Reporting client
libraries](https://cloud.google.com/error-reporting/docs/reference/libraries).

You can view the reported errors in [Error Reporting](https://console.cloud.google.com/errors)
in the Google Cloud console. You can also see the errors reported from a
particular function when you select it from the [list of functions](https://console.cloud.google.com/functions) in the Google Cloud console.

Uncaught exceptions produced by your function will appear in Error Reporting.
Note that some types of uncaught exceptions (such as those thrown
asynchronously) will cause a [cold
start](https://cloud.google.com/functions/docs/bestpractices/tips) to occur upon
a future function invocation. This increases the amount of time your function
will take to run.

## Manually reporting errors

### Importing dependencies

To report an error to [Error Reporting](https://cloud.google.com/error-reporting/docs) from a function, import the `error` function from the Cloud Functions
[logger](https://firebase.google.com/docs/reference/functions/firebase-functions.logger.md.txt)
SDK:

    // All available logging functions
    const {
      log,
      info,
      debug,
      warn,
      error,
      write,
    } = require("firebase-functions/logger");

### Sending to Cloud Logging

The `error` function from the Cloud Functions
[logger](https://firebase.google.com/docs/reference/functions/firebase-functions.logger.md.txt)
SDK will report errors to both Cloud Logging and [Error Reporting](https://cloud.google.com/error-reporting/docs). To include more context from the error as [structured data](https://cloud.google.com/logging/docs/structured-logging), pass an error object as the second argument:

     } catch (err) {
      // Attach an error object as the second argument
      error("Unable to read quote from Firestore, sending default instead",
          err);