[{"data":1,"prerenderedAt":4429},["ShallowReactive",2],{"navigation_docs":3,"-integrate-adapters-hybrid-otlp":602,"-integrate-adapters-hybrid-otlp-surround":4424},[4,35,85,138,318,479,538,577],{"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,453],{"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,"icon":455,"path":456,"stem":457,"children":458,"page":34},"Signals","i-lucide-scan-search","\u002Fuse-cases\u002Fsignals","5.use-cases\u002F7.signals",[459,462,467,472,475],{"title":41,"path":460,"stem":461,"icon":44},"\u002Fuse-cases\u002Fsignals\u002Foverview","5.use-cases\u002F7.signals\u002F01.overview",{"title":463,"path":464,"stem":465,"icon":466},"What You Can Ask","\u002Fuse-cases\u002Fsignals\u002Fask","5.use-cases\u002F7.signals\u002F02.ask","i-lucide-message-circle-question",{"title":468,"path":469,"stem":470,"icon":471},"What It Costs","\u002Fuse-cases\u002Fsignals\u002Fcost","5.use-cases\u002F7.signals\u002F03.cost","i-lucide-coins",{"title":436,"path":473,"stem":474,"icon":84},"\u002Fuse-cases\u002Fsignals\u002Freference","5.use-cases\u002F7.signals\u002F04.reference",{"title":415,"path":476,"stem":477,"icon":478},"\u002Fuse-cases\u002Fsignals\u002Frecipes","5.use-cases\u002F7.signals\u002F05.recipes","i-lucide-lightbulb",{"title":480,"path":481,"stem":482,"children":483,"page":34},"Extend","\u002Fextend","6.extend",[484,488,493,498,502,507,511,515,519,523,528,533],{"title":41,"path":485,"stem":486,"icon":487},"\u002Fextend\u002Foverview","6.extend\u002F0.overview","i-lucide-blocks",{"title":489,"path":490,"stem":491,"icon":492},"Stream","\u002Fextend\u002Fstream","6.extend\u002F1.stream","i-lucide-radio-tower",{"title":494,"path":495,"stem":496,"icon":497},"Custom framework","\u002Fextend\u002Fcustom-framework","6.extend\u002F10.custom-framework","i-lucide-puzzle",{"title":499,"path":500,"stem":501,"icon":492},"Diagnostics channel","\u002Fextend\u002Fdiagnostics-channel","6.extend\u002F11.diagnostics-channel",{"title":503,"path":504,"stem":505,"icon":506},"FS reader","\u002Fextend\u002Ffs-reader","6.extend\u002F2.fs-reader","i-lucide-folder-search",{"title":415,"path":508,"stem":509,"icon":510},"\u002Fextend\u002Fconsumer-recipes","6.extend\u002F3.consumer-recipes","i-lucide-chef-hat",{"title":512,"path":513,"stem":514,"icon":487},"Plugins","\u002Fextend\u002Fplugins","6.extend\u002F4.plugins",{"title":516,"path":517,"stem":518,"icon":443},"Custom enrichers","\u002Fextend\u002Fcustom-enrichers","6.extend\u002F5.custom-enrichers",{"title":520,"path":521,"stem":522,"icon":69},"Tail sampling","\u002Fextend\u002Ftail-sampling","6.extend\u002F6.tail-sampling",{"title":524,"path":525,"stem":526,"icon":527},"Identity headers","\u002Fextend\u002Fidentity-headers","6.extend\u002F7.identity-headers","i-lucide-fingerprint",{"title":529,"path":530,"stem":531,"icon":532},"Custom drains","\u002Fextend\u002Fcustom-drains","6.extend\u002F8.custom-drains","i-lucide-share-2",{"title":534,"path":535,"stem":536,"icon":537},"Drain pipeline","\u002Fextend\u002Fdrain-pipeline","6.extend\u002F9.drain-pipeline","i-lucide-workflow",{"title":436,"path":539,"stem":540,"children":541,"page":34},"\u002Freference","7.reference",[542,546,551,554,559,563,568,572],{"title":41,"path":543,"stem":544,"icon":545},"\u002Freference\u002Foverview","7.reference\u002F0.overview","i-lucide-book-marked",{"title":547,"path":548,"stem":549,"icon":550},"Configuration","\u002Freference\u002Fconfiguration","7.reference\u002F1.configuration","i-lucide-settings",{"title":383,"path":552,"stem":553,"icon":112},"\u002Freference\u002Fperformance","7.reference\u002F2.performance",{"title":555,"path":556,"stem":557,"icon":558},"Vite Plugin","\u002Freference\u002Fvite-plugin","7.reference\u002F3.vite-plugin","i-custom-vite",{"title":560,"path":561,"stem":562,"icon":388},"Best Practices","\u002Freference\u002Fbest-practices","7.reference\u002F4.best-practices",{"title":564,"path":565,"stem":566,"icon":567},"vs Other Loggers","\u002Freference\u002Fvs-other-loggers","7.reference\u002F5.vs-other-loggers","i-lucide-scale",{"title":569,"path":570,"stem":571,"icon":443},"Agent Skills","\u002Freference\u002Fagent-skills","7.reference\u002F6.agent-skills",{"title":573,"path":574,"stem":575,"icon":576},"Cost","\u002Freference\u002Fcost","7.reference\u002F7.cost","i-lucide-receipt",{"title":578,"path":579,"stem":580,"children":581,"page":34},"Compare","\u002Fcompare","8.compare",[582,586,590,594,598],{"title":583,"path":584,"stem":585,"icon":567},"evlog vs Pino","\u002Fcompare\u002Fpino","8.compare\u002F1.pino",{"title":587,"path":588,"stem":589,"icon":204},"evlog vs OpenTelemetry","\u002Fcompare\u002Fopentelemetry","8.compare\u002F2.opentelemetry",{"title":591,"path":592,"stem":593,"icon":567},"evlog vs LogTape","\u002Fcompare\u002Flogtape","8.compare\u002F3.logtape",{"title":595,"path":596,"stem":597,"icon":567},"evlog vs Winston: formats and request events","\u002Fcompare\u002Fwinston","8.compare\u002F4.winston",{"title":599,"path":600,"stem":601,"icon":567},"evlog vs Consola: reporters and request context","\u002Fcompare\u002Fconsola","8.compare\u002F5.consola",{"id":603,"title":604,"body":605,"description":4409,"extension":4410,"links":4411,"meta":4420,"navigation":4421,"path":202,"seo":4422,"stem":203,"__hash__":4423},"docs\u002F4.integrate\u002Fadapters\u002Fhybrid\u002F03.otlp.md","OTLP Adapter",{"type":606,"value":607,"toc":4378},"minimark",[608,612,656,702,706,709,753,756,761,780,784,1880,1883,1886,1912,1916,2088,2097,2101,2170,2174,2301,2305,2508,2512,2515,2519,2522,2655,2704,2716,2719,2723,2726,2811,2820,2824,2827,2949,2970,3006,3035,3039,3046,3597,3602,3714,3732,3740,3744,3757,3914,3920,3924,3937,4006,4016,4020,4113,4117,4121,4130,4133,4137,4140,4154,4158,4164,4177,4181,4196,4200,4203,4345,4349,4374],[609,610,611],"p",{},"The OTLP (OpenTelemetry Protocol) adapter sends logs in the standard OpenTelemetry format. This works with any OTLP-compatible backend including:",[613,614,615,623,627,632,637,642,647,652],"ul",{},[616,617,618,622],"li",{},[619,620,621],"strong",{},"Grafana Cloud"," (Loki)",[616,624,625],{},[619,626,181],{},[616,628,629],{},[619,630,631],{},"Honeycomb",[616,633,634],{},[619,635,636],{},"Jaeger",[616,638,639],{},[619,640,641],{},"Splunk",[616,643,644],{},[619,645,646],{},"New Relic",[616,648,649],{},[619,650,651],{},"Self-hosted OpenTelemetry Collector",[616,653,654],{},[619,655,206],{},[657,658,661,664,688],"prompt",{":actions":659,"description":660,"icon":204},"[\"copy\",\"cursor\",\"claude\"]","Add the OTLP drain adapter",[609,662,663],{},"Add the OTLP drain adapter to send evlog wide events via OpenTelemetry Protocol.",[665,666,667,670,673,676,679,682,685],"ol",{},[616,668,669],{},"Identify which framework I'm using and follow its evlog integration pattern",[616,671,672],{},"Install evlog if not already installed",[616,674,675],{},"Import createOTLPDrain from 'evlog\u002Fotlp'",[616,677,678],{},"Wire createOTLPDrain() into my framework's drain configuration",[616,680,681],{},"Set OTLP_ENDPOINT environment variable (collector URL)",[616,683,684],{},"Optionally set OTLP_HEADERS for authentication",[616,686,687],{},"Test by triggering a request and checking your OTLP backend (Grafana, Datadog, Honeycomb, etc.)",[609,689,690,691,697,698],{},"Adapter docs: ",[692,693,694],"a",{"href":694,"rel":695},"https:\u002F\u002Fwww.evlog.dev\u002Fintegrate\u002Fadapters\u002Fhybrid\u002Fotlp",[696],"nofollow","\nFramework setup: ",[692,699,700],{"href":700,"rel":701},"https:\u002F\u002Fwww.evlog.dev\u002Fintegrate\u002Fframeworks\u002Foverview",[696],[703,704,20],"h2",{"id":705},"installation",[609,707,708],{},"The OTLP adapter comes bundled with evlog:",[710,711,717],"pre",{"className":712,"code":713,"filename":714,"language":715,"meta":716,"style":716},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { createOTLPDrain } from 'evlog\u002Fotlp'\n","src\u002Findex.ts","typescript","",[718,719,720],"code",{"__ignoreMap":716},[721,722,725,729,733,737,740,743,746,750],"span",{"class":723,"line":724},"line",1,[721,726,728],{"class":727},"s7zQu","import",[721,730,732],{"class":731},"sMK4o"," {",[721,734,736],{"class":735},"sTEyZ"," createOTLPDrain",[721,738,739],{"class":731}," }",[721,741,742],{"class":727}," from",[721,744,745],{"class":731}," '",[721,747,749],{"class":748},"sfazB","evlog\u002Fotlp",[721,751,752],{"class":731},"'\n",[703,754,25],{"id":755},"quick-start",[757,758,760],"h3",{"id":759},"_1-set-your-otlp-endpoint","1. Set your OTLP endpoint",[710,762,767],{"className":763,"code":764,"filename":765,"language":766,"meta":716,"style":716},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","OTLP_ENDPOINT=http:\u002F\u002Flocalhost:4318\n",".env","bash",[718,768,769],{"__ignoreMap":716},[721,770,771,774,777],{"class":723,"line":724},[721,772,773],{"class":735},"OTLP_ENDPOINT",[721,775,776],{"class":731},"=",[721,778,779],{"class":748},"http:\u002F\u002Flocalhost:4318\n",[757,781,783],{"id":782},"_2-wire-the-drain-to-your-framework","2. Wire the drain to your framework",[785,786,787,895,973,1100,1189,1288,1392,1451,1505,1564,1618,1672,1758,1832],"framework-tabs",{},[710,788,791],{"className":712,"code":789,"filename":240,"language":715,"meta":790,"style":716},"import { createOTLPDrain } from 'evlog\u002Fotlp'\n\nexport default defineNitroPlugin((nitroApp) => {\n  nitroApp.hooks.hook('evlog:drain', createOTLPDrain())\n})\n","server\u002Fplugins\u002Fevlog-drain.ts",[718,792,793,811,818,850,886],{"__ignoreMap":716},[721,794,795,797,799,801,803,805,807,809],{"class":723,"line":724},[721,796,728],{"class":727},[721,798,732],{"class":731},[721,800,736],{"class":735},[721,802,739],{"class":731},[721,804,742],{"class":727},[721,806,745],{"class":731},[721,808,749],{"class":748},[721,810,752],{"class":731},[721,812,814],{"class":723,"line":813},2,[721,815,817],{"emptyLinePlaceholder":816},true,"\n",[721,819,821,824,827,831,834,836,840,843,847],{"class":723,"line":820},3,[721,822,823],{"class":727},"export",[721,825,826],{"class":727}," default",[721,828,830],{"class":829},"s2Zo4"," defineNitroPlugin",[721,832,833],{"class":735},"(",[721,835,833],{"class":731},[721,837,839],{"class":838},"sHdIc","nitroApp",[721,841,842],{"class":731},")",[721,844,846],{"class":845},"spNyl"," =>",[721,848,849],{"class":731}," {\n",[721,851,853,856,859,862,864,867,870,873,876,878,881,883],{"class":723,"line":852},4,[721,854,855],{"class":735},"  nitroApp",[721,857,858],{"class":731},".",[721,860,861],{"class":735},"hooks",[721,863,858],{"class":731},[721,865,866],{"class":829},"hook",[721,868,833],{"class":869},"swJcz",[721,871,872],{"class":731},"'",[721,874,875],{"class":748},"evlog:drain",[721,877,872],{"class":731},[721,879,880],{"class":731},",",[721,882,736],{"class":829},[721,884,885],{"class":869},"())\n",[721,887,889,892],{"class":723,"line":888},5,[721,890,891],{"class":731},"}",[721,893,894],{"class":735},")\n",[710,896,897],{"className":712,"code":789,"filename":255,"language":715,"meta":790,"style":716},[718,898,899,917,921,941,967],{"__ignoreMap":716},[721,900,901,903,905,907,909,911,913,915],{"class":723,"line":724},[721,902,728],{"class":727},[721,904,732],{"class":731},[721,906,736],{"class":735},[721,908,739],{"class":731},[721,910,742],{"class":727},[721,912,745],{"class":731},[721,914,749],{"class":748},[721,916,752],{"class":731},[721,918,919],{"class":723,"line":813},[721,920,817],{"emptyLinePlaceholder":816},[721,922,923,925,927,929,931,933,935,937,939],{"class":723,"line":820},[721,924,823],{"class":727},[721,926,826],{"class":727},[721,928,830],{"class":829},[721,930,833],{"class":735},[721,932,833],{"class":731},[721,934,839],{"class":838},[721,936,842],{"class":731},[721,938,846],{"class":845},[721,940,849],{"class":731},[721,942,943,945,947,949,951,953,955,957,959,961,963,965],{"class":723,"line":852},[721,944,855],{"class":735},[721,946,858],{"class":731},[721,948,861],{"class":735},[721,950,858],{"class":731},[721,952,866],{"class":829},[721,954,833],{"class":869},[721,956,872],{"class":731},[721,958,875],{"class":748},[721,960,872],{"class":731},[721,962,880],{"class":731},[721,964,736],{"class":829},[721,966,885],{"class":869},[721,968,969,971],{"class":723,"line":888},[721,970,891],{"class":731},[721,972,894],{"class":735},[710,974,977],{"className":712,"code":975,"filename":245,"language":715,"meta":976,"style":716},"import { createEvlog } from 'evlog\u002Fnext'\nimport { createOTLPDrain } from 'evlog\u002Fotlp'\n\nexport const { withEvlog, useLogger, log, createError } = createEvlog({\n  service: 'my-app',\n  drain: createOTLPDrain(),\n})\n","lib\u002Fevlog.ts",[718,978,979,999,1017,1021,1060,1078,1093],{"__ignoreMap":716},[721,980,981,983,985,988,990,992,994,997],{"class":723,"line":724},[721,982,728],{"class":727},[721,984,732],{"class":731},[721,986,987],{"class":735}," createEvlog",[721,989,739],{"class":731},[721,991,742],{"class":727},[721,993,745],{"class":731},[721,995,996],{"class":748},"evlog\u002Fnext",[721,998,752],{"class":731},[721,1000,1001,1003,1005,1007,1009,1011,1013,1015],{"class":723,"line":813},[721,1002,728],{"class":727},[721,1004,732],{"class":731},[721,1006,736],{"class":735},[721,1008,739],{"class":731},[721,1010,742],{"class":727},[721,1012,745],{"class":731},[721,1014,749],{"class":748},[721,1016,752],{"class":731},[721,1018,1019],{"class":723,"line":820},[721,1020,817],{"emptyLinePlaceholder":816},[721,1022,1023,1025,1028,1030,1033,1035,1038,1040,1043,1045,1048,1050,1053,1055,1057],{"class":723,"line":852},[721,1024,823],{"class":727},[721,1026,1027],{"class":845}," const",[721,1029,732],{"class":731},[721,1031,1032],{"class":735}," withEvlog",[721,1034,880],{"class":731},[721,1036,1037],{"class":735}," useLogger",[721,1039,880],{"class":731},[721,1041,1042],{"class":735}," log",[721,1044,880],{"class":731},[721,1046,1047],{"class":735}," createError ",[721,1049,891],{"class":731},[721,1051,1052],{"class":731}," =",[721,1054,987],{"class":829},[721,1056,833],{"class":735},[721,1058,1059],{"class":731},"{\n",[721,1061,1062,1065,1068,1070,1073,1075],{"class":723,"line":888},[721,1063,1064],{"class":869},"  service",[721,1066,1067],{"class":731},":",[721,1069,745],{"class":731},[721,1071,1072],{"class":748},"my-app",[721,1074,872],{"class":731},[721,1076,1077],{"class":731},",\n",[721,1079,1081,1084,1086,1088,1091],{"class":723,"line":1080},6,[721,1082,1083],{"class":869},"  drain",[721,1085,1067],{"class":731},[721,1087,736],{"class":829},[721,1089,1090],{"class":735},"()",[721,1092,1077],{"class":731},[721,1094,1096,1098],{"class":723,"line":1095},7,[721,1097,891],{"class":731},[721,1099,894],{"class":735},[710,1101,1104],{"className":712,"code":1102,"filename":250,"language":715,"meta":1103,"style":716},"import { createEvlogHooks } from 'evlog\u002Fsveltekit'\nimport { createOTLPDrain } from 'evlog\u002Fotlp'\n\nexport const { handle, handleError } = createEvlogHooks({ drain: createOTLPDrain() })\n","src\u002Fhooks.server.ts",[718,1105,1106,1126,1144,1148],{"__ignoreMap":716},[721,1107,1108,1110,1112,1115,1117,1119,1121,1124],{"class":723,"line":724},[721,1109,728],{"class":727},[721,1111,732],{"class":731},[721,1113,1114],{"class":735}," createEvlogHooks",[721,1116,739],{"class":731},[721,1118,742],{"class":727},[721,1120,745],{"class":731},[721,1122,1123],{"class":748},"evlog\u002Fsveltekit",[721,1125,752],{"class":731},[721,1127,1128,1130,1132,1134,1136,1138,1140,1142],{"class":723,"line":813},[721,1129,728],{"class":727},[721,1131,732],{"class":731},[721,1133,736],{"class":735},[721,1135,739],{"class":731},[721,1137,742],{"class":727},[721,1139,745],{"class":731},[721,1141,749],{"class":748},[721,1143,752],{"class":731},[721,1145,1146],{"class":723,"line":820},[721,1147,817],{"emptyLinePlaceholder":816},[721,1149,1150,1152,1154,1156,1159,1161,1164,1166,1168,1170,1172,1175,1178,1180,1182,1185,1187],{"class":723,"line":852},[721,1151,823],{"class":727},[721,1153,1027],{"class":845},[721,1155,732],{"class":731},[721,1157,1158],{"class":735}," handle",[721,1160,880],{"class":731},[721,1162,1163],{"class":735}," handleError ",[721,1165,891],{"class":731},[721,1167,1052],{"class":731},[721,1169,1114],{"class":829},[721,1171,833],{"class":735},[721,1173,1174],{"class":731},"{",[721,1176,1177],{"class":869}," drain",[721,1179,1067],{"class":731},[721,1181,736],{"class":829},[721,1183,1184],{"class":735},"() ",[721,1186,891],{"class":731},[721,1188,894],{"class":735},[710,1190,1192],{"className":712,"code":1191,"filename":260,"language":715,"meta":790,"style":716},"import { definePlugin } from 'nitro'\nimport { createOTLPDrain } from 'evlog\u002Fotlp'\n\nexport default definePlugin((nitroApp) => {\n  nitroApp.hooks.hook('evlog:drain', createOTLPDrain())\n})\n",[718,1193,1194,1214,1232,1236,1256,1282],{"__ignoreMap":716},[721,1195,1196,1198,1200,1203,1205,1207,1209,1212],{"class":723,"line":724},[721,1197,728],{"class":727},[721,1199,732],{"class":731},[721,1201,1202],{"class":735}," definePlugin",[721,1204,739],{"class":731},[721,1206,742],{"class":727},[721,1208,745],{"class":731},[721,1210,1211],{"class":748},"nitro",[721,1213,752],{"class":731},[721,1215,1216,1218,1220,1222,1224,1226,1228,1230],{"class":723,"line":813},[721,1217,728],{"class":727},[721,1219,732],{"class":731},[721,1221,736],{"class":735},[721,1223,739],{"class":731},[721,1225,742],{"class":727},[721,1227,745],{"class":731},[721,1229,749],{"class":748},[721,1231,752],{"class":731},[721,1233,1234],{"class":723,"line":820},[721,1235,817],{"emptyLinePlaceholder":816},[721,1237,1238,1240,1242,1244,1246,1248,1250,1252,1254],{"class":723,"line":852},[721,1239,823],{"class":727},[721,1241,826],{"class":727},[721,1243,1202],{"class":829},[721,1245,833],{"class":735},[721,1247,833],{"class":731},[721,1249,839],{"class":838},[721,1251,842],{"class":731},[721,1253,846],{"class":845},[721,1255,849],{"class":731},[721,1257,1258,1260,1262,1264,1266,1268,1270,1272,1274,1276,1278,1280],{"class":723,"line":888},[721,1259,855],{"class":735},[721,1261,858],{"class":731},[721,1263,861],{"class":735},[721,1265,858],{"class":731},[721,1267,866],{"class":829},[721,1269,833],{"class":869},[721,1271,872],{"class":731},[721,1273,875],{"class":748},[721,1275,872],{"class":731},[721,1277,880],{"class":731},[721,1279,736],{"class":829},[721,1281,885],{"class":869},[721,1283,1284,1286],{"class":723,"line":1080},[721,1285,891],{"class":731},[721,1287,894],{"class":735},[710,1289,1292],{"className":712,"code":1290,"filename":290,"language":715,"meta":1291,"style":716},"import { evlog } from 'evlog\u002Freact-router'\nimport { createOTLPDrain } from 'evlog\u002Fotlp'\n\nexport const middleware: Route.MiddlewareFunction[] = [\n  evlog({ drain: createOTLPDrain() }),\n]\n","app\u002Froot.tsx",[718,1293,1294,1314,1332,1336,1364,1387],{"__ignoreMap":716},[721,1295,1296,1298,1300,1303,1305,1307,1309,1312],{"class":723,"line":724},[721,1297,728],{"class":727},[721,1299,732],{"class":731},[721,1301,1302],{"class":735}," evlog",[721,1304,739],{"class":731},[721,1306,742],{"class":727},[721,1308,745],{"class":731},[721,1310,1311],{"class":748},"evlog\u002Freact-router",[721,1313,752],{"class":731},[721,1315,1316,1318,1320,1322,1324,1326,1328,1330],{"class":723,"line":813},[721,1317,728],{"class":727},[721,1319,732],{"class":731},[721,1321,736],{"class":735},[721,1323,739],{"class":731},[721,1325,742],{"class":727},[721,1327,745],{"class":731},[721,1329,749],{"class":748},[721,1331,752],{"class":731},[721,1333,1334],{"class":723,"line":820},[721,1335,817],{"emptyLinePlaceholder":816},[721,1337,1338,1340,1342,1345,1347,1351,1353,1356,1359,1361],{"class":723,"line":852},[721,1339,823],{"class":727},[721,1341,1027],{"class":845},[721,1343,1344],{"class":735}," middleware",[721,1346,1067],{"class":731},[721,1348,1350],{"class":1349},"sBMFI"," Route",[721,1352,858],{"class":731},[721,1354,1355],{"class":1349},"MiddlewareFunction",[721,1357,1358],{"class":735},"[] ",[721,1360,776],{"class":731},[721,1362,1363],{"class":735}," [\n",[721,1365,1366,1369,1371,1373,1375,1377,1379,1381,1383,1385],{"class":723,"line":888},[721,1367,1368],{"class":829},"  evlog",[721,1370,833],{"class":735},[721,1372,1174],{"class":731},[721,1374,1177],{"class":869},[721,1376,1067],{"class":731},[721,1378,736],{"class":829},[721,1380,1184],{"class":735},[721,1382,891],{"class":731},[721,1384,842],{"class":735},[721,1386,1077],{"class":731},[721,1388,1389],{"class":723,"line":1080},[721,1390,1391],{"class":735},"]\n",[710,1393,1395],{"className":712,"code":1394,"filename":275,"language":715,"meta":714,"style":716},"import { createOTLPDrain } from 'evlog\u002Fotlp'\n\napp.use(evlog({ drain: createOTLPDrain() }))\n",[718,1396,1397,1415,1419],{"__ignoreMap":716},[721,1398,1399,1401,1403,1405,1407,1409,1411,1413],{"class":723,"line":724},[721,1400,728],{"class":727},[721,1402,732],{"class":731},[721,1404,736],{"class":735},[721,1406,739],{"class":731},[721,1408,742],{"class":727},[721,1410,745],{"class":731},[721,1412,749],{"class":748},[721,1414,752],{"class":731},[721,1416,1417],{"class":723,"line":813},[721,1418,817],{"emptyLinePlaceholder":816},[721,1420,1421,1424,1426,1429,1431,1434,1436,1438,1440,1442,1444,1446,1448],{"class":723,"line":820},[721,1422,1423],{"class":735},"app",[721,1425,858],{"class":731},[721,1427,1428],{"class":829},"use",[721,1430,833],{"class":735},[721,1432,1433],{"class":829},"evlog",[721,1435,833],{"class":735},[721,1437,1174],{"class":731},[721,1439,1177],{"class":869},[721,1441,1067],{"class":731},[721,1443,736],{"class":829},[721,1445,1184],{"class":735},[721,1447,891],{"class":731},[721,1449,1450],{"class":735},"))\n",[710,1452,1453],{"className":712,"code":1394,"filename":270,"language":715,"meta":714,"style":716},[718,1454,1455,1473,1477],{"__ignoreMap":716},[721,1456,1457,1459,1461,1463,1465,1467,1469,1471],{"class":723,"line":724},[721,1458,728],{"class":727},[721,1460,732],{"class":731},[721,1462,736],{"class":735},[721,1464,739],{"class":731},[721,1466,742],{"class":727},[721,1468,745],{"class":731},[721,1470,749],{"class":748},[721,1472,752],{"class":731},[721,1474,1475],{"class":723,"line":813},[721,1476,817],{"emptyLinePlaceholder":816},[721,1478,1479,1481,1483,1485,1487,1489,1491,1493,1495,1497,1499,1501,1503],{"class":723,"line":820},[721,1480,1423],{"class":735},[721,1482,858],{"class":731},[721,1484,1428],{"class":829},[721,1486,833],{"class":735},[721,1488,1433],{"class":829},[721,1490,833],{"class":735},[721,1492,1174],{"class":731},[721,1494,1177],{"class":869},[721,1496,1067],{"class":731},[721,1498,736],{"class":829},[721,1500,1184],{"class":735},[721,1502,891],{"class":731},[721,1504,1450],{"class":735},[710,1506,1508],{"className":712,"code":1507,"filename":280,"language":715,"meta":714,"style":716},"import { createOTLPDrain } from 'evlog\u002Fotlp'\n\nawait app.register(evlog, { drain: createOTLPDrain() })\n",[718,1509,1510,1528,1532],{"__ignoreMap":716},[721,1511,1512,1514,1516,1518,1520,1522,1524,1526],{"class":723,"line":724},[721,1513,728],{"class":727},[721,1515,732],{"class":731},[721,1517,736],{"class":735},[721,1519,739],{"class":731},[721,1521,742],{"class":727},[721,1523,745],{"class":731},[721,1525,749],{"class":748},[721,1527,752],{"class":731},[721,1529,1530],{"class":723,"line":813},[721,1531,817],{"emptyLinePlaceholder":816},[721,1533,1534,1537,1540,1542,1545,1548,1550,1552,1554,1556,1558,1560,1562],{"class":723,"line":820},[721,1535,1536],{"class":727},"await",[721,1538,1539],{"class":735}," app",[721,1541,858],{"class":731},[721,1543,1544],{"class":829},"register",[721,1546,1547],{"class":735},"(evlog",[721,1549,880],{"class":731},[721,1551,732],{"class":731},[721,1553,1177],{"class":869},[721,1555,1067],{"class":731},[721,1557,736],{"class":829},[721,1559,1184],{"class":735},[721,1561,891],{"class":731},[721,1563,894],{"class":735},[710,1565,1566],{"className":712,"code":1394,"filename":285,"language":715,"meta":714,"style":716},[718,1567,1568,1586,1590],{"__ignoreMap":716},[721,1569,1570,1572,1574,1576,1578,1580,1582,1584],{"class":723,"line":724},[721,1571,728],{"class":727},[721,1573,732],{"class":731},[721,1575,736],{"class":735},[721,1577,739],{"class":731},[721,1579,742],{"class":727},[721,1581,745],{"class":731},[721,1583,749],{"class":748},[721,1585,752],{"class":731},[721,1587,1588],{"class":723,"line":813},[721,1589,817],{"emptyLinePlaceholder":816},[721,1591,1592,1594,1596,1598,1600,1602,1604,1606,1608,1610,1612,1614,1616],{"class":723,"line":820},[721,1593,1423],{"class":735},[721,1595,858],{"class":731},[721,1597,1428],{"class":829},[721,1599,833],{"class":735},[721,1601,1433],{"class":829},[721,1603,833],{"class":735},[721,1605,1174],{"class":731},[721,1607,1177],{"class":869},[721,1609,1067],{"class":731},[721,1611,736],{"class":829},[721,1613,1184],{"class":735},[721,1615,891],{"class":731},[721,1617,1450],{"class":735},[710,1619,1622],{"className":712,"code":1620,"filename":265,"language":715,"meta":1621,"style":716},"import { createOTLPDrain } from 'evlog\u002Fotlp'\n\nEvlogModule.forRoot({ drain: createOTLPDrain() })\n","src\u002Fapp.module.ts",[718,1623,1624,1642,1646],{"__ignoreMap":716},[721,1625,1626,1628,1630,1632,1634,1636,1638,1640],{"class":723,"line":724},[721,1627,728],{"class":727},[721,1629,732],{"class":731},[721,1631,736],{"class":735},[721,1633,739],{"class":731},[721,1635,742],{"class":727},[721,1637,745],{"class":731},[721,1639,749],{"class":748},[721,1641,752],{"class":731},[721,1643,1644],{"class":723,"line":813},[721,1645,817],{"emptyLinePlaceholder":816},[721,1647,1648,1651,1653,1656,1658,1660,1662,1664,1666,1668,1670],{"class":723,"line":820},[721,1649,1650],{"class":735},"EvlogModule",[721,1652,858],{"class":731},[721,1654,1655],{"class":829},"forRoot",[721,1657,833],{"class":735},[721,1659,1174],{"class":731},[721,1661,1177],{"class":869},[721,1663,1067],{"class":731},[721,1665,736],{"class":829},[721,1667,1184],{"class":735},[721,1669,891],{"class":731},[721,1671,894],{"class":735},[710,1673,1676],{"className":712,"code":1674,"filename":309,"language":715,"meta":1675,"style":716},"import { withEvlog } from 'evlog\u002Forpc'\nimport { createOTLPDrain } from 'evlog\u002Fotlp'\n\nconst handler = withEvlog(new RPCHandler(router), { drain: createOTLPDrain() })\n","server\u002Forpc.ts",[718,1677,1678,1697,1715,1719],{"__ignoreMap":716},[721,1679,1680,1682,1684,1686,1688,1690,1692,1695],{"class":723,"line":724},[721,1681,728],{"class":727},[721,1683,732],{"class":731},[721,1685,1032],{"class":735},[721,1687,739],{"class":731},[721,1689,742],{"class":727},[721,1691,745],{"class":731},[721,1693,1694],{"class":748},"evlog\u002Forpc",[721,1696,752],{"class":731},[721,1698,1699,1701,1703,1705,1707,1709,1711,1713],{"class":723,"line":813},[721,1700,728],{"class":727},[721,1702,732],{"class":731},[721,1704,736],{"class":735},[721,1706,739],{"class":731},[721,1708,742],{"class":727},[721,1710,745],{"class":731},[721,1712,749],{"class":748},[721,1714,752],{"class":731},[721,1716,1717],{"class":723,"line":820},[721,1718,817],{"emptyLinePlaceholder":816},[721,1720,1721,1724,1727,1729,1731,1733,1736,1739,1742,1744,1746,1748,1750,1752,1754,1756],{"class":723,"line":852},[721,1722,1723],{"class":845},"const",[721,1725,1726],{"class":735}," handler ",[721,1728,776],{"class":731},[721,1730,1032],{"class":829},[721,1732,833],{"class":735},[721,1734,1735],{"class":731},"new",[721,1737,1738],{"class":829}," RPCHandler",[721,1740,1741],{"class":735},"(router)",[721,1743,880],{"class":731},[721,1745,732],{"class":731},[721,1747,1177],{"class":869},[721,1749,1067],{"class":731},[721,1751,736],{"class":829},[721,1753,1184],{"class":735},[721,1755,891],{"class":731},[721,1757,894],{"class":735},[710,1759,1762],{"className":712,"code":1760,"filename":295,"language":715,"meta":1761,"style":716},"import { withEvlog } from 'evlog\u002Fworkers'\nimport { createOTLPDrain } from 'evlog\u002Fotlp'\n\nexport default withEvlog(handler, { drain: createOTLPDrain() })\n","src\u002Fworker.ts",[718,1763,1764,1783,1801,1805],{"__ignoreMap":716},[721,1765,1766,1768,1770,1772,1774,1776,1778,1781],{"class":723,"line":724},[721,1767,728],{"class":727},[721,1769,732],{"class":731},[721,1771,1032],{"class":735},[721,1773,739],{"class":731},[721,1775,742],{"class":727},[721,1777,745],{"class":731},[721,1779,1780],{"class":748},"evlog\u002Fworkers",[721,1782,752],{"class":731},[721,1784,1785,1787,1789,1791,1793,1795,1797,1799],{"class":723,"line":813},[721,1786,728],{"class":727},[721,1788,732],{"class":731},[721,1790,736],{"class":735},[721,1792,739],{"class":731},[721,1794,742],{"class":727},[721,1796,745],{"class":731},[721,1798,749],{"class":748},[721,1800,752],{"class":731},[721,1802,1803],{"class":723,"line":820},[721,1804,817],{"emptyLinePlaceholder":816},[721,1806,1807,1809,1811,1813,1816,1818,1820,1822,1824,1826,1828,1830],{"class":723,"line":852},[721,1808,823],{"class":727},[721,1810,826],{"class":727},[721,1812,1032],{"class":829},[721,1814,1815],{"class":735},"(handler",[721,1817,880],{"class":731},[721,1819,732],{"class":731},[721,1821,1177],{"class":869},[721,1823,1067],{"class":731},[721,1825,736],{"class":829},[721,1827,1184],{"class":735},[721,1829,891],{"class":731},[721,1831,894],{"class":735},[710,1833,1835],{"className":712,"code":1834,"filename":300,"language":715,"meta":716,"style":716},"import { createOTLPDrain } from 'evlog\u002Fotlp'\n\ninitLogger({ drain: createOTLPDrain() })\n",[718,1836,1837,1855,1859],{"__ignoreMap":716},[721,1838,1839,1841,1843,1845,1847,1849,1851,1853],{"class":723,"line":724},[721,1840,728],{"class":727},[721,1842,732],{"class":731},[721,1844,736],{"class":735},[721,1846,739],{"class":731},[721,1848,742],{"class":727},[721,1850,745],{"class":731},[721,1852,749],{"class":748},[721,1854,752],{"class":731},[721,1856,1857],{"class":723,"line":813},[721,1858,817],{"emptyLinePlaceholder":816},[721,1860,1861,1864,1866,1868,1870,1872,1874,1876,1878],{"class":723,"line":820},[721,1862,1863],{"class":829},"initLogger",[721,1865,833],{"class":735},[721,1867,1174],{"class":731},[721,1869,1177],{"class":869},[721,1871,1067],{"class":731},[721,1873,736],{"class":829},[721,1875,1184],{"class":735},[721,1877,891],{"class":731},[721,1879,894],{"class":735},[703,1881,547],{"id":1882},"configuration",[609,1884,1885],{},"The adapter reads configuration from multiple sources (highest priority first):",[665,1887,1888,1897,1907],{},[616,1889,1890,1893,1894],{},[619,1891,1892],{},"Overrides"," passed to ",[718,1895,1896],{},"createOTLPDrain()",[616,1898,1899,1902,1903,1906],{},[619,1900,1901],{},"Runtime config"," at ",[718,1904,1905],{},"runtimeConfig.otlp"," (Nuxt\u002FNitro only)",[616,1908,1909],{},[619,1910,1911],{},"Environment variables",[757,1913,1915],{"id":1914},"environment-variables","Environment Variables",[1917,1918,1919,1932],"table",{},[1920,1921,1922],"thead",{},[1923,1924,1925,1929],"tr",{},[1926,1927,1928],"th",{},"Variable",[1926,1930,1931],{},"Description",[1933,1934,1935,1953,1970,1986,1999,2020,2043,2053],"tbody",{},[1923,1936,1937,1942],{},[1938,1939,1940],"td",{},[718,1941,773],{},[1938,1943,1944,1945,1948,1949,1952],{},"OTLP HTTP endpoint (e.g., ",[718,1946,1947],{},"http:\u002F\u002Flocalhost:4318","). The standard ",[718,1950,1951],{},"OTEL_EXPORTER_OTLP_ENDPOINT"," also works.",[1923,1954,1955,1960],{},[1938,1956,1957],{},[718,1958,1959],{},"OTLP_HEADERS",[1938,1961,1962,1963,1966,1967,1952],{},"Headers as ",[718,1964,1965],{},"key=value"," pairs, comma-separated. The standard ",[718,1968,1969],{},"OTEL_EXPORTER_OTLP_HEADERS",[1923,1971,1972,1977],{},[1938,1973,1974],{},[718,1975,1976],{},"OTEL_EXPORTER_OTLP_LOGS_ENDPOINT",[1938,1978,1979,1980,1983,1984,858],{},"Full logs URL, used as-is with no ",[718,1981,1982],{},"\u002Fv1\u002Flogs"," appended. Takes precedence over ",[718,1985,1951],{},[1923,1987,1988,1993],{},[1938,1989,1990],{},[718,1991,1992],{},"OTEL_EXPORTER_OTLP_LOGS_HEADERS",[1938,1994,1995,1996,1998],{},"Headers for the logs signal. Merged over ",[718,1997,1969],{},", winning on conflicts.",[1923,2000,2001,2006],{},[1938,2002,2003],{},[718,2004,2005],{},"OTEL_EXPORTER_OTLP_COMPRESSION",[1938,2007,2008,2011,2012,2015,2016,2019],{},[718,2009,2010],{},"gzip"," or ",[718,2013,2014],{},"none",". ",[718,2017,2018],{},"OTEL_EXPORTER_OTLP_LOGS_COMPRESSION"," takes precedence.",[1923,2021,2022,2027],{},[1938,2023,2024],{},[718,2025,2026],{},"OTEL_EXPORTER_OTLP_PROTOCOL",[1938,2028,2029,2011,2032,2015,2035,2038,2039,2042],{},[718,2030,2031],{},"http\u002Fjson",[718,2033,2034],{},"http\u002Fprotobuf",[718,2036,2037],{},"OTEL_EXPORTER_OTLP_LOGS_PROTOCOL"," takes precedence. ",[718,2040,2041],{},"grpc"," is not supported.",[1923,2044,2045,2050],{},[1938,2046,2047],{},[718,2048,2049],{},"OTEL_SERVICE_NAME",[1938,2051,2052],{},"Service name override",[1923,2054,2055,2060],{},[1938,2056,2057],{},[718,2058,2059],{},"OTEL_RESOURCE_ATTRIBUTES",[1938,2061,2062,2063,2065,2066,2069,2070,2073,2074,2073,2077,2073,2080,2083,2084,2087],{},"Resource attributes as ",[718,2064,1965],{}," pairs, comma-separated. ",[718,2067,2068],{},"resourceAttributes"," and the event's ",[718,2071,2072],{},"service",", ",[718,2075,2076],{},"environment",[718,2078,2079],{},"version",[718,2081,2082],{},"region"," and ",[718,2085,2086],{},"commitHash"," take precedence.",[609,2089,2090,2091,2096],{},"These follow the ",[692,2092,2095],{"href":2093,"rel":2094},"https:\u002F\u002Fopentelemetry.io\u002Fdocs\u002Fspecs\u002Fotel\u002Fprotocol\u002Fexporter\u002F",[696],"OpenTelemetry exporter specification",", so a deployment that already configures an OTel SDK through the environment needs no evlog-specific variables.",[757,2098,2100],{"id":2099},"runtime-config-nuxt-only","Runtime Config (Nuxt only)",[710,2102,2105],{"className":712,"code":2103,"filename":2104,"language":715,"meta":716,"style":716},"export default defineNuxtConfig({\n  runtimeConfig: {\n    otlp: {\n      endpoint: '', \u002F\u002F Set via OTLP_ENDPOINT (or OTEL_EXPORTER_OTLP_ENDPOINT)\n    },\n  },\n})\n","nuxt.config.ts",[718,2106,2107,2120,2129,2138,2154,2159,2164],{"__ignoreMap":716},[721,2108,2109,2111,2113,2116,2118],{"class":723,"line":724},[721,2110,823],{"class":727},[721,2112,826],{"class":727},[721,2114,2115],{"class":829}," defineNuxtConfig",[721,2117,833],{"class":735},[721,2119,1059],{"class":731},[721,2121,2122,2125,2127],{"class":723,"line":813},[721,2123,2124],{"class":869},"  runtimeConfig",[721,2126,1067],{"class":731},[721,2128,849],{"class":731},[721,2130,2131,2134,2136],{"class":723,"line":820},[721,2132,2133],{"class":869},"    otlp",[721,2135,1067],{"class":731},[721,2137,849],{"class":731},[721,2139,2140,2143,2145,2148,2150],{"class":723,"line":852},[721,2141,2142],{"class":869},"      endpoint",[721,2144,1067],{"class":731},[721,2146,2147],{"class":731}," ''",[721,2149,880],{"class":731},[721,2151,2153],{"class":2152},"sHwdD"," \u002F\u002F Set via OTLP_ENDPOINT (or OTEL_EXPORTER_OTLP_ENDPOINT)\n",[721,2155,2156],{"class":723,"line":888},[721,2157,2158],{"class":731},"    },\n",[721,2160,2161],{"class":723,"line":1080},[721,2162,2163],{"class":731},"  },\n",[721,2165,2166,2168],{"class":723,"line":1095},[721,2167,891],{"class":731},[721,2169,894],{"class":735},[757,2171,2173],{"id":2172},"override-options","Override Options",[710,2175,2177],{"className":712,"code":2176,"filename":790,"language":715,"meta":716,"style":716},"const drain = createOTLPDrain({\n  endpoint: 'http:\u002F\u002Flocalhost:4318',\n  serviceName: 'my-api',\n  headers: {\n    'Authorization': 'Bearer xxx',\n  },\n  resourceAttributes: {\n    'deployment.environment': 'staging',\n  },\n})\n",[718,2178,2179,2194,2209,2225,2234,2255,2259,2268,2289,2294],{"__ignoreMap":716},[721,2180,2181,2183,2186,2188,2190,2192],{"class":723,"line":724},[721,2182,1723],{"class":845},[721,2184,2185],{"class":735}," drain ",[721,2187,776],{"class":731},[721,2189,736],{"class":829},[721,2191,833],{"class":735},[721,2193,1059],{"class":731},[721,2195,2196,2199,2201,2203,2205,2207],{"class":723,"line":813},[721,2197,2198],{"class":869},"  endpoint",[721,2200,1067],{"class":731},[721,2202,745],{"class":731},[721,2204,1947],{"class":748},[721,2206,872],{"class":731},[721,2208,1077],{"class":731},[721,2210,2211,2214,2216,2218,2221,2223],{"class":723,"line":820},[721,2212,2213],{"class":869},"  serviceName",[721,2215,1067],{"class":731},[721,2217,745],{"class":731},[721,2219,2220],{"class":748},"my-api",[721,2222,872],{"class":731},[721,2224,1077],{"class":731},[721,2226,2227,2230,2232],{"class":723,"line":852},[721,2228,2229],{"class":869},"  headers",[721,2231,1067],{"class":731},[721,2233,849],{"class":731},[721,2235,2236,2239,2242,2244,2246,2248,2251,2253],{"class":723,"line":888},[721,2237,2238],{"class":731},"    '",[721,2240,2241],{"class":869},"Authorization",[721,2243,872],{"class":731},[721,2245,1067],{"class":731},[721,2247,745],{"class":731},[721,2249,2250],{"class":748},"Bearer xxx",[721,2252,872],{"class":731},[721,2254,1077],{"class":731},[721,2256,2257],{"class":723,"line":1080},[721,2258,2163],{"class":731},[721,2260,2261,2264,2266],{"class":723,"line":1095},[721,2262,2263],{"class":869},"  resourceAttributes",[721,2265,1067],{"class":731},[721,2267,849],{"class":731},[721,2269,2271,2273,2276,2278,2280,2282,2285,2287],{"class":723,"line":2270},8,[721,2272,2238],{"class":731},[721,2274,2275],{"class":869},"deployment.environment",[721,2277,872],{"class":731},[721,2279,1067],{"class":731},[721,2281,745],{"class":731},[721,2283,2284],{"class":748},"staging",[721,2286,872],{"class":731},[721,2288,1077],{"class":731},[721,2290,2292],{"class":723,"line":2291},9,[721,2293,2163],{"class":731},[721,2295,2297,2299],{"class":723,"line":2296},10,[721,2298,891],{"class":731},[721,2300,894],{"class":735},[757,2302,2304],{"id":2303},"full-configuration-reference","Full Configuration Reference",[1917,2306,2307,2322],{},[1920,2308,2309],{},[1923,2310,2311,2314,2317,2320],{},[1926,2312,2313],{},"Option",[1926,2315,2316],{},"Type",[1926,2318,2319],{},"Default",[1926,2321,1931],{},[1933,2323,2324,2342,2363,2380,2395,2419,2442,2465,2488],{},[1923,2325,2326,2331,2336,2339],{},[1938,2327,2328],{},[718,2329,2330],{},"endpoint",[1938,2332,2333],{},[718,2334,2335],{},"string",[1938,2337,2338],{},"-",[1938,2340,2341],{},"OTLP HTTP endpoint (required)",[1923,2343,2344,2349,2353,2356],{},[1938,2345,2346],{},[718,2347,2348],{},"serviceName",[1938,2350,2351],{},[718,2352,2335],{},[1938,2354,2355],{},"From event",[1938,2357,2358,2359,2362],{},"Override ",[718,2360,2361],{},"service.name"," resource attribute",[1923,2364,2365,2370,2375,2377],{},[1938,2366,2367],{},[718,2368,2369],{},"headers",[1938,2371,2372],{},[718,2373,2374],{},"object",[1938,2376,2338],{},[1938,2378,2379],{},"Custom HTTP headers for authentication",[1923,2381,2382,2386,2390,2392],{},[1938,2383,2384],{},[718,2385,2068],{},[1938,2387,2388],{},[718,2389,2374],{},[1938,2391,2338],{},[1938,2393,2394],{},"Additional OTLP resource attributes",[1923,2396,2397,2402,2407,2412],{},[1938,2398,2399],{},[718,2400,2401],{},"recordShape",[1938,2403,2404],{},[718,2405,2406],{},"'json' | 'compact'",[1938,2408,2409],{},[718,2410,2411],{},"'json'",[1938,2413,2414,2415,842],{},"How the record carries the event (",[692,2416,2418],{"href":2417},"#record-shape","details",[1923,2420,2421,2426,2431,2436],{},[1938,2422,2423],{},[718,2424,2425],{},"compression",[1938,2427,2428],{},[718,2429,2430],{},"'gzip' | 'none'",[1938,2432,2433],{},[718,2434,2435],{},"'none'",[1938,2437,2438,2439],{},"Gzip the request body and send ",[718,2440,2441],{},"Content-Encoding: gzip",[1923,2443,2444,2449,2454,2459],{},[1938,2445,2446],{},[718,2447,2448],{},"protocol",[1938,2450,2451],{},[718,2452,2453],{},"'http\u002Fjson' | 'http\u002Fprotobuf'",[1938,2455,2456],{},[718,2457,2458],{},"'http\u002Fjson'",[1938,2460,2461,2462,842],{},"Request body encoding (",[692,2463,2418],{"href":2464},"#protobuf",[1923,2466,2467,2472,2477,2482],{},[1938,2468,2469],{},[718,2470,2471],{},"semanticConventions",[1938,2473,2474],{},[718,2475,2476],{},"boolean",[1938,2478,2479],{},[718,2480,2481],{},"false",[1938,2483,2484,2485,842],{},"Add OpenTelemetry attribute names next to the evlog ones (",[692,2486,2418],{"href":2487},"#semantic-conventions",[1923,2489,2490,2495,2500,2505],{},[1938,2491,2492],{},[718,2493,2494],{},"timeout",[1938,2496,2497],{},[718,2498,2499],{},"number",[1938,2501,2502],{},[718,2503,2504],{},"5000",[1938,2506,2507],{},"Request timeout in milliseconds",[703,2509,2511],{"id":2510},"deployment","Deployment",[609,2513,2514],{},"OTLP is a protocol, not a product. The same adapter talks to a collector you\nrun yourself and to a managed gateway. Only the endpoint and headers change.",[757,2516,2518],{"id":2517},"self-hosted","Self-hosted",[609,2520,2521],{},"Run an OpenTelemetry Collector and point evlog at it. Nothing else to configure:",[710,2523,2528],{"className":2524,"code":2525,"filename":2526,"language":2527,"meta":716,"style":716},"language-yaml shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","receivers:\n  otlp:\n    protocols:\n      http:\n        endpoint: 0.0.0.0:4318\n\nexporters:\n  debug:\n    verbosity: detailed\n\nservice:\n  pipelines:\n    logs:\n      receivers: [otlp]\n      exporters: [debug]\n","otel-collector.yaml","yaml",[718,2529,2530,2538,2545,2552,2559,2569,2573,2580,2587,2597,2601,2608,2616,2624,2640],{"__ignoreMap":716},[721,2531,2532,2535],{"class":723,"line":724},[721,2533,2534],{"class":869},"receivers",[721,2536,2537],{"class":731},":\n",[721,2539,2540,2543],{"class":723,"line":813},[721,2541,2542],{"class":869},"  otlp",[721,2544,2537],{"class":731},[721,2546,2547,2550],{"class":723,"line":820},[721,2548,2549],{"class":869},"    protocols",[721,2551,2537],{"class":731},[721,2553,2554,2557],{"class":723,"line":852},[721,2555,2556],{"class":869},"      http",[721,2558,2537],{"class":731},[721,2560,2561,2564,2566],{"class":723,"line":888},[721,2562,2563],{"class":869},"        endpoint",[721,2565,1067],{"class":731},[721,2567,2568],{"class":748}," 0.0.0.0:4318\n",[721,2570,2571],{"class":723,"line":1080},[721,2572,817],{"emptyLinePlaceholder":816},[721,2574,2575,2578],{"class":723,"line":1095},[721,2576,2577],{"class":869},"exporters",[721,2579,2537],{"class":731},[721,2581,2582,2585],{"class":723,"line":2270},[721,2583,2584],{"class":869},"  debug",[721,2586,2537],{"class":731},[721,2588,2589,2592,2594],{"class":723,"line":2291},[721,2590,2591],{"class":869},"    verbosity",[721,2593,1067],{"class":731},[721,2595,2596],{"class":748}," detailed\n",[721,2598,2599],{"class":723,"line":2296},[721,2600,817],{"emptyLinePlaceholder":816},[721,2602,2604,2606],{"class":723,"line":2603},11,[721,2605,2072],{"class":869},[721,2607,2537],{"class":731},[721,2609,2611,2614],{"class":723,"line":2610},12,[721,2612,2613],{"class":869},"  pipelines",[721,2615,2537],{"class":731},[721,2617,2619,2622],{"class":723,"line":2618},13,[721,2620,2621],{"class":869},"    logs",[721,2623,2537],{"class":731},[721,2625,2627,2630,2632,2635,2638],{"class":723,"line":2626},14,[721,2628,2629],{"class":869},"      receivers",[721,2631,1067],{"class":731},[721,2633,2634],{"class":731}," [",[721,2636,2637],{"class":748},"otlp",[721,2639,1391],{"class":731},[721,2641,2643,2646,2648,2650,2653],{"class":723,"line":2642},15,[721,2644,2645],{"class":869},"      exporters",[721,2647,1067],{"class":731},[721,2649,2634],{"class":731},[721,2651,2652],{"class":748},"debug",[721,2654,1391],{"class":731},[710,2656,2659],{"className":763,"code":2657,"filename":2658,"language":766,"meta":716,"style":716},"docker run --rm -p 4318:4318 \\\n  -v $(pwd)\u002Fotel-collector.yaml:\u002Fetc\u002Fotelcol\u002Fconfig.yaml \\\n  otel\u002Fopentelemetry-collector:latest\n","Terminal",[718,2660,2661,2681,2699],{"__ignoreMap":716},[721,2662,2663,2666,2669,2672,2675,2678],{"class":723,"line":724},[721,2664,2665],{"class":1349},"docker",[721,2667,2668],{"class":748}," run",[721,2670,2671],{"class":748}," --rm",[721,2673,2674],{"class":748}," -p",[721,2676,2677],{"class":748}," 4318:4318",[721,2679,2680],{"class":735}," \\\n",[721,2682,2683,2686,2689,2692,2694,2697],{"class":723,"line":813},[721,2684,2685],{"class":748},"  -v",[721,2687,2688],{"class":731}," $(",[721,2690,2691],{"class":829},"pwd",[721,2693,842],{"class":731},[721,2695,2696],{"class":748},"\u002Fotel-collector.yaml:\u002Fetc\u002Fotelcol\u002Fconfig.yaml",[721,2698,2680],{"class":735},[721,2700,2701],{"class":723,"line":820},[721,2702,2703],{"class":748},"  otel\u002Fopentelemetry-collector:latest\n",[710,2705,2706],{"className":763,"code":764,"filename":765,"language":766,"meta":716,"style":716},[718,2707,2708],{"__ignoreMap":716},[721,2709,2710,2712,2714],{"class":723,"line":724},[721,2711,773],{"class":735},[721,2713,776],{"class":731},[721,2715,779],{"class":748},[609,2717,2718],{},"From there the collector fans out wherever you want: Loki, ClickHouse,\nElasticsearch, a managed backend, or several at once. That indirection is the\nreason to pick OTLP over a direct adapter.",[757,2720,2722],{"id":2721},"managed-gateways","Managed gateways",[609,2724,2725],{},"Same adapter, a credentialed endpoint:",[2727,2728,2729,2756,2784],"code-group",{},[710,2730,2732],{"className":763,"code":2731,"filename":621,"language":766,"meta":716,"style":716},"OTLP_ENDPOINT=https:\u002F\u002Fotlp-gateway-prod-us-central-0.grafana.net\u002Fotlp\nOTEL_EXPORTER_OTLP_HEADERS=Authorization=Basic%20base64-encoded-credentials\n",[718,2733,2734,2743],{"__ignoreMap":716},[721,2735,2736,2738,2740],{"class":723,"line":724},[721,2737,773],{"class":735},[721,2739,776],{"class":731},[721,2741,2742],{"class":748},"https:\u002F\u002Fotlp-gateway-prod-us-central-0.grafana.net\u002Fotlp\n",[721,2744,2745,2747,2749,2751,2753],{"class":723,"line":813},[721,2746,1969],{"class":735},[721,2748,776],{"class":731},[721,2750,2241],{"class":735},[721,2752,776],{"class":731},[721,2754,2755],{"class":748},"Basic%20base64-encoded-credentials\n",[710,2757,2759],{"className":763,"code":2758,"filename":181,"language":766,"meta":716,"style":716},"OTLP_ENDPOINT=https:\u002F\u002Fhttp-intake.logs.datadoghq.com\nOTLP_HEADERS=DD-API-KEY=your-api-key\n",[718,2760,2761,2770],{"__ignoreMap":716},[721,2762,2763,2765,2767],{"class":723,"line":724},[721,2764,773],{"class":735},[721,2766,776],{"class":731},[721,2768,2769],{"class":748},"https:\u002F\u002Fhttp-intake.logs.datadoghq.com\n",[721,2771,2772,2774,2776,2779,2781],{"class":723,"line":813},[721,2773,1959],{"class":735},[721,2775,776],{"class":731},[721,2777,2778],{"class":735},"DD-API-KEY",[721,2780,776],{"class":731},[721,2782,2783],{"class":748},"your-api-key\n",[710,2785,2787],{"className":763,"code":2786,"filename":631,"language":766,"meta":716,"style":716},"OTLP_ENDPOINT=https:\u002F\u002Fapi.honeycomb.io\nOTLP_HEADERS=x-honeycomb-team=your-api-key\n",[718,2788,2789,2798],{"__ignoreMap":716},[721,2790,2791,2793,2795],{"class":723,"line":724},[721,2792,773],{"class":735},[721,2794,776],{"class":731},[721,2796,2797],{"class":748},"https:\u002F\u002Fapi.honeycomb.io\n",[721,2799,2800,2802,2804,2807,2809],{"class":723,"line":813},[721,2801,1959],{"class":735},[721,2803,776],{"class":731},[721,2805,2806],{"class":735},"x-honeycomb-team",[721,2808,776],{"class":731},[721,2810,2783],{"class":748},[2812,2813,2815,2816,2819],"callout",{"color":2814,"icon":13},"info","Grafana Cloud uses URL-encoded headers, so the ",[718,2817,2818],{},"%20"," is a space. The adapter\ndecodes that format automatically.",[703,2821,2823],{"id":2822},"otlp-log-format","OTLP Log Format",[609,2825,2826],{},"evlog maps wide events to the OTLP log format:",[1917,2828,2829,2839],{},[1920,2830,2831],{},[1923,2832,2833,2836],{},[1926,2834,2835],{},"evlog Field",[1926,2837,2838],{},"OTLP Field",[1933,2840,2841,2857,2869,2880,2897,2908,2919,2930,2941],{},[1923,2842,2843,2848],{},[1938,2844,2845],{},[718,2846,2847],{},"level",[1938,2849,2850,2853,2854],{},[718,2851,2852],{},"severityNumber"," \u002F ",[718,2855,2856],{},"severityText",[1923,2858,2859,2864],{},[1938,2860,2861],{},[718,2862,2863],{},"timestamp",[1938,2865,2866],{},[718,2867,2868],{},"timeUnixNano",[1923,2870,2871,2875],{},[1938,2872,2873],{},[718,2874,2072],{},[1938,2876,2877,2878],{},"Resource attribute ",[718,2879,2361],{},[1923,2881,2882,2886],{},[1938,2883,2884],{},[718,2885,2076],{},[1938,2887,2877,2888,2890,2891,2894,2895],{},[718,2889,2275],{},", plus ",[718,2892,2893],{},"deployment.environment.name"," with ",[718,2896,2471],{},[1923,2898,2899,2903],{},[1938,2900,2901],{},[718,2902,2079],{},[1938,2904,2877,2905],{},[718,2906,2907],{},"service.version",[1923,2909,2910,2914],{},[1938,2911,2912],{},[718,2913,2082],{},[1938,2915,2877,2916],{},[718,2917,2918],{},"cloud.region",[1923,2920,2921,2926],{},[1938,2922,2923],{},[718,2924,2925],{},"traceId",[1938,2927,2928],{},[718,2929,2925],{},[1923,2931,2932,2937],{},[1938,2933,2934],{},[718,2935,2936],{},"spanId",[1938,2938,2939],{},[718,2940,2936],{},[1923,2942,2943,2946],{},[1938,2944,2945],{},"All other fields",[1938,2947,2948],{},"Log attributes",[609,2950,2951,2953,2954,2958,2959,2962,2963,2966,2967,2969],{},[718,2952,2936],{}," is the span of the request that produced the event. The ",[692,2955,2957],{"href":2956},"\u002Fuse-cases\u002Fenrichers#tracecontextenricher","TraceContext enricher"," records the caller's span from an incoming ",[718,2960,2961],{},"traceparent"," as ",[718,2964,2965],{},"parentSpanId",", which is sent as a log attribute, so set ",[718,2968,2936],{}," from your tracer's active span to link the record to the server span.",[609,2971,2972,2973,2976,2977,2980,2981,2984,2985,2988,2989,2992,2993,2996,2997,3000,3001,2011,3003,3005],{},"Attribute values keep their type: integers are sent as ",[718,2974,2975],{},"intValue",", other finite numbers as ",[718,2978,2979],{},"doubleValue",", booleans as ",[718,2982,2983],{},"boolValue",", and arrays whose elements share one primitive type as ",[718,2986,2987],{},"arrayValue",". In the ",[718,2990,2991],{},"json"," shape, nested plain objects are sent as ",[718,2994,2995],{},"kvlistValue",". Anything else is serialized to a ",[718,2998,2999],{},"stringValue",". A ",[718,3002,2925],{},[718,3004,2936],{}," that is not valid W3C hex, or is all zeros, stays an ordinary attribute.",[609,3007,3008,3009,2083,3012,3015,3016,3019,3020,3023,3024,3027,3028,3031,3032,3034],{},"Every field of the wide event is sent as an OTLP record field, a resource attribute, or a log attribute. ",[718,3010,3011],{},"null",[718,3013,3014],{},"undefined"," are omitted rather than transmitted. Both shapes drop them at every level, so a nested ",[718,3017,3018],{},"{ user: { id: null } }"," has no ",[718,3021,3022],{},"user.id"," attribute in ",[718,3025,3026],{},"compact"," and no ",[718,3029,3030],{},"id"," entry in the ",[718,3033,2991],{}," key-value list.",[757,3036,3038],{"id":3037},"record-shape","Record Shape",[609,3040,3041,3043,3044,858],{},[718,3042,2401],{}," controls how the record carries the event. The default is ",[718,3045,2991],{},[2727,3047,3048,3394],{},[710,3049,3053],{"className":3050,"code":3051,"filename":3052,"language":2991,"meta":716,"style":716},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"body\": { \"stringValue\": \"{\\\"timestamp\\\":\\\"…\\\",\\\"method\\\":\\\"POST\\\",\\\"user\\\":{\\\"id\\\":\\\"usr_123\\\"}}\" },\n  \"attributes\": [\n    { \"key\": \"method\", \"value\": { \"stringValue\": \"POST\" } },\n    { \"key\": \"user\", \"value\": { \"kvlistValue\": { \"values\": [\n      { \"key\": \"id\", \"value\": { \"stringValue\": \"usr_123\" } },\n      { \"key\": \"plan\", \"value\": { \"stringValue\": \"premium\" } }\n    ] } } }\n  ]\n}\n","json (default)",[718,3054,3055,3059,3156,3169,3221,3272,3322,3373,3384,3389],{"__ignoreMap":716},[721,3056,3057],{"class":723,"line":724},[721,3058,1059],{"class":731},[721,3060,3061,3064,3067,3070,3072,3074,3077,3079,3081,3083,3085,3087,3090,3092,3094,3096,3098,3101,3103,3105,3107,3110,3112,3114,3116,3119,3121,3123,3125,3128,3130,3133,3135,3137,3139,3141,3143,3146,3148,3151,3153],{"class":723,"line":813},[721,3062,3063],{"class":731},"  \"",[721,3065,3066],{"class":845},"body",[721,3068,3069],{"class":731},"\"",[721,3071,1067],{"class":731},[721,3073,732],{"class":731},[721,3075,3076],{"class":731}," \"",[721,3078,2999],{"class":1349},[721,3080,3069],{"class":731},[721,3082,1067],{"class":731},[721,3084,3076],{"class":731},[721,3086,1174],{"class":748},[721,3088,3089],{"class":735},"\\\"",[721,3091,2863],{"class":748},[721,3093,3089],{"class":735},[721,3095,1067],{"class":748},[721,3097,3089],{"class":735},[721,3099,3100],{"class":748},"…",[721,3102,3089],{"class":735},[721,3104,880],{"class":748},[721,3106,3089],{"class":735},[721,3108,3109],{"class":748},"method",[721,3111,3089],{"class":735},[721,3113,1067],{"class":748},[721,3115,3089],{"class":735},[721,3117,3118],{"class":748},"POST",[721,3120,3089],{"class":735},[721,3122,880],{"class":748},[721,3124,3089],{"class":735},[721,3126,3127],{"class":748},"user",[721,3129,3089],{"class":735},[721,3131,3132],{"class":748},":{",[721,3134,3089],{"class":735},[721,3136,3030],{"class":748},[721,3138,3089],{"class":735},[721,3140,1067],{"class":748},[721,3142,3089],{"class":735},[721,3144,3145],{"class":748},"usr_123",[721,3147,3089],{"class":735},[721,3149,3150],{"class":748},"}}",[721,3152,3069],{"class":731},[721,3154,3155],{"class":731}," },\n",[721,3157,3158,3160,3163,3165,3167],{"class":723,"line":820},[721,3159,3063],{"class":731},[721,3161,3162],{"class":845},"attributes",[721,3164,3069],{"class":731},[721,3166,1067],{"class":731},[721,3168,1363],{"class":731},[721,3170,3171,3174,3176,3179,3181,3183,3185,3187,3189,3191,3193,3196,3198,3200,3202,3204,3207,3209,3211,3213,3215,3217,3219],{"class":723,"line":852},[721,3172,3173],{"class":731},"    {",[721,3175,3076],{"class":731},[721,3177,3178],{"class":1349},"key",[721,3180,3069],{"class":731},[721,3182,1067],{"class":731},[721,3184,3076],{"class":731},[721,3186,3109],{"class":748},[721,3188,3069],{"class":731},[721,3190,880],{"class":731},[721,3192,3076],{"class":731},[721,3194,3195],{"class":1349},"value",[721,3197,3069],{"class":731},[721,3199,1067],{"class":731},[721,3201,732],{"class":731},[721,3203,3076],{"class":731},[721,3205,2999],{"class":3206},"sbssI",[721,3208,3069],{"class":731},[721,3210,1067],{"class":731},[721,3212,3076],{"class":731},[721,3214,3118],{"class":748},[721,3216,3069],{"class":731},[721,3218,739],{"class":731},[721,3220,3155],{"class":731},[721,3222,3223,3225,3227,3229,3231,3233,3235,3237,3239,3241,3243,3245,3247,3249,3251,3253,3255,3257,3259,3261,3263,3266,3268,3270],{"class":723,"line":888},[721,3224,3173],{"class":731},[721,3226,3076],{"class":731},[721,3228,3178],{"class":1349},[721,3230,3069],{"class":731},[721,3232,1067],{"class":731},[721,3234,3076],{"class":731},[721,3236,3127],{"class":748},[721,3238,3069],{"class":731},[721,3240,880],{"class":731},[721,3242,3076],{"class":731},[721,3244,3195],{"class":1349},[721,3246,3069],{"class":731},[721,3248,1067],{"class":731},[721,3250,732],{"class":731},[721,3252,3076],{"class":731},[721,3254,2995],{"class":3206},[721,3256,3069],{"class":731},[721,3258,1067],{"class":731},[721,3260,732],{"class":731},[721,3262,3076],{"class":731},[721,3264,3265],{"class":869},"values",[721,3267,3069],{"class":731},[721,3269,1067],{"class":731},[721,3271,1363],{"class":731},[721,3273,3274,3277,3279,3282,3284,3286,3288,3290,3292,3294,3296,3298,3300,3302,3304,3306,3308,3310,3312,3314,3316,3318,3320],{"class":723,"line":1080},[721,3275,3276],{"class":731},"      {",[721,3278,3076],{"class":731},[721,3280,3178],{"class":3281},"su27w",[721,3283,3069],{"class":731},[721,3285,1067],{"class":731},[721,3287,3076],{"class":731},[721,3289,3030],{"class":748},[721,3291,3069],{"class":731},[721,3293,880],{"class":731},[721,3295,3076],{"class":731},[721,3297,3195],{"class":3281},[721,3299,3069],{"class":731},[721,3301,1067],{"class":731},[721,3303,732],{"class":731},[721,3305,3076],{"class":731},[721,3307,2999],{"class":829},[721,3309,3069],{"class":731},[721,3311,1067],{"class":731},[721,3313,3076],{"class":731},[721,3315,3145],{"class":748},[721,3317,3069],{"class":731},[721,3319,739],{"class":731},[721,3321,3155],{"class":731},[721,3323,3324,3326,3328,3330,3332,3334,3336,3339,3341,3343,3345,3347,3349,3351,3353,3355,3357,3359,3361,3363,3366,3368,3370],{"class":723,"line":1095},[721,3325,3276],{"class":731},[721,3327,3076],{"class":731},[721,3329,3178],{"class":3281},[721,3331,3069],{"class":731},[721,3333,1067],{"class":731},[721,3335,3076],{"class":731},[721,3337,3338],{"class":748},"plan",[721,3340,3069],{"class":731},[721,3342,880],{"class":731},[721,3344,3076],{"class":731},[721,3346,3195],{"class":3281},[721,3348,3069],{"class":731},[721,3350,1067],{"class":731},[721,3352,732],{"class":731},[721,3354,3076],{"class":731},[721,3356,2999],{"class":829},[721,3358,3069],{"class":731},[721,3360,1067],{"class":731},[721,3362,3076],{"class":731},[721,3364,3365],{"class":748},"premium",[721,3367,3069],{"class":731},[721,3369,739],{"class":731},[721,3371,3372],{"class":731}," }\n",[721,3374,3375,3378,3380,3382],{"class":723,"line":2270},[721,3376,3377],{"class":731},"    ]",[721,3379,739],{"class":731},[721,3381,739],{"class":731},[721,3383,3372],{"class":731},[721,3385,3386],{"class":723,"line":2291},[721,3387,3388],{"class":731},"  ]\n",[721,3390,3391],{"class":723,"line":2296},[721,3392,3393],{"class":731},"}\n",[710,3395,3397],{"className":3050,"code":3396,"filename":3026,"language":2991,"meta":716,"style":716},"{\n  \"body\": { \"stringValue\": \"POST \u002Fapi\u002Fcheckout (500)\" },\n  \"attributes\": [\n    { \"key\": \"method\", \"value\": { \"stringValue\": \"POST\" } },\n    { \"key\": \"user.id\", \"value\": { \"stringValue\": \"usr_123\" } },\n    { \"key\": \"user.plan\", \"value\": { \"stringValue\": \"premium\" } }\n  ]\n}\n",[718,3398,3399,3403,3432,3444,3492,3540,3589,3593],{"__ignoreMap":716},[721,3400,3401],{"class":723,"line":724},[721,3402,1059],{"class":731},[721,3404,3405,3407,3409,3411,3413,3415,3417,3419,3421,3423,3425,3428,3430],{"class":723,"line":813},[721,3406,3063],{"class":731},[721,3408,3066],{"class":845},[721,3410,3069],{"class":731},[721,3412,1067],{"class":731},[721,3414,732],{"class":731},[721,3416,3076],{"class":731},[721,3418,2999],{"class":1349},[721,3420,3069],{"class":731},[721,3422,1067],{"class":731},[721,3424,3076],{"class":731},[721,3426,3427],{"class":748},"POST \u002Fapi\u002Fcheckout (500)",[721,3429,3069],{"class":731},[721,3431,3155],{"class":731},[721,3433,3434,3436,3438,3440,3442],{"class":723,"line":820},[721,3435,3063],{"class":731},[721,3437,3162],{"class":845},[721,3439,3069],{"class":731},[721,3441,1067],{"class":731},[721,3443,1363],{"class":731},[721,3445,3446,3448,3450,3452,3454,3456,3458,3460,3462,3464,3466,3468,3470,3472,3474,3476,3478,3480,3482,3484,3486,3488,3490],{"class":723,"line":852},[721,3447,3173],{"class":731},[721,3449,3076],{"class":731},[721,3451,3178],{"class":1349},[721,3453,3069],{"class":731},[721,3455,1067],{"class":731},[721,3457,3076],{"class":731},[721,3459,3109],{"class":748},[721,3461,3069],{"class":731},[721,3463,880],{"class":731},[721,3465,3076],{"class":731},[721,3467,3195],{"class":1349},[721,3469,3069],{"class":731},[721,3471,1067],{"class":731},[721,3473,732],{"class":731},[721,3475,3076],{"class":731},[721,3477,2999],{"class":3206},[721,3479,3069],{"class":731},[721,3481,1067],{"class":731},[721,3483,3076],{"class":731},[721,3485,3118],{"class":748},[721,3487,3069],{"class":731},[721,3489,739],{"class":731},[721,3491,3155],{"class":731},[721,3493,3494,3496,3498,3500,3502,3504,3506,3508,3510,3512,3514,3516,3518,3520,3522,3524,3526,3528,3530,3532,3534,3536,3538],{"class":723,"line":888},[721,3495,3173],{"class":731},[721,3497,3076],{"class":731},[721,3499,3178],{"class":1349},[721,3501,3069],{"class":731},[721,3503,1067],{"class":731},[721,3505,3076],{"class":731},[721,3507,3022],{"class":748},[721,3509,3069],{"class":731},[721,3511,880],{"class":731},[721,3513,3076],{"class":731},[721,3515,3195],{"class":1349},[721,3517,3069],{"class":731},[721,3519,1067],{"class":731},[721,3521,732],{"class":731},[721,3523,3076],{"class":731},[721,3525,2999],{"class":3206},[721,3527,3069],{"class":731},[721,3529,1067],{"class":731},[721,3531,3076],{"class":731},[721,3533,3145],{"class":748},[721,3535,3069],{"class":731},[721,3537,739],{"class":731},[721,3539,3155],{"class":731},[721,3541,3542,3544,3546,3548,3550,3552,3554,3557,3559,3561,3563,3565,3567,3569,3571,3573,3575,3577,3579,3581,3583,3585,3587],{"class":723,"line":1080},[721,3543,3173],{"class":731},[721,3545,3076],{"class":731},[721,3547,3178],{"class":1349},[721,3549,3069],{"class":731},[721,3551,1067],{"class":731},[721,3553,3076],{"class":731},[721,3555,3556],{"class":748},"user.plan",[721,3558,3069],{"class":731},[721,3560,880],{"class":731},[721,3562,3076],{"class":731},[721,3564,3195],{"class":1349},[721,3566,3069],{"class":731},[721,3568,1067],{"class":731},[721,3570,732],{"class":731},[721,3572,3076],{"class":731},[721,3574,2999],{"class":3206},[721,3576,3069],{"class":731},[721,3578,1067],{"class":731},[721,3580,3076],{"class":731},[721,3582,3365],{"class":748},[721,3584,3069],{"class":731},[721,3586,739],{"class":731},[721,3588,3372],{"class":731},[721,3590,3591],{"class":723,"line":1095},[721,3592,3388],{"class":731},[721,3594,3595],{"class":723,"line":2270},[721,3596,3393],{"class":731},[609,3598,3599,3601],{},[718,3600,3026],{}," is worth switching to when your backend charges by ingested volume or facets on attributes:",[613,3603,3604,3613],{},[616,3605,3606,3609,3610,3612],{},[619,3607,3608],{},"The body is a one-line summary",": ",[718,3611,3427],{},", falling back to the service name, instead of the whole event repeated next to the attributes. Backends that cluster messages into templates can only do so with a stable body.",[616,3614,3615,3618,3619],{},[619,3616,3617],{},"Nested fields become dotted attributes",", so each leaf is its own facet:",[710,3620,3623],{"className":712,"code":3621,"filename":3622,"language":715,"meta":716,"style":716},"const drain = createOTLPDrain({ recordShape: 'compact' })\n\nlog.set({ user: { id: 'usr_123', plan: 'premium' } })\n\u002F\u002F → user.id, user.plan\n","server\u002Fapi\u002Fcheckout.post.ts",[718,3624,3625,3654,3658,3709],{"__ignoreMap":716},[721,3626,3627,3629,3631,3633,3635,3637,3639,3642,3644,3646,3648,3650,3652],{"class":723,"line":724},[721,3628,1723],{"class":845},[721,3630,2185],{"class":735},[721,3632,776],{"class":731},[721,3634,736],{"class":829},[721,3636,833],{"class":735},[721,3638,1174],{"class":731},[721,3640,3641],{"class":869}," recordShape",[721,3643,1067],{"class":731},[721,3645,745],{"class":731},[721,3647,3026],{"class":748},[721,3649,872],{"class":731},[721,3651,739],{"class":731},[721,3653,894],{"class":735},[721,3655,3656],{"class":723,"line":813},[721,3657,817],{"emptyLinePlaceholder":816},[721,3659,3660,3663,3665,3668,3670,3672,3675,3677,3679,3682,3684,3686,3688,3690,3692,3695,3697,3699,3701,3703,3705,3707],{"class":723,"line":820},[721,3661,3662],{"class":735},"log",[721,3664,858],{"class":731},[721,3666,3667],{"class":829},"set",[721,3669,833],{"class":735},[721,3671,1174],{"class":731},[721,3673,3674],{"class":869}," user",[721,3676,1067],{"class":731},[721,3678,732],{"class":731},[721,3680,3681],{"class":869}," id",[721,3683,1067],{"class":731},[721,3685,745],{"class":731},[721,3687,3145],{"class":748},[721,3689,872],{"class":731},[721,3691,880],{"class":731},[721,3693,3694],{"class":869}," plan",[721,3696,1067],{"class":731},[721,3698,745],{"class":731},[721,3700,3365],{"class":748},[721,3702,872],{"class":731},[721,3704,739],{"class":731},[721,3706,739],{"class":731},[721,3708,894],{"class":735},[721,3710,3711],{"class":723,"line":852},[721,3712,3713],{"class":2152},"\u002F\u002F → user.id, user.plan\n",[609,3715,3716,3717,3719,3720,3723,3724,3727,3728,3731],{},"Only plain objects are walked. Arrays are sent as a single attribute, an ",[718,3718,2987],{}," when their elements share one primitive type and a JSON string otherwise. Indexing them, as ",[718,3721,3722],{},"ai.tools.0.name",", would turn a list into an unbounded set of distinct attribute keys, which most backends charge for and none can chart. The same goes for anything else that is not a plain object, such as a ",[718,3725,3726],{},"Date",". An empty object stays a single ",[718,3729,3730],{},"{}"," attribute rather than disappearing.",[2812,3733,3734,3736,3737,3739],{"color":2814,"icon":13},[718,3735,3026],{}," becomes the default in the next major. Switch early if you are setting a project up now. Moving later means rewriting the queries built on the ",[718,3738,2991],{}," shape.",[757,3741,3743],{"id":3742},"semantic-conventions","Semantic Conventions",[609,3745,3746,3747,3750,3751,3756],{},"With ",[718,3748,3749],{},"semanticConventions: true",", each record also carries the ",[692,3752,3755],{"href":3753,"rel":3754},"https:\u002F\u002Fopentelemetry.io\u002Fdocs\u002Fspecs\u002Fsemconv\u002F",[696],"OpenTelemetry semantic convention"," names for the fields evlog knows, so backends with built-in HTTP, error, and GenAI views pick them up. The evlog names stay, so existing queries keep working.",[1917,3758,3759,3769],{},[1920,3760,3761],{},[1923,3762,3763,3766],{},[1926,3764,3765],{},"evlog field",[1926,3767,3768],{},"Attribute",[1933,3770,3771,3782,3794,3806,3818,3842,3866,3884,3902],{},[1923,3772,3773,3777],{},[1938,3774,3775],{},[718,3776,3109],{},[1938,3778,3779],{},[718,3780,3781],{},"http.request.method",[1923,3783,3784,3789],{},[1938,3785,3786],{},[718,3787,3788],{},"path",[1938,3790,3791],{},[718,3792,3793],{},"url.path",[1923,3795,3796,3801],{},[1938,3797,3798],{},[718,3799,3800],{},"status",[1938,3802,3803],{},[718,3804,3805],{},"http.response.status_code",[1923,3807,3808,3813],{},[1938,3809,3810],{},[718,3811,3812],{},"userAgent.raw",[1938,3814,3815],{},[718,3816,3817],{},"user_agent.original",[1923,3819,3820,3831],{},[1938,3821,3822,2853,3825,2853,3828],{},[718,3823,3824],{},"error.name",[718,3826,3827],{},"error.message",[718,3829,3830],{},"error.stack",[1938,3832,3833,2853,3836,2853,3839],{},[718,3834,3835],{},"exception.type",[718,3837,3838],{},"exception.message",[718,3840,3841],{},"exception.stacktrace",[1923,3843,3844,3855],{},[1938,3845,3846,2853,3849,2853,3852],{},[718,3847,3848],{},"ai.model",[718,3850,3851],{},"ai.provider",[718,3853,3854],{},"ai.responseId",[1938,3856,3857,2853,3860,2853,3863],{},[718,3858,3859],{},"gen_ai.request.model",[718,3861,3862],{},"gen_ai.provider.name",[718,3864,3865],{},"gen_ai.response.id",[1923,3867,3868,3876],{},[1938,3869,3870,2853,3873],{},[718,3871,3872],{},"ai.inputTokens",[718,3874,3875],{},"ai.outputTokens",[1938,3877,3878,2853,3881],{},[718,3879,3880],{},"gen_ai.usage.input_tokens",[718,3882,3883],{},"gen_ai.usage.output_tokens",[1923,3885,3886,3894],{},[1938,3887,3888,2853,3891],{},[718,3889,3890],{},"ai.cacheReadTokens",[718,3892,3893],{},"ai.cacheWriteTokens",[1938,3895,3896,2853,3899],{},[718,3897,3898],{},"gen_ai.usage.cache_read.input_tokens",[718,3900,3901],{},"gen_ai.usage.cache_creation.input_tokens",[1923,3903,3904,3909],{},[1938,3905,3906],{},[718,3907,3908],{},"ai.finishReason",[1938,3910,3911],{},[718,3912,3913],{},"gen_ai.response.finish_reasons",[609,3915,3916,3917,3919],{},"A field is mapped only when it has the type the convention requires, and an attribute the event already sets under that name is not overwritten. The resource also gets ",[718,3918,2893],{},". The option becomes the default in the next major.",[757,3921,3923],{"id":3922},"protobuf","Protobuf",[609,3925,3746,3926,3929,3930,3933,3934,3936],{},[718,3927,3928],{},"protocol: 'http\u002Fprotobuf'",", the adapter sends the same request as binary protobuf with ",[718,3931,3932],{},"Content-Type: application\u002Fx-protobuf",". Use it for collectors and gateways that only accept protobuf, or to shrink the payload. The encoder ships with evlog, has no dependencies, and is only loaded when this protocol is selected, so ",[718,3935,749],{}," stays the same size for JSON users.",[710,3938,3940],{"className":712,"code":3939,"filename":790,"language":715,"meta":716,"style":716},"const drain = createOTLPDrain({\n  endpoint: 'http:\u002F\u002Flocalhost:4318',\n  protocol: 'http\u002Fprotobuf',\n  compression: 'gzip',\n})\n",[718,3941,3942,3956,3970,3985,4000],{"__ignoreMap":716},[721,3943,3944,3946,3948,3950,3952,3954],{"class":723,"line":724},[721,3945,1723],{"class":845},[721,3947,2185],{"class":735},[721,3949,776],{"class":731},[721,3951,736],{"class":829},[721,3953,833],{"class":735},[721,3955,1059],{"class":731},[721,3957,3958,3960,3962,3964,3966,3968],{"class":723,"line":813},[721,3959,2198],{"class":869},[721,3961,1067],{"class":731},[721,3963,745],{"class":731},[721,3965,1947],{"class":748},[721,3967,872],{"class":731},[721,3969,1077],{"class":731},[721,3971,3972,3975,3977,3979,3981,3983],{"class":723,"line":820},[721,3973,3974],{"class":869},"  protocol",[721,3976,1067],{"class":731},[721,3978,745],{"class":731},[721,3980,2034],{"class":748},[721,3982,872],{"class":731},[721,3984,1077],{"class":731},[721,3986,3987,3990,3992,3994,3996,3998],{"class":723,"line":852},[721,3988,3989],{"class":869},"  compression",[721,3991,1067],{"class":731},[721,3993,745],{"class":731},[721,3995,2010],{"class":748},[721,3997,872],{"class":731},[721,3999,1077],{"class":731},[721,4001,4002,4004],{"class":723,"line":888},[721,4003,891],{"class":731},[721,4005,894],{"class":735},[609,4007,4008,4009,4012,4013,858],{},"To encode a request yourself, ",[718,4010,4011],{},"evlog\u002Fotlp\u002Fprotobuf"," exports ",[718,4014,4015],{},"encodeOTLPLogsRequest()",[757,4017,4019],{"id":4018},"severity-mapping","Severity Mapping",[1917,4021,4022,4035],{},[1920,4023,4024],{},[1923,4025,4026,4029,4032],{},[1926,4027,4028],{},"evlog Level",[1926,4030,4031],{},"OTLP Severity Number",[1926,4033,4034],{},"OTLP Severity Text",[1933,4036,4037,4050,4062,4074,4087,4100],{},[1923,4038,4039,4044,4047],{},[1938,4040,4041],{},[718,4042,4043],{},"trace",[1938,4045,4046],{},"1",[1938,4048,4049],{},"TRACE",[1923,4051,4052,4056,4059],{},[1938,4053,4054],{},[718,4055,2652],{},[1938,4057,4058],{},"5",[1938,4060,4061],{},"DEBUG",[1923,4063,4064,4068,4071],{},[1938,4065,4066],{},[718,4067,2814],{},[1938,4069,4070],{},"9",[1938,4072,4073],{},"INFO",[1923,4075,4076,4081,4084],{},[1938,4077,4078],{},[718,4079,4080],{},"warn",[1938,4082,4083],{},"13",[1938,4085,4086],{},"WARN",[1923,4088,4089,4094,4097],{},[1938,4090,4091],{},[718,4092,4093],{},"error",[1938,4095,4096],{},"17",[1938,4098,4099],{},"ERROR",[1923,4101,4102,4107,4110],{},[1938,4103,4104],{},[718,4105,4106],{},"fatal",[1938,4108,4109],{},"21",[1938,4111,4112],{},"FATAL",[703,4114,4116],{"id":4115},"troubleshooting","Troubleshooting",[757,4118,4120],{"id":4119},"missing-endpoint-error","Missing endpoint error",[710,4122,4128],{"className":4123,"code":4125,"filename":4126,"language":4127,"meta":716},[4124],"language-text","[evlog\u002Fotlp] Missing endpoint. Set OTLP_ENDPOINT or OTEL_EXPORTER_OTLP_ENDPOINT\n","Console","text",[718,4129,4125],{"__ignoreMap":716},[609,4131,4132],{},"Make sure your endpoint environment variable is set and the server was restarted.",[757,4134,4136],{"id":4135},"_401-unauthorized","401 Unauthorized",[609,4138,4139],{},"Your authentication headers may be missing or incorrect. Check:",[665,4141,4142,4148,4151],{},[616,4143,4144,4145,4147],{},"The ",[718,4146,1969],{}," format is correct",[616,4149,4150],{},"Credentials are valid and not expired",[616,4152,4153],{},"The endpoint URL is correct",[757,4155,4157],{"id":4156},"_404-not-found","404 Not Found",[609,4159,4160,4161,4163],{},"The adapter sends to ",[718,4162,1982],{},". Make sure your endpoint:",[613,4165,4166,4171],{},[616,4167,4168,4169],{},"Supports OTLP HTTP (not gRPC). For a protobuf-only receiver, set ",[718,4170,3928],{},[616,4172,4173,4174,4176],{},"Is the base URL without ",[718,4175,1982],{}," suffix",[757,4178,4180],{"id":4179},"logs-not-appearing","Logs not appearing",[665,4182,4183,4190,4193],{},[616,4184,4185,4186,4189],{},"Check the server console for ",[718,4187,4188],{},"[evlog\u002Fotlp]"," error messages",[616,4191,4192],{},"Test with a local collector first to verify the format",[616,4194,4195],{},"Check your backend's ingestion delay (some have 1-2 minute delays)",[703,4197,4199],{"id":4198},"direct-api-usage","Direct API Usage",[609,4201,4202],{},"For advanced use cases:",[710,4204,4207],{"className":712,"code":4205,"filename":4206,"language":715,"meta":716,"style":716},"import { sendToOTLP, sendBatchToOTLP, toOTLPLogRecord } from 'evlog\u002Fotlp'\n\n\u002F\u002F Send a single event\nawait sendToOTLP(event, {\n  endpoint: 'http:\u002F\u002Flocalhost:4318',\n})\n\n\u002F\u002F Send multiple events\nawait sendBatchToOTLP(events, {\n  endpoint: 'http:\u002F\u002Flocalhost:4318',\n})\n\n\u002F\u002F Convert event to OTLP format (for inspection)\nconst otlpRecord = toOTLPLogRecord(event)\n","server\u002Futils\u002Fotlp.ts",[718,4208,4209,4238,4242,4247,4260,4274,4280,4284,4289,4302,4316,4322,4326,4331],{"__ignoreMap":716},[721,4210,4211,4213,4215,4218,4220,4223,4225,4228,4230,4232,4234,4236],{"class":723,"line":724},[721,4212,728],{"class":727},[721,4214,732],{"class":731},[721,4216,4217],{"class":735}," sendToOTLP",[721,4219,880],{"class":731},[721,4221,4222],{"class":735}," sendBatchToOTLP",[721,4224,880],{"class":731},[721,4226,4227],{"class":735}," toOTLPLogRecord",[721,4229,739],{"class":731},[721,4231,742],{"class":727},[721,4233,745],{"class":731},[721,4235,749],{"class":748},[721,4237,752],{"class":731},[721,4239,4240],{"class":723,"line":813},[721,4241,817],{"emptyLinePlaceholder":816},[721,4243,4244],{"class":723,"line":820},[721,4245,4246],{"class":2152},"\u002F\u002F Send a single event\n",[721,4248,4249,4251,4253,4256,4258],{"class":723,"line":852},[721,4250,1536],{"class":727},[721,4252,4217],{"class":829},[721,4254,4255],{"class":735},"(event",[721,4257,880],{"class":731},[721,4259,849],{"class":731},[721,4261,4262,4264,4266,4268,4270,4272],{"class":723,"line":888},[721,4263,2198],{"class":869},[721,4265,1067],{"class":731},[721,4267,745],{"class":731},[721,4269,1947],{"class":748},[721,4271,872],{"class":731},[721,4273,1077],{"class":731},[721,4275,4276,4278],{"class":723,"line":1080},[721,4277,891],{"class":731},[721,4279,894],{"class":735},[721,4281,4282],{"class":723,"line":1095},[721,4283,817],{"emptyLinePlaceholder":816},[721,4285,4286],{"class":723,"line":2270},[721,4287,4288],{"class":2152},"\u002F\u002F Send multiple events\n",[721,4290,4291,4293,4295,4298,4300],{"class":723,"line":2291},[721,4292,1536],{"class":727},[721,4294,4222],{"class":829},[721,4296,4297],{"class":735},"(events",[721,4299,880],{"class":731},[721,4301,849],{"class":731},[721,4303,4304,4306,4308,4310,4312,4314],{"class":723,"line":2296},[721,4305,2198],{"class":869},[721,4307,1067],{"class":731},[721,4309,745],{"class":731},[721,4311,1947],{"class":748},[721,4313,872],{"class":731},[721,4315,1077],{"class":731},[721,4317,4318,4320],{"class":723,"line":2603},[721,4319,891],{"class":731},[721,4321,894],{"class":735},[721,4323,4324],{"class":723,"line":2610},[721,4325,817],{"emptyLinePlaceholder":816},[721,4327,4328],{"class":723,"line":2618},[721,4329,4330],{"class":2152},"\u002F\u002F Convert event to OTLP format (for inspection)\n",[721,4332,4333,4335,4338,4340,4342],{"class":723,"line":2626},[721,4334,1723],{"class":845},[721,4336,4337],{"class":735}," otlpRecord ",[721,4339,776],{"class":731},[721,4341,4227],{"class":829},[721,4343,4344],{"class":735},"(event)\n",[703,4346,4348],{"id":4347},"next-steps","Next Steps",[613,4350,4351,4357,4363,4369],{},[616,4352,4353,4356],{},[692,4354,4355],{"href":162},"Axiom Adapter"," - Send logs to Axiom",[616,4358,4359,4362],{},[692,4360,4361],{"href":167},"PostHog Adapter"," - Send logs to PostHog",[616,4364,4365,4368],{},[692,4366,4367],{"href":530},"Custom Adapters"," - Build your own adapter",[616,4370,4371,4373],{},[692,4372,560],{"href":561}," - Security and production tips",[4375,4376,4377],"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 .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 .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}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 .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .su27w, html code.shiki .su27w{--shiki-light:#916B53;--shiki-default:#916B53;--shiki-dark:#916B53}",{"title":716,"searchDepth":813,"depth":813,"links":4379},[4380,4381,4385,4391,4395,4401,4407,4408],{"id":705,"depth":813,"text":20},{"id":755,"depth":813,"text":25,"children":4382},[4383,4384],{"id":759,"depth":820,"text":760},{"id":782,"depth":820,"text":783},{"id":1882,"depth":813,"text":547,"children":4386},[4387,4388,4389,4390],{"id":1914,"depth":820,"text":1915},{"id":2099,"depth":820,"text":2100},{"id":2172,"depth":820,"text":2173},{"id":2303,"depth":820,"text":2304},{"id":2510,"depth":813,"text":2511,"children":4392},[4393,4394],{"id":2517,"depth":820,"text":2518},{"id":2721,"depth":820,"text":2722},{"id":2822,"depth":813,"text":2823,"children":4396},[4397,4398,4399,4400],{"id":3037,"depth":820,"text":3038},{"id":3742,"depth":820,"text":3743},{"id":3922,"depth":820,"text":3923},{"id":4018,"depth":820,"text":4019},{"id":4115,"depth":813,"text":4116,"children":4402},[4403,4404,4405,4406],{"id":4119,"depth":820,"text":4120},{"id":4135,"depth":820,"text":4136},{"id":4156,"depth":820,"text":4157},{"id":4179,"depth":820,"text":4180},{"id":4198,"depth":813,"text":4199},{"id":4347,"depth":813,"text":4348},"Send logs via OpenTelemetry Protocol (OTLP) to Grafana, Datadog, Honeycomb, and any compatible backend. Supports gRPC and HTTP transports.","md",[4412,4419],{"label":4413,"icon":4414,"to":4415,"target":4416,"color":4417,"variant":4418},"OpenTelemetry Docs","i-lucide-external-link","https:\u002F\u002Fopentelemetry.io\u002Fdocs\u002F","_blank","neutral","subtle",{"label":4367,"icon":344,"to":530,"color":4417,"variant":4418},{},{"title":201,"icon":204},{"title":604,"description":4409},"19IifOT2_bAObyS6T2EuNEaPm2CKm3xgBARiots5V_U",[4425,4427],{"title":196,"path":197,"stem":198,"description":4426,"icon":199,"children":-1},"Insert wide events into ClickHouse over the HTTP interface — typed columns for what you aggregate, full JSON for everything else.",{"title":206,"path":207,"stem":208,"description":4428,"icon":209,"children":-1},"Send wide events to HyperDX over OTLP\u002FHTTP, using its documented endpoint and authorization header. Configured from environment variables.",1791054015862]