[{"data":1,"prerenderedAt":3601},["ShallowReactive",2],{"navigation_docs":3,"-integrate-adapters-cloud-posthog":612,"-integrate-adapters-cloud-posthog-surround":3596},[4,35,85,138,318,453,489,548,587],{"title":5,"path":6,"stem":7,"children":8,"page":34},"Start","\u002Fstart","1.start",[9,14,19,24,29],{"title":10,"path":11,"stem":12,"icon":13},"Introduction","\u002Fstart\u002Fintroduction","1.start\u002F1.introduction","i-lucide-info",{"title":15,"path":16,"stem":17,"icon":18},"Why start with evlog","\u002Fstart\u002Fwhy-evlog","1.start\u002F2.why-evlog","i-lucide-rocket",{"title":20,"path":21,"stem":22,"icon":23},"Installation","\u002Fstart\u002Finstallation","1.start\u002F3.installation","i-lucide-download",{"title":25,"path":26,"stem":27,"icon":28},"Quick Start","\u002Fstart\u002Fquick-start","1.start\u002F4.quick-start","i-lucide-zap",{"title":30,"path":31,"stem":32,"icon":33},"Choose your logger","\u002Fstart\u002Ftypescript-logging-library","1.start\u002F5.typescript-logging-library","i-lucide-file-code",false,{"title":36,"path":37,"stem":38,"children":39,"page":34},"Learn","\u002Flearn","2.learn",[40,45,50,55,60,65,70,75,80],{"title":41,"path":42,"stem":43,"icon":44},"Overview","\u002Flearn\u002Foverview","2.learn\u002F0.overview","i-lucide-list",{"title":46,"path":47,"stem":48,"icon":49},"Simple Logging","\u002Flearn\u002Fsimple-logging","2.learn\u002F1.simple-logging","i-lucide-terminal",{"title":51,"path":52,"stem":53,"icon":54},"Wide Events","\u002Flearn\u002Fwide-events","2.learn\u002F2.wide-events","i-lucide-layers",{"title":56,"path":57,"stem":58,"icon":59},"Structured Errors","\u002Flearn\u002Fstructured-errors","2.learn\u002F3.structured-errors","i-lucide-shield-alert",{"title":61,"path":62,"stem":63,"icon":64},"Lifecycle","\u002Flearn\u002Flifecycle","2.learn\u002F4.lifecycle","i-lucide-arrow-right-left",{"title":66,"path":67,"stem":68,"icon":69},"Sampling","\u002Flearn\u002Fsampling","2.learn\u002F5.sampling","i-lucide-filter",{"title":71,"path":72,"stem":73,"icon":74},"Auto-Redaction","\u002Flearn\u002Fredaction","2.learn\u002F6.redaction","i-lucide-eye-off",{"title":76,"path":77,"stem":78,"icon":79},"Typed Fields","\u002Flearn\u002Ftyped-fields","2.learn\u002F7.typed-fields","i-simple-icons-typescript",{"title":81,"path":82,"stem":83,"icon":84},"Catalogs","\u002Flearn\u002Fcatalogs","2.learn\u002F8.catalogs","i-lucide-book-open",{"title":86,"path":87,"stem":88,"children":89,"page":34},"CLI","\u002Fcli","3.cli",[90,93,98,103,108,113,118,123,128,133],{"title":41,"path":91,"stem":92,"icon":49},"\u002Fcli\u002Foverview","3.cli\u002F0.overview",{"title":94,"path":95,"stem":96,"icon":97},"init","\u002Fcli\u002Finit","3.cli\u002F1.init","i-lucide-wand-sparkles",{"title":99,"path":100,"stem":101,"icon":102},"map","\u002Fcli\u002Fmap","3.cli\u002F2.map","i-lucide-radar",{"title":104,"path":105,"stem":106,"icon":107},"Rules","\u002Fcli\u002Frules","3.cli\u002F3.rules","i-lucide-list-checks",{"title":109,"path":110,"stem":111,"icon":112},"Scoring","\u002Fcli\u002Fscoring","3.cli\u002F4.scoring","i-lucide-gauge",{"title":114,"path":115,"stem":116,"icon":117},"CI","\u002Fcli\u002Fci","3.cli\u002F5.ci","i-lucide-git-pull-request",{"title":119,"path":120,"stem":121,"icon":122},"doctor","\u002Fcli\u002Fdoctor","3.cli\u002F6.doctor","i-lucide-stethoscope",{"title":124,"path":125,"stem":126,"icon":127},"telemetry","\u002Fcli\u002Ftelemetry","3.cli\u002F7.telemetry","i-lucide-bar-chart-3",{"title":129,"path":130,"stem":131,"icon":132},"agents","\u002Fcli\u002Fagents","3.cli\u002F8.agents","i-lucide-bot",{"title":134,"path":135,"stem":136,"icon":137},"Observability Score","\u002Fcli\u002Fobservability-score","3.cli\u002F9.observability-score","i-lucide-activity",{"title":139,"path":140,"stem":141,"children":142,"page":34},"Integrate","\u002Fintegrate","4.integrate",[143,147,230],{"title":41,"path":144,"stem":145,"icon":146},"\u002Fintegrate\u002Foverview","4.integrate\u002F0.overview","i-lucide-plug",{"title":148,"path":149,"stem":150,"children":151,"page":34},"Adapters","\u002Fintegrate\u002Fadapters","4.integrate\u002Fadapters",[152,155,185,210],{"title":41,"path":153,"stem":154,"icon":44},"\u002Fintegrate\u002Fadapters\u002Foverview","4.integrate\u002Fadapters\u002F01.overview",{"title":156,"path":157,"stem":158,"children":159,"page":34},"Cloud","\u002Fintegrate\u002Fadapters\u002Fcloud","4.integrate\u002Fadapters\u002Fcloud",[160,165,170,175,180],{"title":161,"path":162,"stem":163,"icon":164},"Axiom","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Faxiom","4.integrate\u002Fadapters\u002Fcloud\u002F01.axiom","i-custom-axiom",{"title":166,"path":167,"stem":168,"icon":169},"PostHog","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fposthog","4.integrate\u002Fadapters\u002Fcloud\u002F02.posthog","i-simple-icons-posthog",{"title":171,"path":172,"stem":173,"icon":174},"Sentry","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fsentry","4.integrate\u002Fadapters\u002Fcloud\u002F03.sentry","i-simple-icons-sentry",{"title":176,"path":177,"stem":178,"icon":179},"Better Stack","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fbetter-stack","4.integrate\u002Fadapters\u002Fcloud\u002F04.better-stack","i-simple-icons-betterstack",{"title":181,"path":182,"stem":183,"icon":184},"Datadog","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fdatadog","4.integrate\u002Fadapters\u002Fcloud\u002F05.datadog","i-simple-icons-datadog",{"title":186,"path":187,"stem":188,"children":189,"page":34},"Cloud or Self-Hosted","\u002Fintegrate\u002Fadapters\u002Fhybrid","4.integrate\u002Fadapters\u002Fhybrid",[190,195,200,205],{"title":191,"path":192,"stem":193,"icon":194},"Grafana Loki","\u002Fintegrate\u002Fadapters\u002Fhybrid\u002Floki","4.integrate\u002Fadapters\u002Fhybrid\u002F01.loki","i-simple-icons-grafana",{"title":196,"path":197,"stem":198,"icon":199},"ClickHouse","\u002Fintegrate\u002Fadapters\u002Fhybrid\u002Fclickhouse","4.integrate\u002Fadapters\u002Fhybrid\u002F02.clickhouse","i-simple-icons-clickhouse",{"title":201,"path":202,"stem":203,"icon":204},"OTLP","\u002Fintegrate\u002Fadapters\u002Fhybrid\u002Fotlp","4.integrate\u002Fadapters\u002Fhybrid\u002F03.otlp","i-simple-icons-opentelemetry",{"title":206,"path":207,"stem":208,"icon":209},"HyperDX","\u002Fintegrate\u002Fadapters\u002Fhybrid\u002Fhyperdx","4.integrate\u002Fadapters\u002Fhybrid\u002F04.hyperdx","i-custom-hyperdx",{"title":211,"path":212,"stem":213,"children":214,"page":34},"Self-Hosted","\u002Fintegrate\u002Fadapters\u002Fself-hosted","4.integrate\u002Fadapters\u002Fself-hosted",[215,220,225],{"title":216,"path":217,"stem":218,"icon":219},"File System","\u002Fintegrate\u002Fadapters\u002Fself-hosted\u002Ffs","4.integrate\u002Fadapters\u002Fself-hosted\u002F01.fs","i-lucide-hard-drive",{"title":221,"path":222,"stem":223,"icon":224},"NuxtHub","\u002Fintegrate\u002Fadapters\u002Fself-hosted\u002Fnuxthub","4.integrate\u002Fadapters\u002Fself-hosted\u002F02.nuxthub","i-simple-icons-nuxt",{"title":226,"path":227,"stem":228,"icon":229},"Memory","\u002Fintegrate\u002Fadapters\u002Fself-hosted\u002Fmemory","4.integrate\u002Fadapters\u002Fself-hosted\u002F03.memory","i-lucide-cpu",{"title":231,"path":232,"stem":233,"children":234,"page":34},"Frameworks","\u002Fintegrate\u002Fframeworks","4.integrate\u002Fframeworks",[235,239,244,249,254,259,264,269,274,279,284,289,294,299,303,308,313],{"title":41,"path":236,"stem":237,"icon":238},"\u002Fintegrate\u002Fframeworks\u002Foverview","4.integrate\u002Fframeworks\u002F00.overview","i-lucide-layout-grid",{"title":240,"path":241,"stem":242,"icon":243},"Nuxt","\u002Fintegrate\u002Fframeworks\u002Fnuxt","4.integrate\u002Fframeworks\u002F01.nuxt","i-simple-icons-nuxtdotjs",{"title":245,"path":246,"stem":247,"icon":248},"Next.js","\u002Fintegrate\u002Fframeworks\u002Fnextjs","4.integrate\u002Fframeworks\u002F02.nextjs","i-simple-icons-nextdotjs",{"title":250,"path":251,"stem":252,"icon":253},"SvelteKit","\u002Fintegrate\u002Fframeworks\u002Fsveltekit","4.integrate\u002Fframeworks\u002F03.sveltekit","i-simple-icons-svelte",{"title":255,"path":256,"stem":257,"icon":258},"Nitro","\u002Fintegrate\u002Fframeworks\u002Fnitro","4.integrate\u002Fframeworks\u002F04.nitro","i-custom-nitro",{"title":260,"path":261,"stem":262,"icon":263},"TanStack Start","\u002Fintegrate\u002Fframeworks\u002Ftanstack-start","4.integrate\u002Fframeworks\u002F05.tanstack-start","i-custom-tanstack",{"title":265,"path":266,"stem":267,"icon":268},"NestJS","\u002Fintegrate\u002Fframeworks\u002Fnestjs","4.integrate\u002Fframeworks\u002F06.nestjs","i-simple-icons-nestjs",{"title":270,"path":271,"stem":272,"icon":273},"Express","\u002Fintegrate\u002Fframeworks\u002Fexpress","4.integrate\u002Fframeworks\u002F07.express","i-simple-icons-express",{"title":275,"path":276,"stem":277,"icon":278},"Hono","\u002Fintegrate\u002Fframeworks\u002Fhono","4.integrate\u002Fframeworks\u002F08.hono","i-simple-icons-hono",{"title":280,"path":281,"stem":282,"icon":283},"Fastify","\u002Fintegrate\u002Fframeworks\u002Ffastify","4.integrate\u002Fframeworks\u002F09.fastify","i-simple-icons-fastify",{"title":285,"path":286,"stem":287,"icon":288},"Elysia","\u002Fintegrate\u002Fframeworks\u002Felysia","4.integrate\u002Fframeworks\u002F10.elysia","i-custom-elysia",{"title":290,"path":291,"stem":292,"icon":293},"React Router","\u002Fintegrate\u002Fframeworks\u002Freact-router","4.integrate\u002Fframeworks\u002F11.react-router","i-custom-reactrouter",{"title":295,"path":296,"stem":297,"icon":298},"Cloudflare Workers","\u002Fintegrate\u002Fframeworks\u002Fcloudflare-workers","4.integrate\u002Fframeworks\u002F12.cloudflare-workers","i-simple-icons-cloudflare",{"title":300,"path":301,"stem":302,"icon":79},"Standalone","\u002Fintegrate\u002Fframeworks\u002Fstandalone","4.integrate\u002Fframeworks\u002F13.standalone",{"title":304,"path":305,"stem":306,"icon":307},"Astro","\u002Fintegrate\u002Fframeworks\u002Fastro","4.integrate\u002Fframeworks\u002F14.astro","i-simple-icons-astro",{"title":309,"path":310,"stem":311,"icon":312},"oRPC","\u002Fintegrate\u002Fframeworks\u002Forpc","4.integrate\u002Fframeworks\u002F15.orpc","i-lucide-network",{"title":314,"path":315,"stem":316,"icon":317},"AWS Lambda","\u002Fintegrate\u002Fframeworks\u002Faws-lambda","4.integrate\u002Fframeworks\u002F16.aws-lambda","i-custom-lambda",{"title":319,"path":320,"stem":321,"children":322,"page":34},"Use Cases","\u002Fuse-cases","5.use-cases",[323,326,331,359,386,418,439,444,449],{"title":41,"path":324,"stem":325,"icon":107},"\u002Fuse-cases\u002Foverview","5.use-cases\u002F0.overview",{"title":327,"path":328,"stem":329,"icon":330},"Client Logging","\u002Fuse-cases\u002Fclient-logging","5.use-cases\u002F1.client-logging","i-lucide-monitor",{"title":332,"icon":333,"path":334,"stem":335,"children":336,"page":34},"AI SDK","i-simple-icons-vercel","\u002Fuse-cases\u002Fai-sdk","5.use-cases\u002F2.ai-sdk",[337,340,345,350,355],{"title":41,"path":338,"stem":339,"icon":44},"\u002Fuse-cases\u002Fai-sdk\u002Foverview","5.use-cases\u002F2.ai-sdk\u002F01.overview",{"title":341,"path":342,"stem":343,"icon":344},"Usage","\u002Fuse-cases\u002Fai-sdk\u002Fusage","5.use-cases\u002F2.ai-sdk\u002F02.usage","i-lucide-code",{"title":346,"path":347,"stem":348,"icon":349},"Options","\u002Fuse-cases\u002Fai-sdk\u002Foptions","5.use-cases\u002F2.ai-sdk\u002F03.options","i-lucide-sliders",{"title":351,"path":352,"stem":353,"icon":354},"Metadata","\u002Fuse-cases\u002Fai-sdk\u002Fmetadata","5.use-cases\u002F2.ai-sdk\u002F04.metadata","i-lucide-database",{"title":356,"path":357,"stem":358,"icon":137},"Telemetry","\u002Fuse-cases\u002Fai-sdk\u002Ftelemetry","5.use-cases\u002F2.ai-sdk\u002F05.telemetry",{"title":360,"icon":361,"path":362,"stem":363,"children":364,"page":34},"Better Auth","i-simple-icons-betterauth","\u002Fuse-cases\u002Fbetter-auth","5.use-cases\u002F3.better-auth",[365,368,373,378,382],{"title":41,"path":366,"stem":367,"icon":44},"\u002Fuse-cases\u002Fbetter-auth\u002Foverview","5.use-cases\u002F3.better-auth\u002F01.overview",{"title":369,"path":370,"stem":371,"icon":372},"Identify User","\u002Fuse-cases\u002Fbetter-auth\u002Fidentify-user","5.use-cases\u002F3.better-auth\u002F02.identify-user","i-lucide-user-check",{"title":374,"path":375,"stem":376,"icon":377},"Middleware","\u002Fuse-cases\u002Fbetter-auth\u002Fmiddleware","5.use-cases\u002F3.better-auth\u002F03.middleware","i-lucide-shield",{"title":379,"path":380,"stem":381,"icon":330},"Client Sync","\u002Fuse-cases\u002Fbetter-auth\u002Fclient-sync","5.use-cases\u002F3.better-auth\u002F04.client-sync",{"title":383,"path":384,"stem":385,"icon":112},"Performance","\u002Fuse-cases\u002Fbetter-auth\u002Fperformance","5.use-cases\u002F3.better-auth\u002F05.performance",{"title":387,"icon":388,"path":389,"stem":390,"children":391,"page":34},"Audit Logs","i-lucide-shield-check","\u002Fuse-cases\u002Faudit","5.use-cases\u002F4.audit",[392,395,400,405,410,414],{"title":41,"path":393,"stem":394,"icon":44},"\u002Fuse-cases\u002Faudit\u002Foverview","5.use-cases\u002F4.audit\u002F01.overview",{"title":396,"path":397,"stem":398,"icon":399},"Schema","\u002Fuse-cases\u002Faudit\u002Fschema","5.use-cases\u002F4.audit\u002F02.schema","i-lucide-file-text",{"title":401,"path":402,"stem":403,"icon":404},"Recording","\u002Fuse-cases\u002Faudit\u002Frecording","5.use-cases\u002F4.audit\u002F03.recording","i-lucide-pen-line",{"title":406,"path":407,"stem":408,"icon":409},"Drains","\u002Fuse-cases\u002Faudit\u002Fpipeline","5.use-cases\u002F4.audit\u002F04.pipeline","i-lucide-link",{"title":411,"path":412,"stem":413,"icon":388},"Compliance","\u002Fuse-cases\u002Faudit\u002Fcompliance","5.use-cases\u002F4.audit\u002F05.compliance",{"title":415,"path":416,"stem":417,"icon":84},"Recipes","\u002Fuse-cases\u002Faudit\u002Frecipes","5.use-cases\u002F4.audit\u002F06.recipes",{"title":356,"icon":112,"path":419,"stem":420,"children":421,"page":34},"\u002Fuse-cases\u002Ftelemetry","5.use-cases\u002F4.telemetry",[422,425,430,435],{"title":41,"path":423,"stem":424,"icon":44},"\u002Fuse-cases\u002Ftelemetry\u002Foverview","5.use-cases\u002F4.telemetry\u002F01.overview",{"title":426,"path":427,"stem":428,"icon":429},"Setup","\u002Fuse-cases\u002Ftelemetry\u002Fsetup","5.use-cases\u002F4.telemetry\u002F02.setup","i-lucide-wrench",{"title":431,"path":432,"stem":433,"icon":434},"Ingest","\u002Fuse-cases\u002Ftelemetry\u002Fingest","5.use-cases\u002F4.telemetry\u002F03.ingest","i-lucide-server",{"title":436,"path":437,"stem":438,"icon":84},"Reference","\u002Fuse-cases\u002Ftelemetry\u002Freference","5.use-cases\u002F4.telemetry\u002F04.reference",{"title":440,"path":441,"stem":442,"icon":443},"Enrichers","\u002Fuse-cases\u002Fenrichers","5.use-cases\u002F5.enrichers","i-lucide-sparkles",{"title":445,"path":446,"stem":447,"icon":448},"eve","\u002Fuse-cases\u002Feve","5.use-cases\u002F5.eve","i-custom-eve",{"title":450,"path":451,"stem":452,"icon":434},"Node.js request logging","\u002Fuse-cases\u002Fstructured-logging-nodejs","5.use-cases\u002F6.structured-logging-nodejs",{"title":454,"path":455,"stem":456,"children":457,"page":34},"Libraries","\u002Flibraries","6.libraries",[458,462,467,470,474,479,484],{"title":41,"path":459,"stem":460,"icon":461},"\u002Flibraries\u002Foverview","6.libraries\u002F0.overview","i-lucide-package",{"title":463,"path":464,"stem":465,"icon":466},"Emitting Events","\u002Flibraries\u002Femitting","6.libraries\u002F1.emitting","i-lucide-radio",{"title":56,"path":468,"stem":469,"icon":59},"\u002Flibraries\u002Ferrors","6.libraries\u002F2.errors",{"title":471,"path":472,"stem":473,"icon":132},"Errors Agents Can Act On","\u002Flibraries\u002Fagents","6.libraries\u002F3.agents",{"title":475,"path":476,"stem":477,"icon":478},"Exporting the Catalog","\u002Flibraries\u002Fexporting","6.libraries\u002F4.exporting","i-lucide-file-output",{"title":480,"path":481,"stem":482,"icon":483},"Migrating","\u002Flibraries\u002Fmigrating","6.libraries\u002F5.migrating","i-lucide-route",{"title":485,"path":486,"stem":487,"icon":488},"Testing","\u002Flibraries\u002Ftesting","6.libraries\u002F6.testing","i-lucide-flask-conical",{"title":490,"path":491,"stem":492,"children":493,"page":34},"Extend","\u002Fextend","7.extend",[494,498,503,508,512,517,521,525,529,533,538,543],{"title":41,"path":495,"stem":496,"icon":497},"\u002Fextend\u002Foverview","7.extend\u002F0.overview","i-lucide-blocks",{"title":499,"path":500,"stem":501,"icon":502},"Stream","\u002Fextend\u002Fstream","7.extend\u002F1.stream","i-lucide-radio-tower",{"title":504,"path":505,"stem":506,"icon":507},"Custom framework","\u002Fextend\u002Fcustom-framework","7.extend\u002F10.custom-framework","i-lucide-puzzle",{"title":509,"path":510,"stem":511,"icon":502},"Diagnostics channel","\u002Fextend\u002Fdiagnostics-channel","7.extend\u002F11.diagnostics-channel",{"title":513,"path":514,"stem":515,"icon":516},"FS reader","\u002Fextend\u002Ffs-reader","7.extend\u002F2.fs-reader","i-lucide-folder-search",{"title":415,"path":518,"stem":519,"icon":520},"\u002Fextend\u002Fconsumer-recipes","7.extend\u002F3.consumer-recipes","i-lucide-chef-hat",{"title":522,"path":523,"stem":524,"icon":497},"Plugins","\u002Fextend\u002Fplugins","7.extend\u002F4.plugins",{"title":526,"path":527,"stem":528,"icon":443},"Custom enrichers","\u002Fextend\u002Fcustom-enrichers","7.extend\u002F5.custom-enrichers",{"title":530,"path":531,"stem":532,"icon":69},"Tail sampling","\u002Fextend\u002Ftail-sampling","7.extend\u002F6.tail-sampling",{"title":534,"path":535,"stem":536,"icon":537},"Identity headers","\u002Fextend\u002Fidentity-headers","7.extend\u002F7.identity-headers","i-lucide-fingerprint",{"title":539,"path":540,"stem":541,"icon":542},"Custom drains","\u002Fextend\u002Fcustom-drains","7.extend\u002F8.custom-drains","i-lucide-share-2",{"title":544,"path":545,"stem":546,"icon":547},"Drain pipeline","\u002Fextend\u002Fdrain-pipeline","7.extend\u002F9.drain-pipeline","i-lucide-workflow",{"title":436,"path":549,"stem":550,"children":551,"page":34},"\u002Freference","8.reference",[552,556,561,564,569,573,578,582],{"title":41,"path":553,"stem":554,"icon":555},"\u002Freference\u002Foverview","8.reference\u002F0.overview","i-lucide-book-marked",{"title":557,"path":558,"stem":559,"icon":560},"Configuration","\u002Freference\u002Fconfiguration","8.reference\u002F1.configuration","i-lucide-settings",{"title":383,"path":562,"stem":563,"icon":112},"\u002Freference\u002Fperformance","8.reference\u002F2.performance",{"title":565,"path":566,"stem":567,"icon":568},"Vite Plugin","\u002Freference\u002Fvite-plugin","8.reference\u002F3.vite-plugin","i-custom-vite",{"title":570,"path":571,"stem":572,"icon":388},"Best Practices","\u002Freference\u002Fbest-practices","8.reference\u002F4.best-practices",{"title":574,"path":575,"stem":576,"icon":577},"vs Other Loggers","\u002Freference\u002Fvs-other-loggers","8.reference\u002F5.vs-other-loggers","i-lucide-scale",{"title":579,"path":580,"stem":581,"icon":443},"Agent Skills","\u002Freference\u002Fagent-skills","8.reference\u002F6.agent-skills",{"title":583,"path":584,"stem":585,"icon":586},"Cost","\u002Freference\u002Fcost","8.reference\u002F7.cost","i-lucide-receipt",{"title":588,"path":589,"stem":590,"children":591,"page":34},"Compare","\u002Fcompare","9.compare",[592,596,600,604,608],{"title":593,"path":594,"stem":595,"icon":577},"evlog vs Pino","\u002Fcompare\u002Fpino","9.compare\u002F1.pino",{"title":597,"path":598,"stem":599,"icon":204},"evlog vs OpenTelemetry","\u002Fcompare\u002Fopentelemetry","9.compare\u002F2.opentelemetry",{"title":601,"path":602,"stem":603,"icon":577},"evlog vs LogTape","\u002Fcompare\u002Flogtape","9.compare\u002F3.logtape",{"title":605,"path":606,"stem":607,"icon":577},"evlog vs Winston: formats and request events","\u002Fcompare\u002Fwinston","9.compare\u002F4.winston",{"title":609,"path":610,"stem":611,"icon":577},"evlog vs Consola: reporters and request context","\u002Fcompare\u002Fconsola","9.compare\u002F5.consola",{"id":613,"title":614,"body":615,"description":3582,"extension":3583,"links":3584,"meta":3592,"navigation":3593,"path":167,"seo":3594,"stem":168,"__hash__":3595},"docs\u002F4.integrate\u002Fadapters\u002Fcloud\u002F02.posthog.md","PostHog Adapter",{"type":616,"value":617,"toc":3547},"minimark",[618,634,679,683,686,730,733,738,769,773,792,796,1374,1377,1380,1383,1413,1417,1458,1462,1469,1550,1554,1557,1614,1618,1791,1795,1805,1849,1853,1868,1881,1915,1918,1928,1932,1939,1948,2031,2038,2142,2146,2149,2206,2213,2249,2255,2270,2274,2280,2320,2348,2352,2358,2371,2375,2384,2479,2490,2496,2512,2516,2658,2662,2665,2753,2780,2784,2790,2820,2824,2831,2841,2932,2935,2939,3013,3016,3155,3159,3163,3172,3175,3179,3182,3202,3206,3212,3225,3229,3232,3351,3354,3514,3518,3543],[619,620,621,627,628,633],"p",{},[622,623,166],"a",{"href":624,"rel":625},"https:\u002F\u002Fposthog.com",[626],"nofollow"," is an open-source product analytics platform. The evlog PostHog adapter sends your wide events to ",[622,629,632],{"href":630,"rel":631},"https:\u002F\u002Fposthog.com\u002Fdocs\u002Flogs",[626],"PostHog Logs"," via the standard OTLP format, giving you a dedicated log viewer with filtering, search, and tail mode using your existing PostHog API key.",[635,636,639,642,667],"prompt",{":actions":637,"description":638,"icon":169},"[\"copy\",\"cursor\",\"claude\"]","Add the PostHog drain adapter",[619,640,641],{},"Add the PostHog drain adapter to send evlog wide events to PostHog Logs.",[643,644,645,649,652,655,658,661,664],"ol",{},[646,647,648],"li",{},"Identify which framework I'm using and follow its evlog integration pattern",[646,650,651],{},"Install evlog if not already installed",[646,653,654],{},"Import createPostHogDrain from 'evlog\u002Fposthog'",[646,656,657],{},"Wire createPostHogDrain() into my framework's drain configuration",[646,659,660],{},"Set POSTHOG_API_KEY environment variable",[646,662,663],{},"Optionally set POSTHOG_HOST for EU or self-hosted instances",[646,665,666],{},"Test by triggering a request and checking PostHog > Logs",[619,668,669,670,674,675],{},"Adapter docs: ",[622,671,672],{"href":672,"rel":673},"https:\u002F\u002Fwww.evlog.dev\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fposthog",[626],"\nFramework setup: ",[622,676,677],{"href":677,"rel":678},"https:\u002F\u002Fwww.evlog.dev\u002Fintegrate\u002Fframeworks\u002Foverview",[626],[680,681,20],"h2",{"id":682},"installation",[619,684,685],{},"The PostHog adapter comes bundled with evlog:",[687,688,694],"pre",{"className":689,"code":690,"filename":691,"language":692,"meta":693,"style":693},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { createPostHogDrain } from 'evlog\u002Fposthog'\n","src\u002Findex.ts","typescript","",[695,696,697],"code",{"__ignoreMap":693},[698,699,702,706,710,714,717,720,723,727],"span",{"class":700,"line":701},"line",1,[698,703,705],{"class":704},"s7zQu","import",[698,707,709],{"class":708},"sMK4o"," {",[698,711,713],{"class":712},"sTEyZ"," createPostHogDrain",[698,715,716],{"class":708}," }",[698,718,719],{"class":704}," from",[698,721,722],{"class":708}," '",[698,724,726],{"class":725},"sfazB","evlog\u002Fposthog",[698,728,729],{"class":708},"'\n",[680,731,25],{"id":732},"quick-start",[734,735,737],"h3",{"id":736},"_1-get-your-posthog-project-api-key","1. Get your PostHog project API key",[643,739,740,748,762],{},[646,741,742,743],{},"Log in to your ",[622,744,747],{"href":745,"rel":746},"https:\u002F\u002Fapp.posthog.com",[626],"PostHog dashboard",[646,749,750,751,755,756,755,759],{},"Go to ",[752,753,754],"strong",{},"Settings"," > ",[752,757,758],{},"Project",[752,760,761],{},"Project API Key",[646,763,764,765,768],{},"Copy the key (starts with ",[695,766,767],{},"phc_",")",[734,770,772],{"id":771},"_2-set-environment-variables","2. Set environment variables",[687,774,779],{"className":775,"code":776,"filename":777,"language":778,"meta":693,"style":693},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","POSTHOG_API_KEY=phc_your-project-api-key\n",".env","bash",[695,780,781],{"__ignoreMap":693},[698,782,783,786,789],{"class":700,"line":701},[698,784,785],{"class":712},"POSTHOG_API_KEY",[698,787,788],{"class":708},"=",[698,790,791],{"class":725},"phc_your-project-api-key\n",[734,793,795],{"id":794},"_3-wire-the-drain-to-your-framework","3. Wire the drain to your framework",[797,798,799,913,1044,1106,1160,1219,1273,1326],"code-group",{},[687,800,803],{"className":689,"code":801,"filename":802,"language":692,"meta":693,"style":693},"\u002F\u002F server\u002Fplugins\u002Fevlog-drain.ts\nimport { createPostHogDrain } from 'evlog\u002Fposthog'\n\nexport default defineNitroPlugin((nitroApp) => {\n  nitroApp.hooks.hook('evlog:drain', createPostHogDrain())\n})\n","Nuxt \u002F Nitro",[695,804,805,811,830,837,868,904],{"__ignoreMap":693},[698,806,807],{"class":700,"line":701},[698,808,810],{"class":809},"sHwdD","\u002F\u002F server\u002Fplugins\u002Fevlog-drain.ts\n",[698,812,814,816,818,820,822,824,826,828],{"class":700,"line":813},2,[698,815,705],{"class":704},[698,817,709],{"class":708},[698,819,713],{"class":712},[698,821,716],{"class":708},[698,823,719],{"class":704},[698,825,722],{"class":708},[698,827,726],{"class":725},[698,829,729],{"class":708},[698,831,833],{"class":700,"line":832},3,[698,834,836],{"emptyLinePlaceholder":835},true,"\n",[698,838,840,843,846,850,853,855,859,861,865],{"class":700,"line":839},4,[698,841,842],{"class":704},"export",[698,844,845],{"class":704}," default",[698,847,849],{"class":848},"s2Zo4"," defineNitroPlugin",[698,851,852],{"class":712},"(",[698,854,852],{"class":708},[698,856,858],{"class":857},"sHdIc","nitroApp",[698,860,768],{"class":708},[698,862,864],{"class":863},"spNyl"," =>",[698,866,867],{"class":708}," {\n",[698,869,871,874,877,880,882,885,888,891,894,896,899,901],{"class":700,"line":870},5,[698,872,873],{"class":712},"  nitroApp",[698,875,876],{"class":708},".",[698,878,879],{"class":712},"hooks",[698,881,876],{"class":708},[698,883,884],{"class":848},"hook",[698,886,852],{"class":887},"swJcz",[698,889,890],{"class":708},"'",[698,892,893],{"class":725},"evlog:drain",[698,895,890],{"class":708},[698,897,898],{"class":708},",",[698,900,713],{"class":848},[698,902,903],{"class":887},"())\n",[698,905,907,910],{"class":700,"line":906},6,[698,908,909],{"class":708},"}",[698,911,912],{"class":712},")\n",[687,914,916],{"className":689,"code":915,"filename":245,"language":692,"meta":693,"style":693},"\u002F\u002F lib\u002Fevlog.ts\nimport { createEvlog } from 'evlog\u002Fnext'\nimport { createPostHogDrain } from 'evlog\u002Fposthog'\n\nexport const { withEvlog, useLogger, log, createError } = createEvlog({\n  service: 'my-app',\n  drain: createPostHogDrain(),\n})\n",[695,917,918,923,943,961,965,1004,1022,1037],{"__ignoreMap":693},[698,919,920],{"class":700,"line":701},[698,921,922],{"class":809},"\u002F\u002F lib\u002Fevlog.ts\n",[698,924,925,927,929,932,934,936,938,941],{"class":700,"line":813},[698,926,705],{"class":704},[698,928,709],{"class":708},[698,930,931],{"class":712}," createEvlog",[698,933,716],{"class":708},[698,935,719],{"class":704},[698,937,722],{"class":708},[698,939,940],{"class":725},"evlog\u002Fnext",[698,942,729],{"class":708},[698,944,945,947,949,951,953,955,957,959],{"class":700,"line":832},[698,946,705],{"class":704},[698,948,709],{"class":708},[698,950,713],{"class":712},[698,952,716],{"class":708},[698,954,719],{"class":704},[698,956,722],{"class":708},[698,958,726],{"class":725},[698,960,729],{"class":708},[698,962,963],{"class":700,"line":839},[698,964,836],{"emptyLinePlaceholder":835},[698,966,967,969,972,974,977,979,982,984,987,989,992,994,997,999,1001],{"class":700,"line":870},[698,968,842],{"class":704},[698,970,971],{"class":863}," const",[698,973,709],{"class":708},[698,975,976],{"class":712}," withEvlog",[698,978,898],{"class":708},[698,980,981],{"class":712}," useLogger",[698,983,898],{"class":708},[698,985,986],{"class":712}," log",[698,988,898],{"class":708},[698,990,991],{"class":712}," createError ",[698,993,909],{"class":708},[698,995,996],{"class":708}," =",[698,998,931],{"class":848},[698,1000,852],{"class":712},[698,1002,1003],{"class":708},"{\n",[698,1005,1006,1009,1012,1014,1017,1019],{"class":700,"line":906},[698,1007,1008],{"class":887},"  service",[698,1010,1011],{"class":708},":",[698,1013,722],{"class":708},[698,1015,1016],{"class":725},"my-app",[698,1018,890],{"class":708},[698,1020,1021],{"class":708},",\n",[698,1023,1025,1028,1030,1032,1035],{"class":700,"line":1024},7,[698,1026,1027],{"class":887},"  drain",[698,1029,1011],{"class":708},[698,1031,713],{"class":848},[698,1033,1034],{"class":712},"()",[698,1036,1021],{"class":708},[698,1038,1040,1042],{"class":700,"line":1039},8,[698,1041,909],{"class":708},[698,1043,912],{"class":712},[687,1045,1047],{"className":689,"code":1046,"filename":275,"language":692,"meta":693,"style":693},"import { createPostHogDrain } from 'evlog\u002Fposthog'\n\napp.use(evlog({ drain: createPostHogDrain() }))\n",[695,1048,1049,1067,1071],{"__ignoreMap":693},[698,1050,1051,1053,1055,1057,1059,1061,1063,1065],{"class":700,"line":701},[698,1052,705],{"class":704},[698,1054,709],{"class":708},[698,1056,713],{"class":712},[698,1058,716],{"class":708},[698,1060,719],{"class":704},[698,1062,722],{"class":708},[698,1064,726],{"class":725},[698,1066,729],{"class":708},[698,1068,1069],{"class":700,"line":813},[698,1070,836],{"emptyLinePlaceholder":835},[698,1072,1073,1076,1078,1081,1083,1086,1088,1091,1094,1096,1098,1101,1103],{"class":700,"line":832},[698,1074,1075],{"class":712},"app",[698,1077,876],{"class":708},[698,1079,1080],{"class":848},"use",[698,1082,852],{"class":712},[698,1084,1085],{"class":848},"evlog",[698,1087,852],{"class":712},[698,1089,1090],{"class":708},"{",[698,1092,1093],{"class":887}," drain",[698,1095,1011],{"class":708},[698,1097,713],{"class":848},[698,1099,1100],{"class":712},"() ",[698,1102,909],{"class":708},[698,1104,1105],{"class":712},"))\n",[687,1107,1108],{"className":689,"code":1046,"filename":270,"language":692,"meta":693,"style":693},[695,1109,1110,1128,1132],{"__ignoreMap":693},[698,1111,1112,1114,1116,1118,1120,1122,1124,1126],{"class":700,"line":701},[698,1113,705],{"class":704},[698,1115,709],{"class":708},[698,1117,713],{"class":712},[698,1119,716],{"class":708},[698,1121,719],{"class":704},[698,1123,722],{"class":708},[698,1125,726],{"class":725},[698,1127,729],{"class":708},[698,1129,1130],{"class":700,"line":813},[698,1131,836],{"emptyLinePlaceholder":835},[698,1133,1134,1136,1138,1140,1142,1144,1146,1148,1150,1152,1154,1156,1158],{"class":700,"line":832},[698,1135,1075],{"class":712},[698,1137,876],{"class":708},[698,1139,1080],{"class":848},[698,1141,852],{"class":712},[698,1143,1085],{"class":848},[698,1145,852],{"class":712},[698,1147,1090],{"class":708},[698,1149,1093],{"class":887},[698,1151,1011],{"class":708},[698,1153,713],{"class":848},[698,1155,1100],{"class":712},[698,1157,909],{"class":708},[698,1159,1105],{"class":712},[687,1161,1163],{"className":689,"code":1162,"filename":280,"language":692,"meta":693,"style":693},"import { createPostHogDrain } from 'evlog\u002Fposthog'\n\nawait app.register(evlog, { drain: createPostHogDrain() })\n",[695,1164,1165,1183,1187],{"__ignoreMap":693},[698,1166,1167,1169,1171,1173,1175,1177,1179,1181],{"class":700,"line":701},[698,1168,705],{"class":704},[698,1170,709],{"class":708},[698,1172,713],{"class":712},[698,1174,716],{"class":708},[698,1176,719],{"class":704},[698,1178,722],{"class":708},[698,1180,726],{"class":725},[698,1182,729],{"class":708},[698,1184,1185],{"class":700,"line":813},[698,1186,836],{"emptyLinePlaceholder":835},[698,1188,1189,1192,1195,1197,1200,1203,1205,1207,1209,1211,1213,1215,1217],{"class":700,"line":832},[698,1190,1191],{"class":704},"await",[698,1193,1194],{"class":712}," app",[698,1196,876],{"class":708},[698,1198,1199],{"class":848},"register",[698,1201,1202],{"class":712},"(evlog",[698,1204,898],{"class":708},[698,1206,709],{"class":708},[698,1208,1093],{"class":887},[698,1210,1011],{"class":708},[698,1212,713],{"class":848},[698,1214,1100],{"class":712},[698,1216,909],{"class":708},[698,1218,912],{"class":712},[687,1220,1221],{"className":689,"code":1046,"filename":285,"language":692,"meta":693,"style":693},[695,1222,1223,1241,1245],{"__ignoreMap":693},[698,1224,1225,1227,1229,1231,1233,1235,1237,1239],{"class":700,"line":701},[698,1226,705],{"class":704},[698,1228,709],{"class":708},[698,1230,713],{"class":712},[698,1232,716],{"class":708},[698,1234,719],{"class":704},[698,1236,722],{"class":708},[698,1238,726],{"class":725},[698,1240,729],{"class":708},[698,1242,1243],{"class":700,"line":813},[698,1244,836],{"emptyLinePlaceholder":835},[698,1246,1247,1249,1251,1253,1255,1257,1259,1261,1263,1265,1267,1269,1271],{"class":700,"line":832},[698,1248,1075],{"class":712},[698,1250,876],{"class":708},[698,1252,1080],{"class":848},[698,1254,852],{"class":712},[698,1256,1085],{"class":848},[698,1258,852],{"class":712},[698,1260,1090],{"class":708},[698,1262,1093],{"class":887},[698,1264,1011],{"class":708},[698,1266,713],{"class":848},[698,1268,1100],{"class":712},[698,1270,909],{"class":708},[698,1272,1105],{"class":712},[687,1274,1276],{"className":689,"code":1275,"filename":265,"language":692,"meta":693,"style":693},"import { createPostHogDrain } from 'evlog\u002Fposthog'\n\nEvlogModule.forRoot({ drain: createPostHogDrain() })\n",[695,1277,1278,1296,1300],{"__ignoreMap":693},[698,1279,1280,1282,1284,1286,1288,1290,1292,1294],{"class":700,"line":701},[698,1281,705],{"class":704},[698,1283,709],{"class":708},[698,1285,713],{"class":712},[698,1287,716],{"class":708},[698,1289,719],{"class":704},[698,1291,722],{"class":708},[698,1293,726],{"class":725},[698,1295,729],{"class":708},[698,1297,1298],{"class":700,"line":813},[698,1299,836],{"emptyLinePlaceholder":835},[698,1301,1302,1305,1307,1310,1312,1314,1316,1318,1320,1322,1324],{"class":700,"line":832},[698,1303,1304],{"class":712},"EvlogModule",[698,1306,876],{"class":708},[698,1308,1309],{"class":848},"forRoot",[698,1311,852],{"class":712},[698,1313,1090],{"class":708},[698,1315,1093],{"class":887},[698,1317,1011],{"class":708},[698,1319,713],{"class":848},[698,1321,1100],{"class":712},[698,1323,909],{"class":708},[698,1325,912],{"class":712},[687,1327,1329],{"className":689,"code":1328,"filename":300,"language":692,"meta":693,"style":693},"import { createPostHogDrain } from 'evlog\u002Fposthog'\n\ninitLogger({ drain: createPostHogDrain() })\n",[695,1330,1331,1349,1353],{"__ignoreMap":693},[698,1332,1333,1335,1337,1339,1341,1343,1345,1347],{"class":700,"line":701},[698,1334,705],{"class":704},[698,1336,709],{"class":708},[698,1338,713],{"class":712},[698,1340,716],{"class":708},[698,1342,719],{"class":704},[698,1344,722],{"class":708},[698,1346,726],{"class":725},[698,1348,729],{"class":708},[698,1350,1351],{"class":700,"line":813},[698,1352,836],{"emptyLinePlaceholder":835},[698,1354,1355,1358,1360,1362,1364,1366,1368,1370,1372],{"class":700,"line":832},[698,1356,1357],{"class":848},"initLogger",[698,1359,852],{"class":712},[698,1361,1090],{"class":708},[698,1363,1093],{"class":887},[698,1365,1011],{"class":708},[698,1367,713],{"class":848},[698,1369,1100],{"class":712},[698,1371,909],{"class":708},[698,1373,912],{"class":712},[619,1375,1376],{},"That's it! Your wide events will now appear in PostHog Logs with full OTLP structure including severity levels, trace context, and structured attributes.",[680,1378,557],{"id":1379},"configuration",[619,1381,1382],{},"The adapter reads configuration from multiple sources (highest priority first):",[643,1384,1385,1394,1404],{},[646,1386,1387,1390,1391],{},[752,1388,1389],{},"Overrides"," passed to ",[695,1392,1393],{},"createPostHogDrain()",[646,1395,1396,1399,1400,1403],{},[752,1397,1398],{},"Runtime config"," at ",[695,1401,1402],{},"runtimeConfig.posthog"," (Nuxt\u002FNitro only)",[646,1405,1406,1409,1410,768],{},[752,1407,1408],{},"Environment variables"," (",[695,1411,1412],{},"POSTHOG_*",[734,1414,1416],{"id":1415},"environment-variables","Environment Variables",[1418,1419,1420,1433],"table",{},[1421,1422,1423],"thead",{},[1424,1425,1426,1430],"tr",{},[1427,1428,1429],"th",{},"Variable",[1427,1431,1432],{},"Description",[1434,1435,1436,1448],"tbody",{},[1424,1437,1438,1443],{},[1439,1440,1441],"td",{},[695,1442,785],{},[1439,1444,1445,1446,768],{},"Project API key (starts with ",[695,1447,767],{},[1424,1449,1450,1455],{},[1439,1451,1452],{},[695,1453,1454],{},"POSTHOG_HOST",[1439,1456,1457],{},"PostHog host URL (for EU or self-hosted)",[734,1459,1461],{"id":1460},"runtime-config-nuxt-only","Runtime Config (Nuxt only)",[619,1463,1464,1465,1468],{},"Configure via ",[695,1466,1467],{},"nuxt.config.ts"," for type-safe configuration:",[687,1470,1472],{"className":689,"code":1471,"filename":1467,"language":692,"meta":693,"style":693},"export default defineNuxtConfig({\n  runtimeConfig: {\n    posthog: {\n      apiKey: '', \u002F\u002F Set via POSTHOG_API_KEY\n      host: '', \u002F\u002F Set via POSTHOG_HOST\n    },\n  },\n})\n",[695,1473,1474,1487,1496,1505,1520,1534,1539,1544],{"__ignoreMap":693},[698,1475,1476,1478,1480,1483,1485],{"class":700,"line":701},[698,1477,842],{"class":704},[698,1479,845],{"class":704},[698,1481,1482],{"class":848}," defineNuxtConfig",[698,1484,852],{"class":712},[698,1486,1003],{"class":708},[698,1488,1489,1492,1494],{"class":700,"line":813},[698,1490,1491],{"class":887},"  runtimeConfig",[698,1493,1011],{"class":708},[698,1495,867],{"class":708},[698,1497,1498,1501,1503],{"class":700,"line":832},[698,1499,1500],{"class":887},"    posthog",[698,1502,1011],{"class":708},[698,1504,867],{"class":708},[698,1506,1507,1510,1512,1515,1517],{"class":700,"line":839},[698,1508,1509],{"class":887},"      apiKey",[698,1511,1011],{"class":708},[698,1513,1514],{"class":708}," ''",[698,1516,898],{"class":708},[698,1518,1519],{"class":809}," \u002F\u002F Set via POSTHOG_API_KEY\n",[698,1521,1522,1525,1527,1529,1531],{"class":700,"line":870},[698,1523,1524],{"class":887},"      host",[698,1526,1011],{"class":708},[698,1528,1514],{"class":708},[698,1530,898],{"class":708},[698,1532,1533],{"class":809}," \u002F\u002F Set via POSTHOG_HOST\n",[698,1535,1536],{"class":700,"line":906},[698,1537,1538],{"class":708},"    },\n",[698,1540,1541],{"class":700,"line":1024},[698,1542,1543],{"class":708},"  },\n",[698,1545,1546,1548],{"class":700,"line":1039},[698,1547,909],{"class":708},[698,1549,912],{"class":712},[734,1551,1553],{"id":1552},"override-options","Override Options",[619,1555,1556],{},"Pass options directly to override any configuration:",[687,1558,1561],{"className":689,"code":1559,"filename":1560,"language":692,"meta":693,"style":693},"const drain = createPostHogDrain({\n  host: 'https:\u002F\u002Feu.i.posthog.com',\n  timeout: 10000,\n})\n","server\u002Fplugins\u002Fevlog-drain.ts",[695,1562,1563,1579,1595,1608],{"__ignoreMap":693},[698,1564,1565,1568,1571,1573,1575,1577],{"class":700,"line":701},[698,1566,1567],{"class":863},"const",[698,1569,1570],{"class":712}," drain ",[698,1572,788],{"class":708},[698,1574,713],{"class":848},[698,1576,852],{"class":712},[698,1578,1003],{"class":708},[698,1580,1581,1584,1586,1588,1591,1593],{"class":700,"line":813},[698,1582,1583],{"class":887},"  host",[698,1585,1011],{"class":708},[698,1587,722],{"class":708},[698,1589,1590],{"class":725},"https:\u002F\u002Feu.i.posthog.com",[698,1592,890],{"class":708},[698,1594,1021],{"class":708},[698,1596,1597,1600,1602,1606],{"class":700,"line":832},[698,1598,1599],{"class":887},"  timeout",[698,1601,1011],{"class":708},[698,1603,1605],{"class":1604},"sbssI"," 10000",[698,1607,1021],{"class":708},[698,1609,1610,1612],{"class":700,"line":839},[698,1611,909],{"class":708},[698,1613,912],{"class":712},[734,1615,1617],{"id":1616},"full-configuration-reference","Full Configuration Reference",[1418,1619,1620,1635],{},[1421,1621,1622],{},[1424,1623,1624,1627,1630,1633],{},[1427,1625,1626],{},"Option",[1427,1628,1629],{},"Type",[1427,1631,1632],{},"Default",[1427,1634,1432],{},[1434,1636,1637,1655,1674,1690,1709,1728,1752,1772],{},[1424,1638,1639,1644,1649,1652],{},[1439,1640,1641],{},[695,1642,1643],{},"apiKey",[1439,1645,1646],{},[695,1647,1648],{},"string",[1439,1650,1651],{},"-",[1439,1653,1654],{},"Project API key (required)",[1424,1656,1657,1662,1666,1671],{},[1439,1658,1659],{},[695,1660,1661],{},"host",[1439,1663,1664],{},[695,1665,1648],{},[1439,1667,1668],{},[695,1669,1670],{},"https:\u002F\u002Fus.i.posthog.com",[1439,1672,1673],{},"PostHog host URL",[1424,1675,1676,1681,1685,1687],{},[1439,1677,1678],{},[695,1679,1680],{},"distinctId",[1439,1682,1683],{},[695,1684,1648],{},[1439,1686,1651],{},[1439,1688,1689],{},"Static person identifier for every event",[1424,1691,1692,1697,1701,1706],{},[1439,1693,1694],{},[695,1695,1696],{},"distinctIdField",[1439,1698,1699],{},[695,1700,1648],{},[1439,1702,1703],{},[695,1704,1705],{},"userId",[1439,1707,1708],{},"Event field holding the person identifier (dot path)",[1424,1710,1711,1716,1720,1725],{},[1439,1712,1713],{},[695,1714,1715],{},"sessionIdField",[1439,1717,1718],{},[695,1719,1648],{},[1439,1721,1722],{},[695,1723,1724],{},"sessionId",[1439,1726,1727],{},"Event field holding the PostHog session id (dot path)",[1424,1729,1730,1735,1740,1745],{},[1439,1731,1732],{},[695,1733,1734],{},"recordShape",[1439,1736,1737],{},[695,1738,1739],{},"'json' | 'compact'",[1439,1741,1742],{},[695,1743,1744],{},"'json'",[1439,1746,1747,1748],{},"Log record shape, see ",[622,1749,1751],{"href":1750},"#choose-a-record-shape","below",[1424,1753,1754,1759,1764,1769],{},[1439,1755,1756],{},[695,1757,1758],{},"timeout",[1439,1760,1761],{},[695,1762,1763],{},"number",[1439,1765,1766],{},[695,1767,1768],{},"5000",[1439,1770,1771],{},"Request timeout in milliseconds",[1424,1773,1774,1779,1783,1788],{},[1439,1775,1776],{},[695,1777,1778],{},"retries",[1439,1780,1781],{},[695,1782,1763],{},[1439,1784,1785],{},[695,1786,1787],{},"2",[1439,1789,1790],{},"Retry attempts on transient failures",[680,1792,1794],{"id":1793},"what-happens-between-a-log-and-posthog","What happens between a log and PostHog",[619,1796,1797,1798,1800,1801,1804],{},"Under the hood, ",[695,1799,1393],{}," wraps the OTLP adapter's ",[695,1802,1803],{},"sendBatchToOTLP()"," with PostHog-specific defaults:",[1806,1807,1808,1818,1827,1837],"ul",{},[646,1809,1810,1813,1814,1817],{},[752,1811,1812],{},"Endpoint",": ",[695,1815,1816],{},"{host}\u002Fi\u002Fv1\u002Flogs"," (PostHog's OTLP log ingest endpoint)",[646,1819,1820,1813,1823,1826],{},[752,1821,1822],{},"Auth",[695,1824,1825],{},"Authorization: Bearer {apiKey}"," header",[646,1828,1829,1832,1833,1836],{},[752,1830,1831],{},"Format",": Standard OTLP ",[695,1834,1835],{},"ExportLogsServiceRequest"," with severity levels, trace context, and structured attributes",[646,1838,1839,1813,1842,1845,1846,1848],{},[752,1840,1841],{},"Identity",[695,1843,1844],{},"posthogDistinctId"," and ",[695,1847,1724],{}," attributes, which is how PostHog joins a log to the rest of your project data",[680,1850,1852],{"id":1851},"choose-a-record-shape","Choose a record shape",[619,1854,1855,1856,1859,1860,1863,1864,1867],{},"PostHog treats log attributes as facets: you filter, break down, and alert on them. With the default ",[695,1857,1858],{},"json"," shape a nested field arrives as one serialized attribute (",[695,1861,1862],{},"ai"," = ",[695,1865,1866],{},"{\"calls\":2,\"costUsd\":0.0012}","), which PostHog can display but not chart.",[619,1869,1870,1873,1874,1845,1877,1880],{},[695,1871,1872],{},"compact"," flattens those into ",[695,1875,1876],{},"ai.calls",[695,1878,1879],{},"ai.costUsd",", and replaces the body with a one-line summary instead of repeating the whole event:",[687,1882,1884],{"className":689,"code":1883,"filename":1560,"language":692,"meta":693,"style":693},"const drain = createPostHogDrain({ recordShape: 'compact' })\n",[695,1885,1886],{"__ignoreMap":693},[698,1887,1888,1890,1892,1894,1896,1898,1900,1903,1905,1907,1909,1911,1913],{"class":700,"line":701},[698,1889,1567],{"class":863},[698,1891,1570],{"class":712},[698,1893,788],{"class":708},[698,1895,713],{"class":848},[698,1897,852],{"class":712},[698,1899,1090],{"class":708},[698,1901,1902],{"class":887}," recordShape",[698,1904,1011],{"class":708},[698,1906,722],{"class":708},[698,1908,1872],{"class":725},[698,1910,890],{"class":708},[698,1912,716],{"class":708},[698,1914,912],{"class":712},[619,1916,1917],{},"This is the recommended shape for PostHog. It also cuts what you send: Logs is billed per GB ingested, and the default shape transmits every field twice: once in the body, once in the attributes.",[1919,1920,1922,1924,1925,1927],"callout",{"color":1921,"icon":13},"info",[695,1923,1872],{}," becomes the default in the next major. Set it on a new project now; switching later means rewriting the saved views and alerts built on the ",[695,1926,1858],{}," shape.",[680,1929,1931],{"id":1930},"link-a-log-to-a-person-and-a-session-replay","Link a log to a person and a session replay",[619,1933,1934,1935,1938],{},"A log that carries a person identifier shows up on that person's profile in PostHog, under the ",[752,1936,1937],{},"Logs"," tab, with no service-name guessing to find what a specific user hit. Carry a session id too and the log links to their session replay.",[619,1940,1941,1942,1944,1945,1947],{},"PostHog reads both from log attributes: ",[695,1943,1844],{}," for the person, ",[695,1946,1724],{}," for the replay. The adapter fills them from your wide event, so this works as soon as your event carries the values:",[687,1949,1952],{"className":689,"code":1950,"filename":1951,"language":692,"meta":693,"style":693},"const log = useLogger(event)\n\nlog.set({\n  userId: user.id, \u002F\u002F → posthogDistinctId, links to the person\n  sessionId: body.sessionId, \u002F\u002F → sessionId, links to the session replay\n})\n","server\u002Fapi\u002Fcheckout.post.ts",[695,1953,1954,1968,1972,1986,2006,2025],{"__ignoreMap":693},[698,1955,1956,1958,1961,1963,1965],{"class":700,"line":701},[698,1957,1567],{"class":863},[698,1959,1960],{"class":712}," log ",[698,1962,788],{"class":708},[698,1964,981],{"class":848},[698,1966,1967],{"class":712},"(event)\n",[698,1969,1970],{"class":700,"line":813},[698,1971,836],{"emptyLinePlaceholder":835},[698,1973,1974,1977,1979,1982,1984],{"class":700,"line":832},[698,1975,1976],{"class":712},"log",[698,1978,876],{"class":708},[698,1980,1981],{"class":848},"set",[698,1983,852],{"class":712},[698,1985,1003],{"class":708},[698,1987,1988,1991,1993,1996,1998,2001,2003],{"class":700,"line":839},[698,1989,1990],{"class":887},"  userId",[698,1992,1011],{"class":708},[698,1994,1995],{"class":712}," user",[698,1997,876],{"class":708},[698,1999,2000],{"class":712},"id",[698,2002,898],{"class":708},[698,2004,2005],{"class":809}," \u002F\u002F → posthogDistinctId, links to the person\n",[698,2007,2008,2011,2013,2016,2018,2020,2022],{"class":700,"line":870},[698,2009,2010],{"class":887},"  sessionId",[698,2012,1011],{"class":708},[698,2014,2015],{"class":712}," body",[698,2017,876],{"class":708},[698,2019,1724],{"class":712},[698,2021,898],{"class":708},[698,2023,2024],{"class":809}," \u002F\u002F → sessionId, links to the session replay\n",[698,2026,2027,2029],{"class":700,"line":906},[698,2028,909],{"class":708},[698,2030,912],{"class":712},[619,2032,2033,2034,2037],{},"The session id comes from the frontend. Read it with ",[695,2035,2036],{},"posthog.get_session_id()"," and send it along with the request:",[687,2039,2042],{"className":689,"code":2040,"filename":2041,"language":692,"meta":693,"style":693},"import posthog from 'posthog-js'\n\nawait $fetch('\u002Fapi\u002Fcheckout', {\n  method: 'POST',\n  body: { ...payload, sessionId: posthog.get_session_id() },\n})\n","app\u002Fcheckout.ts",[695,2043,2044,2061,2065,2085,2101,2136],{"__ignoreMap":693},[698,2045,2046,2048,2051,2054,2056,2059],{"class":700,"line":701},[698,2047,705],{"class":704},[698,2049,2050],{"class":712}," posthog ",[698,2052,2053],{"class":704},"from",[698,2055,722],{"class":708},[698,2057,2058],{"class":725},"posthog-js",[698,2060,729],{"class":708},[698,2062,2063],{"class":700,"line":813},[698,2064,836],{"emptyLinePlaceholder":835},[698,2066,2067,2069,2072,2074,2076,2079,2081,2083],{"class":700,"line":832},[698,2068,1191],{"class":704},[698,2070,2071],{"class":848}," $fetch",[698,2073,852],{"class":712},[698,2075,890],{"class":708},[698,2077,2078],{"class":725},"\u002Fapi\u002Fcheckout",[698,2080,890],{"class":708},[698,2082,898],{"class":708},[698,2084,867],{"class":708},[698,2086,2087,2090,2092,2094,2097,2099],{"class":700,"line":839},[698,2088,2089],{"class":887},"  method",[698,2091,1011],{"class":708},[698,2093,722],{"class":708},[698,2095,2096],{"class":725},"POST",[698,2098,890],{"class":708},[698,2100,1021],{"class":708},[698,2102,2103,2106,2108,2110,2113,2116,2118,2121,2123,2126,2128,2131,2133],{"class":700,"line":870},[698,2104,2105],{"class":887},"  body",[698,2107,1011],{"class":708},[698,2109,709],{"class":708},[698,2111,2112],{"class":708}," ...",[698,2114,2115],{"class":712},"payload",[698,2117,898],{"class":708},[698,2119,2120],{"class":887}," sessionId",[698,2122,1011],{"class":708},[698,2124,2125],{"class":712}," posthog",[698,2127,876],{"class":708},[698,2129,2130],{"class":848},"get_session_id",[698,2132,1100],{"class":712},[698,2134,2135],{"class":708},"},\n",[698,2137,2138,2140],{"class":700,"line":906},[698,2139,909],{"class":708},[698,2141,912],{"class":712},[734,2143,2145],{"id":2144},"point-at-your-own-fields","Point at your own fields",[619,2147,2148],{},"When identity lives somewhere else on your events, point the adapter at it. Both options take a dot path:",[687,2150,2152],{"className":689,"code":2151,"filename":1560,"language":692,"meta":693,"style":693},"const drain = createPostHogDrain({\n  distinctIdField: 'user.id',\n  sessionIdField: 'session.id',\n})\n",[695,2153,2154,2168,2184,2200],{"__ignoreMap":693},[698,2155,2156,2158,2160,2162,2164,2166],{"class":700,"line":701},[698,2157,1567],{"class":863},[698,2159,1570],{"class":712},[698,2161,788],{"class":708},[698,2163,713],{"class":848},[698,2165,852],{"class":712},[698,2167,1003],{"class":708},[698,2169,2170,2173,2175,2177,2180,2182],{"class":700,"line":813},[698,2171,2172],{"class":887},"  distinctIdField",[698,2174,1011],{"class":708},[698,2176,722],{"class":708},[698,2178,2179],{"class":725},"user.id",[698,2181,890],{"class":708},[698,2183,1021],{"class":708},[698,2185,2186,2189,2191,2193,2196,2198],{"class":700,"line":832},[698,2187,2188],{"class":887},"  sessionIdField",[698,2190,1011],{"class":708},[698,2192,722],{"class":708},[698,2194,2195],{"class":725},"session.id",[698,2197,890],{"class":708},[698,2199,1021],{"class":708},[698,2201,2202,2204],{"class":700,"line":839},[698,2203,909],{"class":708},[698,2205,912],{"class":712},[619,2207,2208,2209,2212],{},"For an ",[622,2210,2211],{"href":446},"eve agent",", the caller principal is the identity eve itself routes on:",[687,2214,2217],{"className":689,"code":2215,"filename":2216,"language":692,"meta":693,"style":693},"const drain = createPostHogDrain({ distinctIdField: 'eve.caller.principalId' })\n","agent\u002Fhooks\u002Fevlog.ts",[695,2218,2219],{"__ignoreMap":693},[698,2220,2221,2223,2225,2227,2229,2231,2233,2236,2238,2240,2243,2245,2247],{"class":700,"line":701},[698,2222,1567],{"class":863},[698,2224,1570],{"class":712},[698,2226,788],{"class":708},[698,2228,713],{"class":848},[698,2230,852],{"class":712},[698,2232,1090],{"class":708},[698,2234,2235],{"class":887}," distinctIdField",[698,2237,1011],{"class":708},[698,2239,722],{"class":708},[698,2241,2242],{"class":725},"eve.caller.principalId",[698,2244,890],{"class":708},[698,2246,716],{"class":708},[698,2248,912],{"class":712},[619,2250,2251,2252,2254],{},"A static ",[695,2253,1680],{}," overrides the field lookup entirely. Use it for a backend that acts as one identity rather than on behalf of users.",[1919,2256,2257,2258,2261,2262,755,2264,2266,2267,2269],{"color":1921,"icon":13},"PostHog matches the attribute value against every ",[695,2259,2260],{},"distinct_id"," it knows for a person, so any one of their identifiers works. The attribute key is configurable per project under ",[752,2263,754],{},[752,2265,1937],{},". Leave it at the default ",[695,2268,1844],{}," and this works out of the box.",[680,2271,2273],{"id":2272},"regions","Regions",[619,2275,2276,2277,2279],{},"PostHog offers US and EU cloud hosting. Set the ",[695,2278,1661],{}," to match your region:",[1418,2281,2282,2292],{},[1421,2283,2284],{},[1424,2285,2286,2289],{},[1427,2287,2288],{},"Region",[1427,2290,2291],{},"Host",[1434,2293,2294,2303,2312],{},[1424,2295,2296,2299],{},[1439,2297,2298],{},"US (default)",[1439,2300,2301],{},[695,2302,1670],{},[1424,2304,2305,2308],{},[1439,2306,2307],{},"EU",[1439,2309,2310],{},[695,2311,1590],{},[1424,2313,2314,2317],{},[1439,2315,2316],{},"Self-hosted",[1439,2318,2319],{},"Your instance URL",[687,2321,2323],{"className":775,"code":2322,"filename":777,"language":778,"meta":693,"style":693},"# EU region\nPOSTHOG_API_KEY=phc_xxx\nPOSTHOG_HOST=https:\u002F\u002Feu.i.posthog.com\n",[695,2324,2325,2330,2339],{"__ignoreMap":693},[698,2326,2327],{"class":700,"line":701},[698,2328,2329],{"class":809},"# EU region\n",[698,2331,2332,2334,2336],{"class":700,"line":813},[698,2333,785],{"class":712},[698,2335,788],{"class":708},[698,2337,2338],{"class":725},"phc_xxx\n",[698,2340,2341,2343,2345],{"class":700,"line":832},[698,2342,1454],{"class":712},[698,2344,788],{"class":708},[698,2346,2347],{"class":725},"https:\u002F\u002Feu.i.posthog.com\n",[680,2349,2351],{"id":2350},"query-the-logs-in-posthog","Query the logs in PostHog",[619,2353,2354,2355,2357],{},"Once your logs are flowing, use the ",[752,2356,1937],{}," tab in PostHog to query them:",[643,2359,2360,2365,2368],{},[646,2361,750,2362,2364],{},[752,2363,1937],{}," and filter by service, severity, or any structured attribute",[646,2366,2367],{},"Use the search bar to find specific log entries",[646,2369,2370],{},"Click on a log entry to see all structured attributes",[680,2372,2374],{"id":2373},"send-custom-events-alongside-logs","Send custom events alongside logs",[619,2376,2377,2378,2380,2381,1011],{},"If you prefer sending logs as PostHog custom events (e.g., for product analytics, cohorts, or funnels), use ",[695,2379,1393],{}," with ",[695,2382,2383],{},"mode: 'events'",[687,2385,2387],{"className":689,"code":2386,"filename":1560,"language":692,"meta":693,"style":693},"import { createPostHogDrain } from 'evlog\u002Fposthog'\n\nconst drain = createPostHogDrain({\n  mode: 'events',\n  eventName: 'server_request',\n  distinctId: 'my-backend-service',\n})\n",[695,2388,2389,2407,2411,2425,2441,2457,2473],{"__ignoreMap":693},[698,2390,2391,2393,2395,2397,2399,2401,2403,2405],{"class":700,"line":701},[698,2392,705],{"class":704},[698,2394,709],{"class":708},[698,2396,713],{"class":712},[698,2398,716],{"class":708},[698,2400,719],{"class":704},[698,2402,722],{"class":708},[698,2404,726],{"class":725},[698,2406,729],{"class":708},[698,2408,2409],{"class":700,"line":813},[698,2410,836],{"emptyLinePlaceholder":835},[698,2412,2413,2415,2417,2419,2421,2423],{"class":700,"line":832},[698,2414,1567],{"class":863},[698,2416,1570],{"class":712},[698,2418,788],{"class":708},[698,2420,713],{"class":848},[698,2422,852],{"class":712},[698,2424,1003],{"class":708},[698,2426,2427,2430,2432,2434,2437,2439],{"class":700,"line":839},[698,2428,2429],{"class":887},"  mode",[698,2431,1011],{"class":708},[698,2433,722],{"class":708},[698,2435,2436],{"class":725},"events",[698,2438,890],{"class":708},[698,2440,1021],{"class":708},[698,2442,2443,2446,2448,2450,2453,2455],{"class":700,"line":870},[698,2444,2445],{"class":887},"  eventName",[698,2447,1011],{"class":708},[698,2449,722],{"class":708},[698,2451,2452],{"class":725},"server_request",[698,2454,890],{"class":708},[698,2456,1021],{"class":708},[698,2458,2459,2462,2464,2466,2469,2471],{"class":700,"line":906},[698,2460,2461],{"class":887},"  distinctId",[698,2463,1011],{"class":708},[698,2465,722],{"class":708},[698,2467,2468],{"class":725},"my-backend-service",[698,2470,890],{"class":708},[698,2472,1021],{"class":708},[698,2474,2475,2477],{"class":700,"line":1024},[698,2476,909],{"class":708},[698,2478,912],{"class":712},[619,2480,2481,2482,2485,2486,2489],{},"Then pass ",[695,2483,2484],{},"drain"," to your framework the same way as the default logs drain (see ",[622,2487,25],{"href":2488},"#quick-start"," above).",[1919,2491,2492,2493,2495],{"color":1921,"icon":13},"Custom events count towards your PostHog event quota. PostHog Logs (the default ",[695,2494,1393],{},") is significantly cheaper.",[1919,2497,2500,2503,2504,2507,2508,2511],{"color":2498,"icon":2499},"warning","i-lucide-triangle-alert",[752,2501,2502],{},"Legacy:"," ",[695,2505,2506],{},"createPostHogEventsDrain()"," is deprecated and re-routes to ",[695,2509,2510],{},"createPostHogDrain({ mode: 'events' })",". It will be removed in the next major release.",[734,2513,2515],{"id":2514},"configure-which-events-go-out","Configure which events go out",[1418,2517,2518,2530],{},[1421,2519,2520],{},[1424,2521,2522,2524,2526,2528],{},[1427,2523,1626],{},[1427,2525,1629],{},[1427,2527,1632],{},[1427,2529,1432],{},[1434,2531,2532,2546,2562,2581,2599,2619,2642],{},[1424,2533,2534,2538,2542,2544],{},[1439,2535,2536],{},[695,2537,1643],{},[1439,2539,2540],{},[695,2541,1648],{},[1439,2543,1651],{},[1439,2545,1654],{},[1424,2547,2548,2552,2556,2560],{},[1439,2549,2550],{},[695,2551,1661],{},[1439,2553,2554],{},[695,2555,1648],{},[1439,2557,2558],{},[695,2559,1670],{},[1439,2561,1673],{},[1424,2563,2564,2569,2573,2578],{},[1439,2565,2566],{},[695,2567,2568],{},"eventName",[1439,2570,2571],{},[695,2572,1648],{},[1439,2574,2575],{},[695,2576,2577],{},"evlog_wide_event",[1439,2579,2580],{},"PostHog event name",[1424,2582,2583,2587,2591,2593],{},[1439,2584,2585],{},[695,2586,1680],{},[1439,2588,2589],{},[695,2590,1648],{},[1439,2592,1651],{},[1439,2594,2595,2596,2598],{},"Static ",[695,2597,2260],{}," for all events",[1424,2600,2601,2605,2609,2613],{},[1439,2602,2603],{},[695,2604,1696],{},[1439,2606,2607],{},[695,2608,1648],{},[1439,2610,2611],{},[695,2612,1705],{},[1439,2614,2615,2616,2618],{},"Event field holding the ",[695,2617,2260],{}," (dot path)",[1424,2620,2621,2625,2629,2633],{},[1439,2622,2623],{},[695,2624,1734],{},[1439,2626,2627],{},[695,2628,1739],{},[1439,2630,2631],{},[695,2632,1744],{},[1439,2634,2635,2636,2638,2639,768],{},"Event property shape: ",[695,2637,1872],{}," flattens nested fields (see ",[622,2640,1751],{"href":2641},"#event-format",[1424,2643,2644,2648,2652,2656],{},[1439,2645,2646],{},[695,2647,1758],{},[1439,2649,2650],{},[695,2651,1763],{},[1439,2653,2654],{},[695,2655,1768],{},[1439,2657,1771],{},[734,2659,2661],{"id":2660},"event-format","Event Format",[619,2663,2664],{},"evlog maps wide events to PostHog events:",[1418,2666,2667,2677],{},[1421,2668,2669],{},[1424,2670,2671,2674],{},[1427,2672,2673],{},"evlog Field",[1427,2675,2676],{},"PostHog Field",[1434,2678,2679,2697,2708,2720,2731,2743],{},[1424,2680,2681,2692],{},[1439,2682,2683,2686,2687,2686,2689],{},[695,2684,2685],{},"config.distinctId"," or ",[695,2688,1705],{},[695,2690,2691],{},"service",[1439,2693,2694,2696],{},[695,2695,2260],{}," (fallback chain)",[1424,2698,2699,2704],{},[1439,2700,2701],{},[695,2702,2703],{},"timestamp",[1439,2705,2706],{},[695,2707,2703],{},[1424,2709,2710,2715],{},[1439,2711,2712],{},[695,2713,2714],{},"level",[1439,2716,2717],{},[695,2718,2719],{},"properties.level",[1424,2721,2722,2726],{},[1439,2723,2724],{},[695,2725,2691],{},[1439,2727,2728],{},[695,2729,2730],{},"properties.service",[1424,2732,2733,2738],{},[1439,2734,2735],{},[695,2736,2737],{},"environment",[1439,2739,2740],{},[695,2741,2742],{},"properties.environment",[1424,2744,2745,2748],{},[1439,2746,2747],{},"All other fields",[1439,2749,2750],{},[695,2751,2752],{},"properties.*",[619,2754,2755,2756,2759,2760,2762,2763,1845,2766,2769,2770,2773,2774,2776,2777,2779],{},"With ",[695,2757,2758],{},"recordShape: 'compact'",", the other fields are flattened into dotted keys the same way as in logs mode: a nested ",[695,2761,1862],{}," object arrives as ",[695,2764,2765],{},"properties.ai.costUsd",[695,2767,2768],{},"properties.ai.calls"," instead of one opaque ",[695,2771,2772],{},"properties.ai"," value. PostHog can filter and break down on those individual properties; the default ",[695,2775,1858],{}," shape keeps the nested object as a single serialized property. See ",[622,2778,1852],{"href":1750}," for the trade-off and how it affects your saved views and alerts.",[734,2781,2783],{"id":2782},"how-the-distinct-id-is-resolved","How the distinct ID is resolved",[619,2785,2786,2787,2789],{},"The ",[695,2788,2260],{}," follows a fallback chain:",[643,2791,2792,2801,2812],{},[646,2793,2794,2798,2799],{},[752,2795,2796],{},[695,2797,2685],{}," - explicit override in ",[695,2800,2510],{},[646,2802,2803,2808,2809,2811],{},[752,2804,2805],{},[695,2806,2807],{},"event.userId"," - or whatever ",[695,2810,1696],{}," points at, when it holds a string or a number",[646,2813,2814,2819],{},[752,2815,2816],{},[695,2817,2818],{},"event.service"," - final fallback, sent as an anonymous event",[734,2821,2823],{"id":2822},"identified-and-anonymous-events","Identified and anonymous events",[619,2825,2826,2827,2830],{},"An event that resolves to a real person is an ",[752,2828,2829],{},"identified"," event: PostHog creates a person profile for it and attaches person properties.",[619,2832,2833,2834,1409,2837,2840],{},"When no identifier resolves, the event is sent as ",[752,2835,2836],{},"anonymous",[695,2838,2839],{},"$process_person_profile: false",") rather than piling every request onto one \"person\" named after your service. PostHog bills anonymous events at a lower rate and keeps them out of person profiles.",[687,2842,2844],{"className":689,"code":2843,"filename":1560,"language":692,"meta":693,"style":693},"\u002F\u002F Identified: events carrying `userId` create and update a person profile\nconst drain = createPostHogDrain({ mode: 'events' })\n\n\u002F\u002F Identified as one backend identity, whatever the request\nconst service = createPostHogDrain({ mode: 'events', distinctId: 'checkout-worker' })\n",[695,2845,2846,2851,2880,2884,2889],{"__ignoreMap":693},[698,2847,2848],{"class":700,"line":701},[698,2849,2850],{"class":809},"\u002F\u002F Identified: events carrying `userId` create and update a person profile\n",[698,2852,2853,2855,2857,2859,2861,2863,2865,2868,2870,2872,2874,2876,2878],{"class":700,"line":813},[698,2854,1567],{"class":863},[698,2856,1570],{"class":712},[698,2858,788],{"class":708},[698,2860,713],{"class":848},[698,2862,852],{"class":712},[698,2864,1090],{"class":708},[698,2866,2867],{"class":887}," mode",[698,2869,1011],{"class":708},[698,2871,722],{"class":708},[698,2873,2436],{"class":725},[698,2875,890],{"class":708},[698,2877,716],{"class":708},[698,2879,912],{"class":712},[698,2881,2882],{"class":700,"line":832},[698,2883,836],{"emptyLinePlaceholder":835},[698,2885,2886],{"class":700,"line":839},[698,2887,2888],{"class":809},"\u002F\u002F Identified as one backend identity, whatever the request\n",[698,2890,2891,2893,2896,2898,2900,2902,2904,2906,2908,2910,2912,2914,2916,2919,2921,2923,2926,2928,2930],{"class":700,"line":870},[698,2892,1567],{"class":863},[698,2894,2895],{"class":712}," service ",[698,2897,788],{"class":708},[698,2899,713],{"class":848},[698,2901,852],{"class":712},[698,2903,1090],{"class":708},[698,2905,2867],{"class":887},[698,2907,1011],{"class":708},[698,2909,722],{"class":708},[698,2911,2436],{"class":725},[698,2913,890],{"class":708},[698,2915,898],{"class":708},[698,2917,2918],{"class":887}," distinctId",[698,2920,1011],{"class":708},[698,2922,722],{"class":708},[698,2924,2925],{"class":725},"checkout-worker",[698,2927,890],{"class":708},[698,2929,716],{"class":708},[698,2931,912],{"class":712},[1919,2933,2934],{"color":1921,"icon":13},"Anonymous events can be up to 4× cheaper than identified ones. Only set an identity on the events where you actually need per-person analysis.",[734,2936,2938],{"id":2937},"when-to-use-a-log-and-when-to-use-an-event","When to use a log and when to use an event",[1418,2940,2941,2955],{},[1421,2942,2943],{},[1424,2944,2945,2947,2951],{},[1427,2946],{},[1427,2948,2949],{},[695,2950,1393],{},[1427,2952,2953],{},[695,2954,2510],{},[1434,2956,2957,2975,2988,3000],{},[1424,2958,2959,2963,2969],{},[1439,2960,2961],{},[752,2962,1831],{},[1439,2964,2965,2966,768],{},"OTLP Logs (",[695,2967,2968],{},"\u002Fi\u002Fv1\u002Flogs",[1439,2970,2971,2972,768],{},"PostHog Events (",[695,2973,2974],{},"\u002Fbatch\u002F",[1424,2976,2977,2982,2985],{},[1439,2978,2979],{},[752,2980,2981],{},"PostHog UI",[1439,2983,2984],{},"Logs viewer",[1439,2986,2987],{},"Events explorer",[1424,2989,2990,2994,2997],{},[1439,2991,2992],{},[752,2993,583],{},[1439,2995,2996],{},"Lower (dedicated logs pipeline)",[1439,2998,2999],{},"Higher (counts as events)",[1424,3001,3002,3007,3010],{},[1439,3003,3004],{},[752,3005,3006],{},"Best for",[1439,3008,3009],{},"Debugging, log search, observability",[1439,3011,3012],{},"Product analytics, cohorts, funnels",[619,3014,3015],{},"You can use both drains simultaneously to get the best of both worlds:",[687,3017,3019],{"className":689,"code":3018,"filename":1560,"language":692,"meta":693,"style":693},"import { createPostHogDrain } from 'evlog\u002Fposthog'\n\nconst logs = createPostHogDrain()\nconst events = createPostHogDrain({ mode: 'events' })\n\nconst drain = async (ctx) => {\n  await Promise.allSettled([logs(ctx), events(ctx)])\n}\n",[695,3020,3021,3039,3043,3057,3086,3090,3112,3150],{"__ignoreMap":693},[698,3022,3023,3025,3027,3029,3031,3033,3035,3037],{"class":700,"line":701},[698,3024,705],{"class":704},[698,3026,709],{"class":708},[698,3028,713],{"class":712},[698,3030,716],{"class":708},[698,3032,719],{"class":704},[698,3034,722],{"class":708},[698,3036,726],{"class":725},[698,3038,729],{"class":708},[698,3040,3041],{"class":700,"line":813},[698,3042,836],{"emptyLinePlaceholder":835},[698,3044,3045,3047,3050,3052,3054],{"class":700,"line":832},[698,3046,1567],{"class":863},[698,3048,3049],{"class":712}," logs ",[698,3051,788],{"class":708},[698,3053,713],{"class":848},[698,3055,3056],{"class":712},"()\n",[698,3058,3059,3061,3064,3066,3068,3070,3072,3074,3076,3078,3080,3082,3084],{"class":700,"line":839},[698,3060,1567],{"class":863},[698,3062,3063],{"class":712}," events ",[698,3065,788],{"class":708},[698,3067,713],{"class":848},[698,3069,852],{"class":712},[698,3071,1090],{"class":708},[698,3073,2867],{"class":887},[698,3075,1011],{"class":708},[698,3077,722],{"class":708},[698,3079,2436],{"class":725},[698,3081,890],{"class":708},[698,3083,716],{"class":708},[698,3085,912],{"class":712},[698,3087,3088],{"class":700,"line":870},[698,3089,836],{"emptyLinePlaceholder":835},[698,3091,3092,3094,3096,3098,3101,3103,3106,3108,3110],{"class":700,"line":906},[698,3093,1567],{"class":863},[698,3095,1570],{"class":712},[698,3097,788],{"class":708},[698,3099,3100],{"class":863}," async",[698,3102,1409],{"class":708},[698,3104,3105],{"class":857},"ctx",[698,3107,768],{"class":708},[698,3109,864],{"class":863},[698,3111,867],{"class":708},[698,3113,3114,3117,3121,3123,3126,3129,3132,3134,3136,3138,3140,3143,3145,3147],{"class":700,"line":1024},[698,3115,3116],{"class":704},"  await",[698,3118,3120],{"class":3119},"sBMFI"," Promise",[698,3122,876],{"class":708},[698,3124,3125],{"class":848},"allSettled",[698,3127,3128],{"class":887},"([",[698,3130,3131],{"class":848},"logs",[698,3133,852],{"class":887},[698,3135,3105],{"class":712},[698,3137,768],{"class":887},[698,3139,898],{"class":708},[698,3141,3142],{"class":848}," events",[698,3144,852],{"class":887},[698,3146,3105],{"class":712},[698,3148,3149],{"class":887},")])\n",[698,3151,3152],{"class":700,"line":1039},[698,3153,3154],{"class":708},"}\n",[680,3156,3158],{"id":3157},"troubleshooting","Troubleshooting",[734,3160,3162],{"id":3161},"missing-apikey-error","Missing apiKey error",[687,3164,3170],{"className":3165,"code":3167,"filename":3168,"language":3169,"meta":693},[3166],"language-text","[evlog\u002Fposthog] Missing apiKey. Set POSTHOG_API_KEY env var or pass to createPostHogDrain()\n","Console","text",[695,3171,3167],{"__ignoreMap":693},[619,3173,3174],{},"Make sure your environment variable is set and the server was restarted after adding it.",[734,3176,3178],{"id":3177},"events-not-appearing","Events not appearing",[619,3180,3181],{},"PostHog processes events asynchronously. There may be a short delay (typically under 1 minute) before events appear in the dashboard.",[643,3183,3184,3191,3196],{},[646,3185,3186,3187,3190],{},"Check the server console for ",[695,3188,3189],{},"[evlog\u002Fposthog]"," error messages",[646,3192,3193,3194],{},"Verify your API key is correct and starts with ",[695,3195,767],{},[646,3197,3198,3199,3201],{},"Confirm your ",[695,3200,1661],{}," matches your PostHog region (US vs EU)",[734,3203,3205],{"id":3204},"wrong-region","Wrong region",[619,3207,3208,3209,3211],{},"If you're on PostHog EU but using the default US host, event delivery will fail and the adapter will log errors (for example under ",[695,3210,3189],{},") to your server console. Set the correct host:",[687,3213,3215],{"className":775,"code":3214,"filename":777,"language":778,"meta":693,"style":693},"POSTHOG_HOST=https:\u002F\u002Feu.i.posthog.com\n",[695,3216,3217],{"__ignoreMap":693},[698,3218,3219,3221,3223],{"class":700,"line":701},[698,3220,1454],{"class":712},[698,3222,788],{"class":708},[698,3224,2347],{"class":725},[680,3226,3228],{"id":3227},"call-the-drain-without-a-framework","Call the drain without a framework",[619,3230,3231],{},"For advanced use cases, you can use the lower-level functions:",[687,3233,3236],{"className":689,"code":3234,"filename":3235,"language":692,"meta":693,"style":693},"import { sendToPostHog, sendBatchToPostHog } from 'evlog\u002Fposthog'\n\n\u002F\u002F Send a single event to PostHog Logs (OTLP)\nawait sendToPostHog(event, {\n  apiKey: 'phc_xxx',\n})\n\n\u002F\u002F Send multiple events in one request\nawait sendBatchToPostHog(events, {\n  apiKey: 'phc_xxx',\n})\n","server\u002Futils\u002Fposthog.ts",[695,3237,3238,3262,3266,3271,3284,3300,3306,3310,3315,3329,3344],{"__ignoreMap":693},[698,3239,3240,3242,3244,3247,3249,3252,3254,3256,3258,3260],{"class":700,"line":701},[698,3241,705],{"class":704},[698,3243,709],{"class":708},[698,3245,3246],{"class":712}," sendToPostHog",[698,3248,898],{"class":708},[698,3250,3251],{"class":712}," sendBatchToPostHog",[698,3253,716],{"class":708},[698,3255,719],{"class":704},[698,3257,722],{"class":708},[698,3259,726],{"class":725},[698,3261,729],{"class":708},[698,3263,3264],{"class":700,"line":813},[698,3265,836],{"emptyLinePlaceholder":835},[698,3267,3268],{"class":700,"line":832},[698,3269,3270],{"class":809},"\u002F\u002F Send a single event to PostHog Logs (OTLP)\n",[698,3272,3273,3275,3277,3280,3282],{"class":700,"line":839},[698,3274,1191],{"class":704},[698,3276,3246],{"class":848},[698,3278,3279],{"class":712},"(event",[698,3281,898],{"class":708},[698,3283,867],{"class":708},[698,3285,3286,3289,3291,3293,3296,3298],{"class":700,"line":870},[698,3287,3288],{"class":887},"  apiKey",[698,3290,1011],{"class":708},[698,3292,722],{"class":708},[698,3294,3295],{"class":725},"phc_xxx",[698,3297,890],{"class":708},[698,3299,1021],{"class":708},[698,3301,3302,3304],{"class":700,"line":906},[698,3303,909],{"class":708},[698,3305,912],{"class":712},[698,3307,3308],{"class":700,"line":1024},[698,3309,836],{"emptyLinePlaceholder":835},[698,3311,3312],{"class":700,"line":1039},[698,3313,3314],{"class":809},"\u002F\u002F Send multiple events in one request\n",[698,3316,3318,3320,3322,3325,3327],{"class":700,"line":3317},9,[698,3319,1191],{"class":704},[698,3321,3251],{"class":848},[698,3323,3324],{"class":712},"(events",[698,3326,898],{"class":708},[698,3328,867],{"class":708},[698,3330,3332,3334,3336,3338,3340,3342],{"class":700,"line":3331},10,[698,3333,3288],{"class":887},[698,3335,1011],{"class":708},[698,3337,722],{"class":708},[698,3339,3295],{"class":725},[698,3341,890],{"class":708},[698,3343,1021],{"class":708},[698,3345,3347,3349],{"class":700,"line":3346},11,[698,3348,909],{"class":708},[698,3350,912],{"class":712},[619,3352,3353],{},"For custom events, use the events-specific functions:",[687,3355,3357],{"className":689,"code":3356,"filename":3235,"language":692,"meta":693,"style":693},"import { sendToPostHogEvents, sendBatchToPostHogEvents, toPostHogEvent } from 'evlog\u002Fposthog'\n\n\u002F\u002F Send a single custom event\nawait sendToPostHogEvents(event, {\n  apiKey: 'phc_xxx',\n})\n\n\u002F\u002F Send multiple custom events in one request\nawait sendBatchToPostHogEvents(events, {\n  apiKey: 'phc_xxx',\n})\n\n\u002F\u002F Convert event to PostHog format (for inspection)\nconst posthogEvent = toPostHogEvent(event, { apiKey: 'phc_xxx' })\n",[695,3358,3359,3388,3392,3397,3409,3423,3429,3433,3438,3450,3464,3470,3475,3481],{"__ignoreMap":693},[698,3360,3361,3363,3365,3368,3370,3373,3375,3378,3380,3382,3384,3386],{"class":700,"line":701},[698,3362,705],{"class":704},[698,3364,709],{"class":708},[698,3366,3367],{"class":712}," sendToPostHogEvents",[698,3369,898],{"class":708},[698,3371,3372],{"class":712}," sendBatchToPostHogEvents",[698,3374,898],{"class":708},[698,3376,3377],{"class":712}," toPostHogEvent",[698,3379,716],{"class":708},[698,3381,719],{"class":704},[698,3383,722],{"class":708},[698,3385,726],{"class":725},[698,3387,729],{"class":708},[698,3389,3390],{"class":700,"line":813},[698,3391,836],{"emptyLinePlaceholder":835},[698,3393,3394],{"class":700,"line":832},[698,3395,3396],{"class":809},"\u002F\u002F Send a single custom event\n",[698,3398,3399,3401,3403,3405,3407],{"class":700,"line":839},[698,3400,1191],{"class":704},[698,3402,3367],{"class":848},[698,3404,3279],{"class":712},[698,3406,898],{"class":708},[698,3408,867],{"class":708},[698,3410,3411,3413,3415,3417,3419,3421],{"class":700,"line":870},[698,3412,3288],{"class":887},[698,3414,1011],{"class":708},[698,3416,722],{"class":708},[698,3418,3295],{"class":725},[698,3420,890],{"class":708},[698,3422,1021],{"class":708},[698,3424,3425,3427],{"class":700,"line":906},[698,3426,909],{"class":708},[698,3428,912],{"class":712},[698,3430,3431],{"class":700,"line":1024},[698,3432,836],{"emptyLinePlaceholder":835},[698,3434,3435],{"class":700,"line":1039},[698,3436,3437],{"class":809},"\u002F\u002F Send multiple custom events in one request\n",[698,3439,3440,3442,3444,3446,3448],{"class":700,"line":3317},[698,3441,1191],{"class":704},[698,3443,3372],{"class":848},[698,3445,3324],{"class":712},[698,3447,898],{"class":708},[698,3449,867],{"class":708},[698,3451,3452,3454,3456,3458,3460,3462],{"class":700,"line":3331},[698,3453,3288],{"class":887},[698,3455,1011],{"class":708},[698,3457,722],{"class":708},[698,3459,3295],{"class":725},[698,3461,890],{"class":708},[698,3463,1021],{"class":708},[698,3465,3466,3468],{"class":700,"line":3346},[698,3467,909],{"class":708},[698,3469,912],{"class":712},[698,3471,3473],{"class":700,"line":3472},12,[698,3474,836],{"emptyLinePlaceholder":835},[698,3476,3478],{"class":700,"line":3477},13,[698,3479,3480],{"class":809},"\u002F\u002F Convert event to PostHog format (for inspection)\n",[698,3482,3484,3486,3489,3491,3493,3495,3497,3499,3502,3504,3506,3508,3510,3512],{"class":700,"line":3483},14,[698,3485,1567],{"class":863},[698,3487,3488],{"class":712}," posthogEvent ",[698,3490,788],{"class":708},[698,3492,3377],{"class":848},[698,3494,3279],{"class":712},[698,3496,898],{"class":708},[698,3498,709],{"class":708},[698,3500,3501],{"class":887}," apiKey",[698,3503,1011],{"class":708},[698,3505,722],{"class":708},[698,3507,3295],{"class":725},[698,3509,890],{"class":708},[698,3511,716],{"class":708},[698,3513,912],{"class":712},[680,3515,3517],{"id":3516},"next-steps","Next Steps",[1806,3519,3520,3526,3532,3538],{},[646,3521,3522,3525],{},[622,3523,3524],{"href":162},"Axiom Adapter"," - Send logs to Axiom",[646,3527,3528,3531],{},[622,3529,3530],{"href":202},"OTLP Adapter"," - Send logs via OpenTelemetry Protocol",[646,3533,3534,3537],{},[622,3535,3536],{"href":540},"Custom Adapters"," - Build your own adapter",[646,3539,3540,3542],{},[622,3541,570],{"href":571}," - Security and production tips",[3544,3545,3546],"style",{},"html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}",{"title":693,"searchDepth":813,"depth":813,"links":3548},[3549,3550,3555,3561,3562,3563,3566,3567,3568,3575,3580,3581],{"id":682,"depth":813,"text":20},{"id":732,"depth":813,"text":25,"children":3551},[3552,3553,3554],{"id":736,"depth":832,"text":737},{"id":771,"depth":832,"text":772},{"id":794,"depth":832,"text":795},{"id":1379,"depth":813,"text":557,"children":3556},[3557,3558,3559,3560],{"id":1415,"depth":832,"text":1416},{"id":1460,"depth":832,"text":1461},{"id":1552,"depth":832,"text":1553},{"id":1616,"depth":832,"text":1617},{"id":1793,"depth":813,"text":1794},{"id":1851,"depth":813,"text":1852},{"id":1930,"depth":813,"text":1931,"children":3564},[3565],{"id":2144,"depth":832,"text":2145},{"id":2272,"depth":813,"text":2273},{"id":2350,"depth":813,"text":2351},{"id":2373,"depth":813,"text":2374,"children":3569},[3570,3571,3572,3573,3574],{"id":2514,"depth":832,"text":2515},{"id":2660,"depth":832,"text":2661},{"id":2782,"depth":832,"text":2783},{"id":2822,"depth":832,"text":2823},{"id":2937,"depth":832,"text":2938},{"id":3157,"depth":813,"text":3158,"children":3576},[3577,3578,3579],{"id":3161,"depth":832,"text":3162},{"id":3177,"depth":832,"text":3178},{"id":3204,"depth":832,"text":3205},{"id":3227,"depth":813,"text":3228},{"id":3516,"depth":813,"text":3517},"Send wide events to PostHog Logs via OTLP for structured log querying, debugging, and observability in your PostHog dashboard.","md",[3585,3591],{"label":3586,"icon":3587,"to":745,"target":3588,"color":3589,"variant":3590},"PostHog Dashboard","i-lucide-external-link","_blank","neutral","subtle",{"label":3524,"icon":164,"to":162,"color":3589,"variant":3590},{},{"title":166,"icon":169},{"title":614,"description":3582},"dwA78B71tyAF3ABrLw2YMKZSaqrdfXA5nrYwLNdeDnQ",[3597,3599],{"title":161,"path":162,"stem":163,"description":3598,"icon":164,"children":-1},"Send wide events to Axiom for powerful querying, dashboards, and alerting. Zero-config setup with environment variables and automatic batching.",{"title":171,"path":172,"stem":173,"description":3600,"icon":174,"children":-1},"Send structured logs to Sentry Logs for high-cardinality querying and debugging. Zero-config setup with environment variables.",1789294032616]