Deployments
Google Cloud Logging Plugin
Enterprise Feature
Custom logging is available as an add-on as part of an enterprise plan. If you would like to test or purchase this feature, please contact us at sales@zuplo.com or reach out to your account manager.
Setup#
The GCP Log plugin enables pushing logs to your GCP project.
Before you can use this plugin, you will need to create a GCP Service account that grants your Zuplo API to write logs. Create a new GCP Service account and give it the Logs Writer (roles/logging.logWriter) permission. Create a key for the service account in JSON format.
After you have downloaded the JSON formatted service account, save it as a secret environment variable in your Zuplo project.
import { RuntimeExtensions, GoogleCloudLoggingPlugin, environment, } from "@zuplo/runtime"; export function runtimeInit(runtime: RuntimeExtensions) { runtime.addPlugin( new GoogleCloudLoggingPlugin({ logName: "projects/my-project/logs/my-api", serviceAccountJson: environment.GCP_SERVICE_ACCOUNT, }), ); }
Standard Fields#
Every log entry will have a timestamp
and a jsonPayload
object. The value of
the jsonPayload
contains the text or objects passed into the log.
Default fields are:
severity
- The level of the log, i.e.ERROR
,INFO
, etc.requestId
- The UUID of the request (the value of thezp-rid
header)environmentType
- Where the Zuplo API is running. Values areedge
,working-copy
, orlocal
environmentStage
- If the environment isworking-copy
,preview
, orproduction
atomic_counter
- An atomic number that is used to order logs that have the same timestampenvironment
- The environment name of the Zuplo APIrayId
- The Cloudflare RayID of the request
Log Format#
The shape of the logs sent from Zuplo will be in the following format. The
messages passed into the log function will be sent as an array on allMessages
.
The first string message will be set as the jsonPayload.message
field - this
makes it easier to read the logs in Google's Log Explorer.
{ "insertId": "1sxlp0rg113cy7s", "jsonPayload": { "message": "Request received '/hello'", "allMessages": [ "Request received '/hello'", { "route": "/hello", "method": "GET", "hostname": "my-project-main-db51244.zuplo.app", "url": "/hello" } ] }, "resource": { "type": "global", "labels": { "project_id": "my-project" } }, "timestamp": "2024-02-27T22:18:48.885Z", "severity": "DEBUG", "labels": { "environmentStage": "production", "logOwner": "user", "rayId": "85c3ce476cfc399a", "environmentType": "edge", "buildId": "365cd2da-6156-48c8-b142-4e5aa4a7e6d7", "requestId": "1482d01b-9d74-4cff-a0e3-e1adda46354f", "loggingId": "nate-test::my-project::main::main::db51244", "source": "request", "environment": "my-project-main-db51244" }, "logName": "projects/my-project/logs/my-project", "trace": "projects/my-project/traces/1482d01b-9d74-4cff-a0e3-e1adda46354f", "receiveTimestamp": "2024-02-27T22:18:48.921958689Z" }