Skip to main content
First-party SDKs send native telemetry envelopes to LogBrew. One envelope can contain multiple telemetry items, but every item shares the same project, service, release, environment, and optional trace context.

Required envelope fields

Item types

log

severity, message, source, attributes, occurred_at

trace_span

trace_id, span_id, name, operation, started_at, duration_ms

issue

severity, title, message, stack_trace, fingerprint, occurred_at

action

name, distinct_id, session_id, properties, occurred_at

Severity values

Use info, warning, error, or critical for logs and issues. SDKs and runtimes may send common aliases such as trace, debug, warn, or fatal, but LogBrew normalizes accepted aliases to the canonical values.

Package-manager installs

Install the SDK package for the runtime that sends telemetry. Use project-scoped SDK or ingest configuration from LogBrew; do not use account login values as SDK configuration.

C++ with CMake

The C++ SDK requires C++17 and CMake 3.16 or newer. CLI v0.1.39 or newer detects a root CMakeLists.txt and prints this non-mutating setup plan with logbrew setup --json:
The core target is dependency-free. To send batches through the optional libcurl transport, replace the final FetchContent_MakeAvailable call and target link above with:
Configure and build the consumer to verify that the pinned release and target resolve:
For builds that cannot fetch the SDK monorepo, use the scoped logbrew-cpp-0.2.3.tar.gz asset from the C++ 0.2.3 release. The extracted package supports cmake --install and find_package(LogBrew 0.2.3 CONFIG REQUIRED). See the C++ SDK guide for typed context, issue evidence, span events and links, metrics, actions, and HTTP delivery. Use the LogBrew Swift product for telemetry. Add LogBrewCrash only for explicit Apple crash or hang capture. Follow Capture Apple crashes and hangs for exact dSYM upload and hosted symbolication. For Flask, follow Set up Flask for one-call initialization, the first hosted request, privacy defaults, worker lifecycle, and CLI readback.

React Native hosted delivery

Use @logbrew/react-native 0.1.7 or newer. Give the app a project-scoped, write-only ingest key. Expo includes every EXPO_PUBLIC_* value in the app bundle, so never put an account or server credential in that variable. CLI v0.1.32 or newer can store a new SDK key for an existing project without creating a duplicate project:
Keep that file out of source control. Use its value as EXPO_PUBLIC_LOGBREW_CLIENT_KEY; do not use the account credential that authorized the CLI command.

Keep Expo Debug IDs in production bundles

Use @logbrew/react-native 0.1.8 or newer for Expo release bundles. Create the Expo Metro config through LogBrew so the runtime bundle receives the same final Debug ID as the Expo source map:
If the app uses React Native Worklets bundle mode, apply that transform after the LogBrew helper:
The helper preserves existing Expo pre-serialization plugins. Do not apply withLogBrewMetroConfig() to an Expo config. That wrapper is for bare React Native projects. If an Expo project uses it, the production serializer stops with a message that points to getLogBrewExpoConfig() instead of creating a bundle with mismatched symbolication data. Supplying the fetch transport enables the core SDK’s bounded automatic delivery, retry, queue, and pause behavior. Do not add a second flush timer. The AppState listener requests a final flush when the app becomes inactive or enters the background. Call stopAppStateListener() during app teardown. A successful flush proves that the HTTPS intake accepted the batch. Confirm event visibility separately with the authenticated CLI:
RecordingTransport.alwaysAccept() is for local inspection. Its synthetic 202 response does not send a network request and does not prove hosted delivery.

JavaScript queue tracing

Node queue integrations are separate npm packages. Install the base LogBrew JavaScript packages, the integration package, and the queue or broker client your app already uses. Use these packages for explicit, app-owned trace correlation around the queue calls you choose. LogBrew does not own your broker connection, create queues, or globally patch every client by default.
Keep queue payloads, arbitrary message headers, broker URLs, and session or account bearer values out of SDK configuration. Use project-scoped server ingest configuration from LogBrew.

Example request

Keep the project-scoped ingest value separate from account or browser-session credentials. These names are local shell variables for the request below:
telemetry-envelope.json

Response

The ingest response returns accepted item counts by stream.
Put release, environment, and trace ID into SDK setup once. Every later CLI investigation becomes easier.