ErrTapDocs

Logs

Send structured logs from any ErrTap SDK, then search, filter and live-tail them on the ErrTap Logs page next to your errors.

Logs are structured lines — a level, a message and optional data — that land next to your errors, so you can read what happened before an issue fired.

Send logs

Every ErrTap SDK has a logger:

import { logger } from '@errtap/browser'; // or @errtap/node, @errtap/next, @errtap/nestjs, @errtap/react-native

logger.info('checkout started', { orderId: 'ord_1' });
logger.warn('payment retry', { attempt: 2 });
\ErrTap\ErrTap::info('checkout started', ['orderId' => $order->id]); // Laravel
ErrTap.ErrTap.Info("checkout started", new Dictionary<string, object?> { ["orderId"] = id }); // .NET

Levels are debug, info, warning (SDKs also accept warn) and error. The data you pass is stored as the line's context. Logs carry the SDK's environment, release and tags. Sentry SDKs with structured logs enabled (enableLogs) are stored here too.

Without an SDK, POST to /ingest/log.

The Logs page

  • Live tail polls for new lines every few seconds while the page is visible. Scroll away and new lines are held until you jump back to the top.
  • Filters for level, text search, environment, release and time range.
  • A volume histogram by level. Drag across it to zoom into a time range.
  • Expand a row to see its full context and copy it.

Quota and limits

Logs count toward your monthly event quota, with their own rate-limit window so a noisy logger can't crowd out errors. On the client, the browser SDK caps errors and logs at 60 a minute each, separately. The Node and .NET SDKs pause after a 429 and cap unfinished requests per endpoint, so a backed-up log endpoint doesn't hold up errors. The Laravel and React Native SDKs have no client-side budget. Messages are capped at 8,192 characters. Logs are kept for your plan's retention window. If PII scrubbing is on, it applies to logs as well.