Skip to content

Export to PostHog

PostHog is a product analytics platform that helps you understand user behavior and debug issues. By exporting your Cloudflare Workers application telemetry to PostHog, you can:

  • Correlate logs with user sessions, events, and error tracking data
  • Query and filter logs by severity, attributes, and custom properties
  • Connect application logs to session replays for full debugging context
PostHog logs view with attributes expanded and a timeline view at the top

This guide will walk you through configuring your Cloudflare Worker application to export OpenTelemetry-compliant logs to PostHog.

Prerequisites

Before you begin, ensure you have:

  • An active PostHog account (free tier available)
  • A deployed Worker that you want to monitor
  • Your PostHog project API key

Step 1: Get your PostHog project API key

  1. Log in to your PostHog account
  2. Navigate to the Project settings
  3. Find your Project API key in the project details section
  4. Copy the API key - this is the same key used for capturing events and exceptions

The API key should look something like: phc_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Step 2: Determine your PostHog region endpoint

PostHog has different endpoints depending on your data region:

RegionLogs Endpoint
US (default)https://us.i.posthog.com/i/v1/logs
EUhttps://eu.i.posthog.com/i/v1/logs

You can find your region in your PostHog project settings or by checking the URL when logged into PostHog (either us.posthog.com or eu.posthog.com).

Step 3: Configure Cloudflare Logs destination

Now you'll create a destination in the Cloudflare dashboard that points to PostHog.

  1. Navigate to your Cloudflare account's Workers Observability section
  2. Click Add destination
  3. Configure your logs destination:
    • Destination Name: posthog-logs (or any descriptive name)
    • Destination Type: Select Logs
    • OTLP Endpoint: Your PostHog logs endpoint (e.g., https://us.i.posthog.com/i/v1/logs or https://eu.i.posthog.com/i/v1/logs)
    • Custom Headers: Add the authentication header:
      • Header name: Authorization
      • Header value: Bearer <your-project-api-key> (e.g., Bearer phc_xxxxx...)
  4. Click Save
Cloudflare destination configuration for PostHog logs with destination name, type selection, OTLP endpoint, and custom headers

Step 4: Configure your Worker

With your destination created in the Cloudflare dashboard, update your Worker's configuration to enable logs export.

JSONC
{
"observability": {
"logs": {
"enabled": true,
// Must match the destination name in the dashboard
"destinations": ["posthog-logs"]
}
}
}

After updating your configuration, deploy your Worker for the changes to take effect.

Step 5: View logs in PostHog

Once your Worker is deployed and receiving traffic:

  1. Log in to your PostHog account
  2. Navigate to the Logs section in the left sidebar
  3. Your Worker logs will appear with severity levels, timestamps, and attributes

You can filter logs by:

  • Severity level (trace, debug, info, warn, error, fatal)
  • Time range
  • Custom attributes added to your log entries
  • Keywords in log messages

Adding custom attributes to logs

You can add custom attributes to your logs using standard console methods with structured data:

JavaScript
export default {
async fetch(request, env) {
// Basic logging
console.log("Processing request");
// Logs with additional context
console.info("User action", {
userId: "user_123",
action: "api_call",
path: new URL(request.url).pathname
});
// Error logging with details
console.error("Request failed", {
error: "Connection timeout",
retryCount: 3
});
return new Response("OK");
}
};

These attributes will be searchable and filterable in the PostHog logs interface.

Troubleshooting

Logs not appearing in PostHog

  1. Verify your API key: Ensure you're using your project API key (starts with phc_), not a personal API key
  2. Check the endpoint region: Confirm you're using the correct regional endpoint (US or EU) matching your PostHog instance
  3. Confirm destination status: In the Cloudflare dashboard, verify your destination shows a recent successful delivery
  4. Check sampling rate: If you've configured a sampling rate, not all logs may be sent

Authentication errors

If you see authentication errors in your destination status:

  • Ensure the Authorization header value includes Bearer prefix followed by your API key
  • Verify the API key has not been revoked or regenerated in PostHog
  • Alternatively, you can pass the token as a query parameter by using https://us.i.posthog.com/i/v1/logs?token=<your-project-api-key> as your endpoint