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