GoogleCloudPlatform / GoogleCloudPlatform/functions-framework-nodejs

More Control over Error Logging

Open
#484 4 comments 1 reaction 0 assignees View on GitHub
enhancement P3
Dominant language
TypeScript
Stars
1.4k
Forks
181
PR merge metrics
No merged PRs in 30d

Description

Hello, I started using `@google-cloud/functions-framework` and noticed that it is not much compatible with [structured logging](https://cloud.google.com/logging/docs/structured-logging).

Especially, when I use [the CloudEventFunction style](https://github.com/GoogleCloudPlatform/functions-framework-nodejs/blob/db922c08687e7eec124ff0d696e0e60d6bf41df8/src/function_registry.ts#L91) which seems to be the [recommended way when integrating with Cloud Pub/Sub](https://cloud.google.com/functions/docs/tutorials/pubsub), the function must throw in order to mark the request as failed (i.e. [respond with 500](https://github.com/GoogleCloudPlatform/functions-framework-nodejs/blob/db922c08687e7eec124ff0d696e0e60d6bf41df8/src/logger.ts#L51)).

In that case, the default (and inevitable) error logging isn't quite nice. First, error is logged twice 😨 ([1](https://github.com/GoogleCloudPlatform/functions-framework-nodejs/blob/db922c08687e7eec124ff0d696e0e60d6bf41df8/src/function_wrappers.ts#L51), [2](https://github.com/GoogleCloudPlatform/functions-framework-nodejs/blob/db922c08687e7eec124ff0d696e0e60d6bf41df8/src/logger.ts#L40)). Second, neither log is not structured, resulting in the error log being split into multiple entries.

![スクリーンショット 2022-11-16 17 01 55](https://user-images.githubusercontent.com/748348/202125268-604bef97-567d-4d41-aea3-fe1c9e596129.png)

I would like to get more control over how errors are logged. Or, maybe as another solution, a method for marking the request as failed without throwing will satisfy my use case.

Thanks!

Contributor guide

Open the contributing guide

Research direction

Start with the error paths in src/function_wrappers.ts and src/logger.ts linked from the issue, then review the CloudEventFunction handling and structured logging requirements. Done means the framework offers a decided way to control error logging or mark a request failed without throwing, without duplicate or split error entries.

Written by the indexing model from the issue text.

Assessment

Tech stack
google-cloud, nodejs, typescript
Domain
backend, cloud, observability
Issue type
Feature
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.