Skip to content
Zap Studio
webhooks
Esc
navigateopen⌘Jpreview
On this page

Logging

Observe delivery attempts, dispatch, verification failures, and unmatched routes with an optional logger.

createWebhookRouter(...) (and new WebhookRouter(...)) accept an optional logger?: Logger option from logger. Pass one to observe router internals; omit it and nothing is logged — zero overhead.

import { ConsoleLogger } from "@zap-studio/logger";
import { createWebhookRouter } from "@zap-studio/webhooks";

const logger = new ConsoleLogger({ minLevel: "debug" });
const router = createWebhookRouter({ prefix: "/webhooks", logger });

What Gets Logged

Event Level Context
A request is delivered debug path
The route handler dispatches debug path
Verification fails warn path, error
No route matches warn path

Verification failures and unmatched routes log at warn rather than debug because they usually mean a misconfigured webhook or an unexpected caller — worth surfacing by default when a logger is attached, without flooding debug output on every successful delivery.

Bring Your Own Logger

Any object implementing the Logger interface works, so you can forward these events into an existing logging setup instead of ConsoleLogger:

import type { Logger } from "@zap-studio/logger";

const logger: Logger = {
  trace: (message, context) => myBackend.log("trace", message, context),
  debug: (message, context) => myBackend.log("debug", message, context),
  info: (message, context) => myBackend.log("info", message, context),
  warn: (message, context) => myBackend.log("warn", message, context),
  error: (message, context) => myBackend.log("error", message, context),
  fatal: (message, context) => myBackend.log("fatal", message, context),
};

const router = createWebhookRouter({ logger });

See logger for the full Logger interface and ConsoleLogger options.

Last updated on September 21, 2026

Was this page helpful?