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