[{"data":1,"prerenderedAt":2522},["ShallowReactive",2],{"navigation_docs":3,"-integrate-adapters-hybrid-otlp":520,"-integrate-adapters-hybrid-otlp-surround":2517},[4,30,80,123,303,435,490],{"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],{"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,"children":127,"page":29},"Integrate","\u002Fintegrate","4.integrate",[128,132,215],{"title":36,"path":129,"stem":130,"icon":131},"\u002Fintegrate\u002Foverview","4.integrate\u002F0.overview","i-lucide-plug",{"title":133,"path":134,"stem":135,"children":136,"page":29},"Adapters","\u002Fintegrate\u002Fadapters","4.integrate\u002Fadapters",[137,140,170,195],{"title":36,"path":138,"stem":139,"icon":39},"\u002Fintegrate\u002Fadapters\u002Foverview","4.integrate\u002Fadapters\u002F01.overview",{"title":141,"path":142,"stem":143,"children":144,"page":29},"Cloud","\u002Fintegrate\u002Fadapters\u002Fcloud","4.integrate\u002Fadapters\u002Fcloud",[145,150,155,160,165],{"title":146,"path":147,"stem":148,"icon":149},"Axiom","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Faxiom","4.integrate\u002Fadapters\u002Fcloud\u002F01.axiom","i-custom-axiom",{"title":151,"path":152,"stem":153,"icon":154},"PostHog","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fposthog","4.integrate\u002Fadapters\u002Fcloud\u002F02.posthog","i-simple-icons-posthog",{"title":156,"path":157,"stem":158,"icon":159},"Sentry","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fsentry","4.integrate\u002Fadapters\u002Fcloud\u002F03.sentry","i-simple-icons-sentry",{"title":161,"path":162,"stem":163,"icon":164},"Better Stack","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fbetter-stack","4.integrate\u002Fadapters\u002Fcloud\u002F04.better-stack","i-simple-icons-betterstack",{"title":166,"path":167,"stem":168,"icon":169},"Datadog","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fdatadog","4.integrate\u002Fadapters\u002Fcloud\u002F05.datadog","i-simple-icons-datadog",{"title":171,"path":172,"stem":173,"children":174,"page":29},"Cloud or Self-Hosted","\u002Fintegrate\u002Fadapters\u002Fhybrid","4.integrate\u002Fadapters\u002Fhybrid",[175,180,185,190],{"title":176,"path":177,"stem":178,"icon":179},"Grafana Loki","\u002Fintegrate\u002Fadapters\u002Fhybrid\u002Floki","4.integrate\u002Fadapters\u002Fhybrid\u002F01.loki","i-simple-icons-grafana",{"title":181,"path":182,"stem":183,"icon":184},"ClickHouse","\u002Fintegrate\u002Fadapters\u002Fhybrid\u002Fclickhouse","4.integrate\u002Fadapters\u002Fhybrid\u002F02.clickhouse","i-simple-icons-clickhouse",{"title":186,"path":187,"stem":188,"icon":189},"OTLP","\u002Fintegrate\u002Fadapters\u002Fhybrid\u002Fotlp","4.integrate\u002Fadapters\u002Fhybrid\u002F03.otlp","i-simple-icons-opentelemetry",{"title":191,"path":192,"stem":193,"icon":194},"HyperDX","\u002Fintegrate\u002Fadapters\u002Fhybrid\u002Fhyperdx","4.integrate\u002Fadapters\u002Fhybrid\u002F04.hyperdx","i-custom-hyperdx",{"title":196,"path":197,"stem":198,"children":199,"page":29},"Self-Hosted","\u002Fintegrate\u002Fadapters\u002Fself-hosted","4.integrate\u002Fadapters\u002Fself-hosted",[200,205,210],{"title":201,"path":202,"stem":203,"icon":204},"File System","\u002Fintegrate\u002Fadapters\u002Fself-hosted\u002Ffs","4.integrate\u002Fadapters\u002Fself-hosted\u002F01.fs","i-lucide-hard-drive",{"title":206,"path":207,"stem":208,"icon":209},"NuxtHub","\u002Fintegrate\u002Fadapters\u002Fself-hosted\u002Fnuxthub","4.integrate\u002Fadapters\u002Fself-hosted\u002F02.nuxthub","i-simple-icons-nuxt",{"title":211,"path":212,"stem":213,"icon":214},"Memory","\u002Fintegrate\u002Fadapters\u002Fself-hosted\u002Fmemory","4.integrate\u002Fadapters\u002Fself-hosted\u002F03.memory","i-lucide-cpu",{"title":216,"path":217,"stem":218,"children":219,"page":29},"Frameworks","\u002Fintegrate\u002Fframeworks","4.integrate\u002Fframeworks",[220,224,229,234,239,244,249,254,259,264,269,274,279,284,288,293,298],{"title":36,"path":221,"stem":222,"icon":223},"\u002Fintegrate\u002Fframeworks\u002Foverview","4.integrate\u002Fframeworks\u002F00.overview","i-lucide-layout-grid",{"title":225,"path":226,"stem":227,"icon":228},"Nuxt","\u002Fintegrate\u002Fframeworks\u002Fnuxt","4.integrate\u002Fframeworks\u002F01.nuxt","i-simple-icons-nuxtdotjs",{"title":230,"path":231,"stem":232,"icon":233},"Next.js","\u002Fintegrate\u002Fframeworks\u002Fnextjs","4.integrate\u002Fframeworks\u002F02.nextjs","i-simple-icons-nextdotjs",{"title":235,"path":236,"stem":237,"icon":238},"SvelteKit","\u002Fintegrate\u002Fframeworks\u002Fsveltekit","4.integrate\u002Fframeworks\u002F03.sveltekit","i-simple-icons-svelte",{"title":240,"path":241,"stem":242,"icon":243},"Nitro","\u002Fintegrate\u002Fframeworks\u002Fnitro","4.integrate\u002Fframeworks\u002F04.nitro","i-custom-nitro",{"title":245,"path":246,"stem":247,"icon":248},"TanStack Start","\u002Fintegrate\u002Fframeworks\u002Ftanstack-start","4.integrate\u002Fframeworks\u002F05.tanstack-start","i-custom-tanstack",{"title":250,"path":251,"stem":252,"icon":253},"NestJS","\u002Fintegrate\u002Fframeworks\u002Fnestjs","4.integrate\u002Fframeworks\u002F06.nestjs","i-simple-icons-nestjs",{"title":255,"path":256,"stem":257,"icon":258},"Express","\u002Fintegrate\u002Fframeworks\u002Fexpress","4.integrate\u002Fframeworks\u002F07.express","i-simple-icons-express",{"title":260,"path":261,"stem":262,"icon":263},"Hono","\u002Fintegrate\u002Fframeworks\u002Fhono","4.integrate\u002Fframeworks\u002F08.hono","i-simple-icons-hono",{"title":265,"path":266,"stem":267,"icon":268},"Fastify","\u002Fintegrate\u002Fframeworks\u002Ffastify","4.integrate\u002Fframeworks\u002F09.fastify","i-simple-icons-fastify",{"title":270,"path":271,"stem":272,"icon":273},"Elysia","\u002Fintegrate\u002Fframeworks\u002Felysia","4.integrate\u002Fframeworks\u002F10.elysia","i-custom-elysia",{"title":275,"path":276,"stem":277,"icon":278},"React Router","\u002Fintegrate\u002Fframeworks\u002Freact-router","4.integrate\u002Fframeworks\u002F11.react-router","i-custom-reactrouter",{"title":280,"path":281,"stem":282,"icon":283},"Cloudflare Workers","\u002Fintegrate\u002Fframeworks\u002Fcloudflare-workers","4.integrate\u002Fframeworks\u002F12.cloudflare-workers","i-simple-icons-cloudflare",{"title":285,"path":286,"stem":287,"icon":74},"Standalone","\u002Fintegrate\u002Fframeworks\u002Fstandalone","4.integrate\u002Fframeworks\u002F13.standalone",{"title":289,"path":290,"stem":291,"icon":292},"Astro","\u002Fintegrate\u002Fframeworks\u002Fastro","4.integrate\u002Fframeworks\u002F14.astro","i-simple-icons-astro",{"title":294,"path":295,"stem":296,"icon":297},"oRPC","\u002Fintegrate\u002Fframeworks\u002Forpc","4.integrate\u002Fframeworks\u002F15.orpc","i-lucide-network",{"title":299,"path":300,"stem":301,"icon":302},"AWS Lambda","\u002Fintegrate\u002Fframeworks\u002Faws-lambda","4.integrate\u002Fframeworks\u002F16.aws-lambda","i-custom-lambda",{"title":304,"path":305,"stem":306,"children":307,"page":29},"Use Cases","\u002Fuse-cases","5.use-cases",[308,311,316,345,372,404,425,430],{"title":36,"path":309,"stem":310,"icon":102},"\u002Fuse-cases\u002Foverview","5.use-cases\u002F0.overview",{"title":312,"path":313,"stem":314,"icon":315},"Client Logging","\u002Fuse-cases\u002Fclient-logging","5.use-cases\u002F1.client-logging","i-lucide-monitor",{"title":317,"icon":318,"path":319,"stem":320,"children":321,"page":29},"AI SDK","i-simple-icons-vercel","\u002Fuse-cases\u002Fai-sdk","5.use-cases\u002F2.ai-sdk",[322,325,330,335,340],{"title":36,"path":323,"stem":324,"icon":39},"\u002Fuse-cases\u002Fai-sdk\u002Foverview","5.use-cases\u002F2.ai-sdk\u002F01.overview",{"title":326,"path":327,"stem":328,"icon":329},"Usage","\u002Fuse-cases\u002Fai-sdk\u002Fusage","5.use-cases\u002F2.ai-sdk\u002F02.usage","i-lucide-code",{"title":331,"path":332,"stem":333,"icon":334},"Options","\u002Fuse-cases\u002Fai-sdk\u002Foptions","5.use-cases\u002F2.ai-sdk\u002F03.options","i-lucide-sliders",{"title":336,"path":337,"stem":338,"icon":339},"Metadata","\u002Fuse-cases\u002Fai-sdk\u002Fmetadata","5.use-cases\u002F2.ai-sdk\u002F04.metadata","i-lucide-database",{"title":341,"path":342,"stem":343,"icon":344},"Telemetry","\u002Fuse-cases\u002Fai-sdk\u002Ftelemetry","5.use-cases\u002F2.ai-sdk\u002F05.telemetry","i-lucide-activity",{"title":346,"icon":347,"path":348,"stem":349,"children":350,"page":29},"Better Auth","i-simple-icons-betterauth","\u002Fuse-cases\u002Fbetter-auth","5.use-cases\u002F3.better-auth",[351,354,359,364,368],{"title":36,"path":352,"stem":353,"icon":39},"\u002Fuse-cases\u002Fbetter-auth\u002Foverview","5.use-cases\u002F3.better-auth\u002F01.overview",{"title":355,"path":356,"stem":357,"icon":358},"Identify User","\u002Fuse-cases\u002Fbetter-auth\u002Fidentify-user","5.use-cases\u002F3.better-auth\u002F02.identify-user","i-lucide-user-check",{"title":360,"path":361,"stem":362,"icon":363},"Middleware","\u002Fuse-cases\u002Fbetter-auth\u002Fmiddleware","5.use-cases\u002F3.better-auth\u002F03.middleware","i-lucide-shield",{"title":365,"path":366,"stem":367,"icon":315},"Client Sync","\u002Fuse-cases\u002Fbetter-auth\u002Fclient-sync","5.use-cases\u002F3.better-auth\u002F04.client-sync",{"title":369,"path":370,"stem":371,"icon":107},"Performance","\u002Fuse-cases\u002Fbetter-auth\u002Fperformance","5.use-cases\u002F3.better-auth\u002F05.performance",{"title":373,"icon":374,"path":375,"stem":376,"children":377,"page":29},"Audit Logs","i-lucide-shield-check","\u002Fuse-cases\u002Faudit","5.use-cases\u002F4.audit",[378,381,386,391,396,400],{"title":36,"path":379,"stem":380,"icon":39},"\u002Fuse-cases\u002Faudit\u002Foverview","5.use-cases\u002F4.audit\u002F01.overview",{"title":382,"path":383,"stem":384,"icon":385},"Schema","\u002Fuse-cases\u002Faudit\u002Fschema","5.use-cases\u002F4.audit\u002F02.schema","i-lucide-file-text",{"title":387,"path":388,"stem":389,"icon":390},"Recording","\u002Fuse-cases\u002Faudit\u002Frecording","5.use-cases\u002F4.audit\u002F03.recording","i-lucide-pen-line",{"title":392,"path":393,"stem":394,"icon":395},"Drains","\u002Fuse-cases\u002Faudit\u002Fpipeline","5.use-cases\u002F4.audit\u002F04.pipeline","i-lucide-link",{"title":397,"path":398,"stem":399,"icon":374},"Compliance","\u002Fuse-cases\u002Faudit\u002Fcompliance","5.use-cases\u002F4.audit\u002F05.compliance",{"title":401,"path":402,"stem":403,"icon":79},"Recipes","\u002Fuse-cases\u002Faudit\u002Frecipes","5.use-cases\u002F4.audit\u002F06.recipes",{"title":341,"icon":107,"path":405,"stem":406,"children":407,"page":29},"\u002Fuse-cases\u002Ftelemetry","5.use-cases\u002F4.telemetry",[408,411,416,421],{"title":36,"path":409,"stem":410,"icon":39},"\u002Fuse-cases\u002Ftelemetry\u002Foverview","5.use-cases\u002F4.telemetry\u002F01.overview",{"title":412,"path":413,"stem":414,"icon":415},"Setup","\u002Fuse-cases\u002Ftelemetry\u002Fsetup","5.use-cases\u002F4.telemetry\u002F02.setup","i-lucide-wrench",{"title":417,"path":418,"stem":419,"icon":420},"Ingest","\u002Fuse-cases\u002Ftelemetry\u002Fingest","5.use-cases\u002F4.telemetry\u002F03.ingest","i-lucide-server",{"title":422,"path":423,"stem":424,"icon":79},"Reference","\u002Fuse-cases\u002Ftelemetry\u002Freference","5.use-cases\u002F4.telemetry\u002F04.reference",{"title":426,"path":427,"stem":428,"icon":429},"Enrichers","\u002Fuse-cases\u002Fenrichers","5.use-cases\u002F5.enrichers","i-lucide-sparkles",{"title":431,"path":432,"stem":433,"icon":434},"eve","\u002Fuse-cases\u002Feve","5.use-cases\u002F5.eve","i-custom-eve",{"title":436,"path":437,"stem":438,"children":439,"page":29},"Extend","\u002Fextend","6.extend",[440,444,449,454,459,463,467,471,475,480,485],{"title":36,"path":441,"stem":442,"icon":443},"\u002Fextend\u002Foverview","6.extend\u002F0.overview","i-lucide-blocks",{"title":445,"path":446,"stem":447,"icon":448},"Stream","\u002Fextend\u002Fstream","6.extend\u002F1.stream","i-lucide-radio-tower",{"title":450,"path":451,"stem":452,"icon":453},"Custom framework","\u002Fextend\u002Fcustom-framework","6.extend\u002F10.custom-framework","i-lucide-puzzle",{"title":455,"path":456,"stem":457,"icon":458},"FS reader","\u002Fextend\u002Ffs-reader","6.extend\u002F2.fs-reader","i-lucide-folder-search",{"title":401,"path":460,"stem":461,"icon":462},"\u002Fextend\u002Fconsumer-recipes","6.extend\u002F3.consumer-recipes","i-lucide-chef-hat",{"title":464,"path":465,"stem":466,"icon":443},"Plugins","\u002Fextend\u002Fplugins","6.extend\u002F4.plugins",{"title":468,"path":469,"stem":470,"icon":429},"Custom enrichers","\u002Fextend\u002Fcustom-enrichers","6.extend\u002F5.custom-enrichers",{"title":472,"path":473,"stem":474,"icon":64},"Tail sampling","\u002Fextend\u002Ftail-sampling","6.extend\u002F6.tail-sampling",{"title":476,"path":477,"stem":478,"icon":479},"Identity headers","\u002Fextend\u002Fidentity-headers","6.extend\u002F7.identity-headers","i-lucide-fingerprint",{"title":481,"path":482,"stem":483,"icon":484},"Custom drains","\u002Fextend\u002Fcustom-drains","6.extend\u002F8.custom-drains","i-lucide-share-2",{"title":486,"path":487,"stem":488,"icon":489},"Drain pipeline","\u002Fextend\u002Fdrain-pipeline","6.extend\u002F9.drain-pipeline","i-lucide-workflow",{"title":422,"path":491,"stem":492,"children":493,"page":29},"\u002Freference","7.reference",[494,499,502,507,511,516],{"title":495,"path":496,"stem":497,"icon":498},"Configuration","\u002Freference\u002Fconfiguration","7.reference\u002F1.configuration","i-lucide-settings",{"title":369,"path":500,"stem":501,"icon":107},"\u002Freference\u002Fperformance","7.reference\u002F2.performance",{"title":503,"path":504,"stem":505,"icon":506},"Vite Plugin","\u002Freference\u002Fvite-plugin","7.reference\u002F3.vite-plugin","i-custom-vite",{"title":508,"path":509,"stem":510,"icon":374},"Best Practices","\u002Freference\u002Fbest-practices","7.reference\u002F4.best-practices",{"title":512,"path":513,"stem":514,"icon":515},"vs Other Loggers","\u002Freference\u002Fvs-other-loggers","7.reference\u002F5.vs-other-loggers","i-lucide-scale",{"title":517,"path":518,"stem":519,"icon":429},"Agent Skills","\u002Freference\u002Fagent-skills","7.reference\u002F6.agent-skills",{"id":521,"title":522,"body":523,"description":2502,"extension":2503,"links":2504,"meta":2513,"navigation":2514,"path":187,"seo":2515,"stem":188,"__hash__":2516},"docs\u002F4.integrate\u002Fadapters\u002Fhybrid\u002F03.otlp.md","OTLP Adapter",{"type":524,"value":525,"toc":2474},"minimark",[526,530,574,620,624,627,671,674,679,698,702,1281,1284,1287,1313,1317,1381,1385,1453,1457,1585,1589,1700,1704,1707,1711,1714,1849,1899,1911,1914,1918,1921,2005,2014,2018,2021,2139,2143,2210,2214,2218,2227,2230,2234,2237,2251,2255,2262,2273,2277,2292,2296,2299,2441,2445,2470],[527,528,529],"p",{},"The OTLP (OpenTelemetry Protocol) adapter sends logs in the standard OpenTelemetry format. This works with any OTLP-compatible backend including:",[531,532,533,541,545,550,555,560,565,570],"ul",{},[534,535,536,540],"li",{},[537,538,539],"strong",{},"Grafana Cloud"," (Loki)",[534,542,543],{},[537,544,166],{},[534,546,547],{},[537,548,549],{},"Honeycomb",[534,551,552],{},[537,553,554],{},"Jaeger",[534,556,557],{},[537,558,559],{},"Splunk",[534,561,562],{},[537,563,564],{},"New Relic",[534,566,567],{},[537,568,569],{},"Self-hosted OpenTelemetry Collector",[534,571,572],{},[537,573,191],{},[575,576,579,582,606],"prompt",{":actions":577,"description":578,"icon":189},"[\"copy\",\"cursor\",\"claude\"]","Add the OTLP drain adapter",[527,580,581],{},"Add the OTLP drain adapter to send evlog wide events via OpenTelemetry Protocol.",[583,584,585,588,591,594,597,600,603],"ol",{},[534,586,587],{},"Identify which framework I'm using and follow its evlog integration pattern",[534,589,590],{},"Install evlog if not already installed",[534,592,593],{},"Import createOTLPDrain from 'evlog\u002Fotlp'",[534,595,596],{},"Wire createOTLPDrain() into my framework's drain configuration",[534,598,599],{},"Set OTLP_ENDPOINT environment variable (collector URL)",[534,601,602],{},"Optionally set OTLP_HEADERS for authentication",[534,604,605],{},"Test by triggering a request and checking your OTLP backend (Grafana, Datadog, Honeycomb, etc.)",[527,607,608,609,615,616],{},"Adapter docs: ",[610,611,612],"a",{"href":612,"rel":613},"https:\u002F\u002Fwww.evlog.dev\u002Fintegrate\u002Fadapters\u002Fhybrid\u002Fotlp",[614],"nofollow","\nFramework setup: ",[610,617,618],{"href":618,"rel":619},"https:\u002F\u002Fwww.evlog.dev\u002Fintegrate\u002Fframeworks\u002Foverview",[614],[621,622,20],"h2",{"id":623},"installation",[527,625,626],{},"The OTLP adapter comes bundled with evlog:",[628,629,635],"pre",{"className":630,"code":631,"filename":632,"language":633,"meta":634,"style":634},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { createOTLPDrain } from 'evlog\u002Fotlp'\n","src\u002Findex.ts","typescript","",[636,637,638],"code",{"__ignoreMap":634},[639,640,643,647,651,655,658,661,664,668],"span",{"class":641,"line":642},"line",1,[639,644,646],{"class":645},"s7zQu","import",[639,648,650],{"class":649},"sMK4o"," {",[639,652,654],{"class":653},"sTEyZ"," createOTLPDrain",[639,656,657],{"class":649}," }",[639,659,660],{"class":645}," from",[639,662,663],{"class":649}," '",[639,665,667],{"class":666},"sfazB","evlog\u002Fotlp",[639,669,670],{"class":649},"'\n",[621,672,25],{"id":673},"quick-start",[675,676,678],"h3",{"id":677},"_1-set-your-otlp-endpoint","1. Set your OTLP endpoint",[628,680,685],{"className":681,"code":682,"filename":683,"language":684,"meta":634,"style":634},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","OTLP_ENDPOINT=http:\u002F\u002Flocalhost:4318\n",".env","bash",[636,686,687],{"__ignoreMap":634},[639,688,689,692,695],{"class":641,"line":642},[639,690,691],{"class":653},"OTLP_ENDPOINT",[639,693,694],{"class":649},"=",[639,696,697],{"class":666},"http:\u002F\u002Flocalhost:4318\n",[675,699,701],{"id":700},"_2-wire-the-drain-to-your-framework","2. Wire the drain to your framework",[703,704,705,820,951,1013,1067,1126,1180,1233],"code-group",{},[628,706,709],{"className":630,"code":707,"filename":708,"language":633,"meta":634,"style":634},"\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",[636,710,711,717,736,743,775,811],{"__ignoreMap":634},[639,712,713],{"class":641,"line":642},[639,714,716],{"class":715},"sHwdD","\u002F\u002F server\u002Fplugins\u002Fevlog-drain.ts\n",[639,718,720,722,724,726,728,730,732,734],{"class":641,"line":719},2,[639,721,646],{"class":645},[639,723,650],{"class":649},[639,725,654],{"class":653},[639,727,657],{"class":649},[639,729,660],{"class":645},[639,731,663],{"class":649},[639,733,667],{"class":666},[639,735,670],{"class":649},[639,737,739],{"class":641,"line":738},3,[639,740,742],{"emptyLinePlaceholder":741},true,"\n",[639,744,746,749,752,756,759,761,765,768,772],{"class":641,"line":745},4,[639,747,748],{"class":645},"export",[639,750,751],{"class":645}," default",[639,753,755],{"class":754},"s2Zo4"," defineNitroPlugin",[639,757,758],{"class":653},"(",[639,760,758],{"class":649},[639,762,764],{"class":763},"sHdIc","nitroApp",[639,766,767],{"class":649},")",[639,769,771],{"class":770},"spNyl"," =>",[639,773,774],{"class":649}," {\n",[639,776,778,781,784,787,789,792,795,798,801,803,806,808],{"class":641,"line":777},5,[639,779,780],{"class":653},"  nitroApp",[639,782,783],{"class":649},".",[639,785,786],{"class":653},"hooks",[639,788,783],{"class":649},[639,790,791],{"class":754},"hook",[639,793,758],{"class":794},"swJcz",[639,796,797],{"class":649},"'",[639,799,800],{"class":666},"evlog:drain",[639,802,797],{"class":649},[639,804,805],{"class":649},",",[639,807,654],{"class":754},[639,809,810],{"class":794},"())\n",[639,812,814,817],{"class":641,"line":813},6,[639,815,816],{"class":649},"}",[639,818,819],{"class":653},")\n",[628,821,823],{"className":630,"code":822,"filename":230,"language":633,"meta":634,"style":634},"\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",[636,824,825,830,850,868,872,911,929,944],{"__ignoreMap":634},[639,826,827],{"class":641,"line":642},[639,828,829],{"class":715},"\u002F\u002F lib\u002Fevlog.ts\n",[639,831,832,834,836,839,841,843,845,848],{"class":641,"line":719},[639,833,646],{"class":645},[639,835,650],{"class":649},[639,837,838],{"class":653}," createEvlog",[639,840,657],{"class":649},[639,842,660],{"class":645},[639,844,663],{"class":649},[639,846,847],{"class":666},"evlog\u002Fnext",[639,849,670],{"class":649},[639,851,852,854,856,858,860,862,864,866],{"class":641,"line":738},[639,853,646],{"class":645},[639,855,650],{"class":649},[639,857,654],{"class":653},[639,859,657],{"class":649},[639,861,660],{"class":645},[639,863,663],{"class":649},[639,865,667],{"class":666},[639,867,670],{"class":649},[639,869,870],{"class":641,"line":745},[639,871,742],{"emptyLinePlaceholder":741},[639,873,874,876,879,881,884,886,889,891,894,896,899,901,904,906,908],{"class":641,"line":777},[639,875,748],{"class":645},[639,877,878],{"class":770}," const",[639,880,650],{"class":649},[639,882,883],{"class":653}," withEvlog",[639,885,805],{"class":649},[639,887,888],{"class":653}," useLogger",[639,890,805],{"class":649},[639,892,893],{"class":653}," log",[639,895,805],{"class":649},[639,897,898],{"class":653}," createError ",[639,900,816],{"class":649},[639,902,903],{"class":649}," =",[639,905,838],{"class":754},[639,907,758],{"class":653},[639,909,910],{"class":649},"{\n",[639,912,913,916,919,921,924,926],{"class":641,"line":813},[639,914,915],{"class":794},"  service",[639,917,918],{"class":649},":",[639,920,663],{"class":649},[639,922,923],{"class":666},"my-app",[639,925,797],{"class":649},[639,927,928],{"class":649},",\n",[639,930,932,935,937,939,942],{"class":641,"line":931},7,[639,933,934],{"class":794},"  drain",[639,936,918],{"class":649},[639,938,654],{"class":754},[639,940,941],{"class":653},"()",[639,943,928],{"class":649},[639,945,947,949],{"class":641,"line":946},8,[639,948,816],{"class":649},[639,950,819],{"class":653},[628,952,954],{"className":630,"code":953,"filename":260,"language":633,"meta":634,"style":634},"import { createOTLPDrain } from 'evlog\u002Fotlp'\n\napp.use(evlog({ drain: createOTLPDrain() }))\n",[636,955,956,974,978],{"__ignoreMap":634},[639,957,958,960,962,964,966,968,970,972],{"class":641,"line":642},[639,959,646],{"class":645},[639,961,650],{"class":649},[639,963,654],{"class":653},[639,965,657],{"class":649},[639,967,660],{"class":645},[639,969,663],{"class":649},[639,971,667],{"class":666},[639,973,670],{"class":649},[639,975,976],{"class":641,"line":719},[639,977,742],{"emptyLinePlaceholder":741},[639,979,980,983,985,988,990,993,995,998,1001,1003,1005,1008,1010],{"class":641,"line":738},[639,981,982],{"class":653},"app",[639,984,783],{"class":649},[639,986,987],{"class":754},"use",[639,989,758],{"class":653},[639,991,992],{"class":754},"evlog",[639,994,758],{"class":653},[639,996,997],{"class":649},"{",[639,999,1000],{"class":794}," drain",[639,1002,918],{"class":649},[639,1004,654],{"class":754},[639,1006,1007],{"class":653},"() ",[639,1009,816],{"class":649},[639,1011,1012],{"class":653},"))\n",[628,1014,1015],{"className":630,"code":953,"filename":255,"language":633,"meta":634,"style":634},[636,1016,1017,1035,1039],{"__ignoreMap":634},[639,1018,1019,1021,1023,1025,1027,1029,1031,1033],{"class":641,"line":642},[639,1020,646],{"class":645},[639,1022,650],{"class":649},[639,1024,654],{"class":653},[639,1026,657],{"class":649},[639,1028,660],{"class":645},[639,1030,663],{"class":649},[639,1032,667],{"class":666},[639,1034,670],{"class":649},[639,1036,1037],{"class":641,"line":719},[639,1038,742],{"emptyLinePlaceholder":741},[639,1040,1041,1043,1045,1047,1049,1051,1053,1055,1057,1059,1061,1063,1065],{"class":641,"line":738},[639,1042,982],{"class":653},[639,1044,783],{"class":649},[639,1046,987],{"class":754},[639,1048,758],{"class":653},[639,1050,992],{"class":754},[639,1052,758],{"class":653},[639,1054,997],{"class":649},[639,1056,1000],{"class":794},[639,1058,918],{"class":649},[639,1060,654],{"class":754},[639,1062,1007],{"class":653},[639,1064,816],{"class":649},[639,1066,1012],{"class":653},[628,1068,1070],{"className":630,"code":1069,"filename":265,"language":633,"meta":634,"style":634},"import { createOTLPDrain } from 'evlog\u002Fotlp'\n\nawait app.register(evlog, { drain: createOTLPDrain() })\n",[636,1071,1072,1090,1094],{"__ignoreMap":634},[639,1073,1074,1076,1078,1080,1082,1084,1086,1088],{"class":641,"line":642},[639,1075,646],{"class":645},[639,1077,650],{"class":649},[639,1079,654],{"class":653},[639,1081,657],{"class":649},[639,1083,660],{"class":645},[639,1085,663],{"class":649},[639,1087,667],{"class":666},[639,1089,670],{"class":649},[639,1091,1092],{"class":641,"line":719},[639,1093,742],{"emptyLinePlaceholder":741},[639,1095,1096,1099,1102,1104,1107,1110,1112,1114,1116,1118,1120,1122,1124],{"class":641,"line":738},[639,1097,1098],{"class":645},"await",[639,1100,1101],{"class":653}," app",[639,1103,783],{"class":649},[639,1105,1106],{"class":754},"register",[639,1108,1109],{"class":653},"(evlog",[639,1111,805],{"class":649},[639,1113,650],{"class":649},[639,1115,1000],{"class":794},[639,1117,918],{"class":649},[639,1119,654],{"class":754},[639,1121,1007],{"class":653},[639,1123,816],{"class":649},[639,1125,819],{"class":653},[628,1127,1128],{"className":630,"code":953,"filename":270,"language":633,"meta":634,"style":634},[636,1129,1130,1148,1152],{"__ignoreMap":634},[639,1131,1132,1134,1136,1138,1140,1142,1144,1146],{"class":641,"line":642},[639,1133,646],{"class":645},[639,1135,650],{"class":649},[639,1137,654],{"class":653},[639,1139,657],{"class":649},[639,1141,660],{"class":645},[639,1143,663],{"class":649},[639,1145,667],{"class":666},[639,1147,670],{"class":649},[639,1149,1150],{"class":641,"line":719},[639,1151,742],{"emptyLinePlaceholder":741},[639,1153,1154,1156,1158,1160,1162,1164,1166,1168,1170,1172,1174,1176,1178],{"class":641,"line":738},[639,1155,982],{"class":653},[639,1157,783],{"class":649},[639,1159,987],{"class":754},[639,1161,758],{"class":653},[639,1163,992],{"class":754},[639,1165,758],{"class":653},[639,1167,997],{"class":649},[639,1169,1000],{"class":794},[639,1171,918],{"class":649},[639,1173,654],{"class":754},[639,1175,1007],{"class":653},[639,1177,816],{"class":649},[639,1179,1012],{"class":653},[628,1181,1183],{"className":630,"code":1182,"filename":250,"language":633,"meta":634,"style":634},"import { createOTLPDrain } from 'evlog\u002Fotlp'\n\nEvlogModule.forRoot({ drain: createOTLPDrain() })\n",[636,1184,1185,1203,1207],{"__ignoreMap":634},[639,1186,1187,1189,1191,1193,1195,1197,1199,1201],{"class":641,"line":642},[639,1188,646],{"class":645},[639,1190,650],{"class":649},[639,1192,654],{"class":653},[639,1194,657],{"class":649},[639,1196,660],{"class":645},[639,1198,663],{"class":649},[639,1200,667],{"class":666},[639,1202,670],{"class":649},[639,1204,1205],{"class":641,"line":719},[639,1206,742],{"emptyLinePlaceholder":741},[639,1208,1209,1212,1214,1217,1219,1221,1223,1225,1227,1229,1231],{"class":641,"line":738},[639,1210,1211],{"class":653},"EvlogModule",[639,1213,783],{"class":649},[639,1215,1216],{"class":754},"forRoot",[639,1218,758],{"class":653},[639,1220,997],{"class":649},[639,1222,1000],{"class":794},[639,1224,918],{"class":649},[639,1226,654],{"class":754},[639,1228,1007],{"class":653},[639,1230,816],{"class":649},[639,1232,819],{"class":653},[628,1234,1236],{"className":630,"code":1235,"filename":285,"language":633,"meta":634,"style":634},"import { createOTLPDrain } from 'evlog\u002Fotlp'\n\ninitLogger({ drain: createOTLPDrain() })\n",[636,1237,1238,1256,1260],{"__ignoreMap":634},[639,1239,1240,1242,1244,1246,1248,1250,1252,1254],{"class":641,"line":642},[639,1241,646],{"class":645},[639,1243,650],{"class":649},[639,1245,654],{"class":653},[639,1247,657],{"class":649},[639,1249,660],{"class":645},[639,1251,663],{"class":649},[639,1253,667],{"class":666},[639,1255,670],{"class":649},[639,1257,1258],{"class":641,"line":719},[639,1259,742],{"emptyLinePlaceholder":741},[639,1261,1262,1265,1267,1269,1271,1273,1275,1277,1279],{"class":641,"line":738},[639,1263,1264],{"class":754},"initLogger",[639,1266,758],{"class":653},[639,1268,997],{"class":649},[639,1270,1000],{"class":794},[639,1272,918],{"class":649},[639,1274,654],{"class":754},[639,1276,1007],{"class":653},[639,1278,816],{"class":649},[639,1280,819],{"class":653},[621,1282,495],{"id":1283},"configuration",[527,1285,1286],{},"The adapter reads configuration from multiple sources (highest priority first):",[583,1288,1289,1298,1308],{},[534,1290,1291,1294,1295],{},[537,1292,1293],{},"Overrides"," passed to ",[636,1296,1297],{},"createOTLPDrain()",[534,1299,1300,1303,1304,1307],{},[537,1301,1302],{},"Runtime config"," at ",[636,1305,1306],{},"runtimeConfig.otlp"," (Nuxt\u002FNitro only)",[534,1309,1310],{},[537,1311,1312],{},"Environment variables",[675,1314,1316],{"id":1315},"environment-variables","Environment Variables",[1318,1319,1320,1333],"table",{},[1321,1322,1323],"thead",{},[1324,1325,1326,1330],"tr",{},[1327,1328,1329],"th",{},"Variable",[1327,1331,1332],{},"Description",[1334,1335,1336,1354,1371],"tbody",{},[1324,1337,1338,1343],{},[1339,1340,1341],"td",{},[636,1342,691],{},[1339,1344,1345,1346,1349,1350,1353],{},"OTLP HTTP endpoint (e.g., ",[636,1347,1348],{},"http:\u002F\u002Flocalhost:4318","). The standard ",[636,1351,1352],{},"OTEL_EXPORTER_OTLP_ENDPOINT"," also works.",[1324,1355,1356,1361],{},[1339,1357,1358],{},[636,1359,1360],{},"OTLP_HEADERS",[1339,1362,1363,1364,1367,1368,1353],{},"Headers as ",[636,1365,1366],{},"key=value"," pairs, comma-separated. The standard ",[636,1369,1370],{},"OTEL_EXPORTER_OTLP_HEADERS",[1324,1372,1373,1378],{},[1339,1374,1375],{},[636,1376,1377],{},"OTEL_SERVICE_NAME",[1339,1379,1380],{},"Service name override",[675,1382,1384],{"id":1383},"runtime-config-nuxt-only","Runtime Config (Nuxt only)",[628,1386,1389],{"className":630,"code":1387,"filename":1388,"language":633,"meta":634,"style":634},"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",[636,1390,1391,1404,1413,1422,1437,1442,1447],{"__ignoreMap":634},[639,1392,1393,1395,1397,1400,1402],{"class":641,"line":642},[639,1394,748],{"class":645},[639,1396,751],{"class":645},[639,1398,1399],{"class":754}," defineNuxtConfig",[639,1401,758],{"class":653},[639,1403,910],{"class":649},[639,1405,1406,1409,1411],{"class":641,"line":719},[639,1407,1408],{"class":794},"  runtimeConfig",[639,1410,918],{"class":649},[639,1412,774],{"class":649},[639,1414,1415,1418,1420],{"class":641,"line":738},[639,1416,1417],{"class":794},"    otlp",[639,1419,918],{"class":649},[639,1421,774],{"class":649},[639,1423,1424,1427,1429,1432,1434],{"class":641,"line":745},[639,1425,1426],{"class":794},"      endpoint",[639,1428,918],{"class":649},[639,1430,1431],{"class":649}," ''",[639,1433,805],{"class":649},[639,1435,1436],{"class":715}," \u002F\u002F Set via OTLP_ENDPOINT (or OTEL_EXPORTER_OTLP_ENDPOINT)\n",[639,1438,1439],{"class":641,"line":777},[639,1440,1441],{"class":649},"    },\n",[639,1443,1444],{"class":641,"line":813},[639,1445,1446],{"class":649},"  },\n",[639,1448,1449,1451],{"class":641,"line":931},[639,1450,816],{"class":649},[639,1452,819],{"class":653},[675,1454,1456],{"id":1455},"override-options","Override Options",[628,1458,1461],{"className":630,"code":1459,"filename":1460,"language":633,"meta":634,"style":634},"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",[636,1462,1463,1479,1494,1510,1519,1540,1544,1553,1573,1578],{"__ignoreMap":634},[639,1464,1465,1468,1471,1473,1475,1477],{"class":641,"line":642},[639,1466,1467],{"class":770},"const",[639,1469,1470],{"class":653}," drain ",[639,1472,694],{"class":649},[639,1474,654],{"class":754},[639,1476,758],{"class":653},[639,1478,910],{"class":649},[639,1480,1481,1484,1486,1488,1490,1492],{"class":641,"line":719},[639,1482,1483],{"class":794},"  endpoint",[639,1485,918],{"class":649},[639,1487,663],{"class":649},[639,1489,1348],{"class":666},[639,1491,797],{"class":649},[639,1493,928],{"class":649},[639,1495,1496,1499,1501,1503,1506,1508],{"class":641,"line":738},[639,1497,1498],{"class":794},"  serviceName",[639,1500,918],{"class":649},[639,1502,663],{"class":649},[639,1504,1505],{"class":666},"my-api",[639,1507,797],{"class":649},[639,1509,928],{"class":649},[639,1511,1512,1515,1517],{"class":641,"line":745},[639,1513,1514],{"class":794},"  headers",[639,1516,918],{"class":649},[639,1518,774],{"class":649},[639,1520,1521,1524,1527,1529,1531,1533,1536,1538],{"class":641,"line":777},[639,1522,1523],{"class":649},"    '",[639,1525,1526],{"class":794},"Authorization",[639,1528,797],{"class":649},[639,1530,918],{"class":649},[639,1532,663],{"class":649},[639,1534,1535],{"class":666},"Bearer xxx",[639,1537,797],{"class":649},[639,1539,928],{"class":649},[639,1541,1542],{"class":641,"line":813},[639,1543,1446],{"class":649},[639,1545,1546,1549,1551],{"class":641,"line":931},[639,1547,1548],{"class":794},"  resourceAttributes",[639,1550,918],{"class":649},[639,1552,774],{"class":649},[639,1554,1555,1557,1560,1562,1564,1566,1569,1571],{"class":641,"line":946},[639,1556,1523],{"class":649},[639,1558,1559],{"class":794},"deployment.environment",[639,1561,797],{"class":649},[639,1563,918],{"class":649},[639,1565,663],{"class":649},[639,1567,1568],{"class":666},"staging",[639,1570,797],{"class":649},[639,1572,928],{"class":649},[639,1574,1576],{"class":641,"line":1575},9,[639,1577,1446],{"class":649},[639,1579,1581,1583],{"class":641,"line":1580},10,[639,1582,816],{"class":649},[639,1584,819],{"class":653},[675,1586,1588],{"id":1587},"full-configuration-reference","Full Configuration Reference",[1318,1590,1591,1606],{},[1321,1592,1593],{},[1324,1594,1595,1598,1601,1604],{},[1327,1596,1597],{},"Option",[1327,1599,1600],{},"Type",[1327,1602,1603],{},"Default",[1327,1605,1332],{},[1334,1607,1608,1626,1647,1664,1680],{},[1324,1609,1610,1615,1620,1623],{},[1339,1611,1612],{},[636,1613,1614],{},"endpoint",[1339,1616,1617],{},[636,1618,1619],{},"string",[1339,1621,1622],{},"-",[1339,1624,1625],{},"OTLP HTTP endpoint (required)",[1324,1627,1628,1633,1637,1640],{},[1339,1629,1630],{},[636,1631,1632],{},"serviceName",[1339,1634,1635],{},[636,1636,1619],{},[1339,1638,1639],{},"From event",[1339,1641,1642,1643,1646],{},"Override ",[636,1644,1645],{},"service.name"," resource attribute",[1324,1648,1649,1654,1659,1661],{},[1339,1650,1651],{},[636,1652,1653],{},"headers",[1339,1655,1656],{},[636,1657,1658],{},"object",[1339,1660,1622],{},[1339,1662,1663],{},"Custom HTTP headers for authentication",[1324,1665,1666,1671,1675,1677],{},[1339,1667,1668],{},[636,1669,1670],{},"resourceAttributes",[1339,1672,1673],{},[636,1674,1658],{},[1339,1676,1622],{},[1339,1678,1679],{},"Additional OTLP resource attributes",[1324,1681,1682,1687,1692,1697],{},[1339,1683,1684],{},[636,1685,1686],{},"timeout",[1339,1688,1689],{},[636,1690,1691],{},"number",[1339,1693,1694],{},[636,1695,1696],{},"5000",[1339,1698,1699],{},"Request timeout in milliseconds",[621,1701,1703],{"id":1702},"deployment","Deployment",[527,1705,1706],{},"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.",[675,1708,1710],{"id":1709},"self-hosted","Self-hosted",[527,1712,1713],{},"Run an OpenTelemetry Collector and point evlog at it. Nothing else to configure:",[628,1715,1720],{"className":1716,"code":1717,"filename":1718,"language":1719,"meta":634,"style":634},"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",[636,1721,1722,1730,1737,1744,1751,1761,1765,1772,1779,1789,1793,1801,1809,1817,1834],{"__ignoreMap":634},[639,1723,1724,1727],{"class":641,"line":642},[639,1725,1726],{"class":794},"receivers",[639,1728,1729],{"class":649},":\n",[639,1731,1732,1735],{"class":641,"line":719},[639,1733,1734],{"class":794},"  otlp",[639,1736,1729],{"class":649},[639,1738,1739,1742],{"class":641,"line":738},[639,1740,1741],{"class":794},"    protocols",[639,1743,1729],{"class":649},[639,1745,1746,1749],{"class":641,"line":745},[639,1747,1748],{"class":794},"      http",[639,1750,1729],{"class":649},[639,1752,1753,1756,1758],{"class":641,"line":777},[639,1754,1755],{"class":794},"        endpoint",[639,1757,918],{"class":649},[639,1759,1760],{"class":666}," 0.0.0.0:4318\n",[639,1762,1763],{"class":641,"line":813},[639,1764,742],{"emptyLinePlaceholder":741},[639,1766,1767,1770],{"class":641,"line":931},[639,1768,1769],{"class":794},"exporters",[639,1771,1729],{"class":649},[639,1773,1774,1777],{"class":641,"line":946},[639,1775,1776],{"class":794},"  debug",[639,1778,1729],{"class":649},[639,1780,1781,1784,1786],{"class":641,"line":1575},[639,1782,1783],{"class":794},"    verbosity",[639,1785,918],{"class":649},[639,1787,1788],{"class":666}," detailed\n",[639,1790,1791],{"class":641,"line":1580},[639,1792,742],{"emptyLinePlaceholder":741},[639,1794,1796,1799],{"class":641,"line":1795},11,[639,1797,1798],{"class":794},"service",[639,1800,1729],{"class":649},[639,1802,1804,1807],{"class":641,"line":1803},12,[639,1805,1806],{"class":794},"  pipelines",[639,1808,1729],{"class":649},[639,1810,1812,1815],{"class":641,"line":1811},13,[639,1813,1814],{"class":794},"    logs",[639,1816,1729],{"class":649},[639,1818,1820,1823,1825,1828,1831],{"class":641,"line":1819},14,[639,1821,1822],{"class":794},"      receivers",[639,1824,918],{"class":649},[639,1826,1827],{"class":649}," [",[639,1829,1830],{"class":666},"otlp",[639,1832,1833],{"class":649},"]\n",[639,1835,1837,1840,1842,1844,1847],{"class":641,"line":1836},15,[639,1838,1839],{"class":794},"      exporters",[639,1841,918],{"class":649},[639,1843,1827],{"class":649},[639,1845,1846],{"class":666},"debug",[639,1848,1833],{"class":649},[628,1850,1853],{"className":681,"code":1851,"filename":1852,"language":684,"meta":634,"style":634},"docker run --rm -p 4318:4318 \\\n  -v $(pwd)\u002Fotel-collector.yaml:\u002Fetc\u002Fotelcol\u002Fconfig.yaml \\\n  otel\u002Fopentelemetry-collector:latest\n","Terminal",[636,1854,1855,1876,1894],{"__ignoreMap":634},[639,1856,1857,1861,1864,1867,1870,1873],{"class":641,"line":642},[639,1858,1860],{"class":1859},"sBMFI","docker",[639,1862,1863],{"class":666}," run",[639,1865,1866],{"class":666}," --rm",[639,1868,1869],{"class":666}," -p",[639,1871,1872],{"class":666}," 4318:4318",[639,1874,1875],{"class":653}," \\\n",[639,1877,1878,1881,1884,1887,1889,1892],{"class":641,"line":719},[639,1879,1880],{"class":666},"  -v",[639,1882,1883],{"class":649}," $(",[639,1885,1886],{"class":754},"pwd",[639,1888,767],{"class":649},[639,1890,1891],{"class":666},"\u002Fotel-collector.yaml:\u002Fetc\u002Fotelcol\u002Fconfig.yaml",[639,1893,1875],{"class":653},[639,1895,1896],{"class":641,"line":738},[639,1897,1898],{"class":666},"  otel\u002Fopentelemetry-collector:latest\n",[628,1900,1901],{"className":681,"code":682,"filename":683,"language":684,"meta":634,"style":634},[636,1902,1903],{"__ignoreMap":634},[639,1904,1905,1907,1909],{"class":641,"line":642},[639,1906,691],{"class":653},[639,1908,694],{"class":649},[639,1910,697],{"class":666},[527,1912,1913],{},"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.",[675,1915,1917],{"id":1916},"managed-gateways","Managed gateways",[527,1919,1920],{},"Same adapter, a credentialed endpoint:",[703,1922,1923,1950,1978],{},[628,1924,1926],{"className":681,"code":1925,"filename":539,"language":684,"meta":634,"style":634},"OTLP_ENDPOINT=https:\u002F\u002Fotlp-gateway-prod-us-central-0.grafana.net\u002Fotlp\nOTEL_EXPORTER_OTLP_HEADERS=Authorization=Basic%20base64-encoded-credentials\n",[636,1927,1928,1937],{"__ignoreMap":634},[639,1929,1930,1932,1934],{"class":641,"line":642},[639,1931,691],{"class":653},[639,1933,694],{"class":649},[639,1935,1936],{"class":666},"https:\u002F\u002Fotlp-gateway-prod-us-central-0.grafana.net\u002Fotlp\n",[639,1938,1939,1941,1943,1945,1947],{"class":641,"line":719},[639,1940,1370],{"class":653},[639,1942,694],{"class":649},[639,1944,1526],{"class":653},[639,1946,694],{"class":649},[639,1948,1949],{"class":666},"Basic%20base64-encoded-credentials\n",[628,1951,1953],{"className":681,"code":1952,"filename":166,"language":684,"meta":634,"style":634},"OTLP_ENDPOINT=https:\u002F\u002Fhttp-intake.logs.datadoghq.com\nOTLP_HEADERS=DD-API-KEY=your-api-key\n",[636,1954,1955,1964],{"__ignoreMap":634},[639,1956,1957,1959,1961],{"class":641,"line":642},[639,1958,691],{"class":653},[639,1960,694],{"class":649},[639,1962,1963],{"class":666},"https:\u002F\u002Fhttp-intake.logs.datadoghq.com\n",[639,1965,1966,1968,1970,1973,1975],{"class":641,"line":719},[639,1967,1360],{"class":653},[639,1969,694],{"class":649},[639,1971,1972],{"class":653},"DD-API-KEY",[639,1974,694],{"class":649},[639,1976,1977],{"class":666},"your-api-key\n",[628,1979,1981],{"className":681,"code":1980,"filename":549,"language":684,"meta":634,"style":634},"OTLP_ENDPOINT=https:\u002F\u002Fapi.honeycomb.io\nOTLP_HEADERS=x-honeycomb-team=your-api-key\n",[636,1982,1983,1992],{"__ignoreMap":634},[639,1984,1985,1987,1989],{"class":641,"line":642},[639,1986,691],{"class":653},[639,1988,694],{"class":649},[639,1990,1991],{"class":666},"https:\u002F\u002Fapi.honeycomb.io\n",[639,1993,1994,1996,1998,2001,2003],{"class":641,"line":719},[639,1995,1360],{"class":653},[639,1997,694],{"class":649},[639,1999,2000],{"class":653},"x-honeycomb-team",[639,2002,694],{"class":649},[639,2004,1977],{"class":666},[2006,2007,2009,2010,2013],"callout",{"color":2008,"icon":13},"info","Grafana Cloud uses URL-encoded headers — the ",[636,2011,2012],{},"%20"," is a space. The adapter\ndecodes that format automatically.",[621,2015,2017],{"id":2016},"otlp-log-format","OTLP Log Format",[527,2019,2020],{},"evlog maps wide events to the OTLP log format:",[1318,2022,2023,2033],{},[1321,2024,2025],{},[1324,2026,2027,2030],{},[1327,2028,2029],{},"evlog Field",[1327,2031,2032],{},"OTLP Field",[1334,2034,2035,2051,2063,2074,2085,2097,2109,2120,2131],{},[1324,2036,2037,2042],{},[1339,2038,2039],{},[636,2040,2041],{},"level",[1339,2043,2044,2047,2048],{},[636,2045,2046],{},"severityNumber"," \u002F ",[636,2049,2050],{},"severityText",[1324,2052,2053,2058],{},[1339,2054,2055],{},[636,2056,2057],{},"timestamp",[1339,2059,2060],{},[636,2061,2062],{},"timeUnixNano",[1324,2064,2065,2069],{},[1339,2066,2067],{},[636,2068,1798],{},[1339,2070,2071,2072],{},"Resource attribute ",[636,2073,1645],{},[1324,2075,2076,2081],{},[1339,2077,2078],{},[636,2079,2080],{},"environment",[1339,2082,2071,2083],{},[636,2084,1559],{},[1324,2086,2087,2092],{},[1339,2088,2089],{},[636,2090,2091],{},"version",[1339,2093,2071,2094],{},[636,2095,2096],{},"service.version",[1324,2098,2099,2104],{},[1339,2100,2101],{},[636,2102,2103],{},"region",[1339,2105,2071,2106],{},[636,2107,2108],{},"cloud.region",[1324,2110,2111,2116],{},[1339,2112,2113],{},[636,2114,2115],{},"traceId",[1339,2117,2118],{},[636,2119,2115],{},[1324,2121,2122,2127],{},[1339,2123,2124],{},[636,2125,2126],{},"spanId",[1339,2128,2129],{},[636,2130,2126],{},[1324,2132,2133,2136],{},[1339,2134,2135],{},"All other fields",[1339,2137,2138],{},"Log attributes",[675,2140,2142],{"id":2141},"severity-mapping","Severity Mapping",[1318,2144,2145,2158],{},[1321,2146,2147],{},[1324,2148,2149,2152,2155],{},[1327,2150,2151],{},"evlog Level",[1327,2153,2154],{},"OTLP Severity Number",[1327,2156,2157],{},"OTLP Severity Text",[1334,2159,2160,2172,2184,2197],{},[1324,2161,2162,2166,2169],{},[1339,2163,2164],{},[636,2165,1846],{},[1339,2167,2168],{},"5",[1339,2170,2171],{},"DEBUG",[1324,2173,2174,2178,2181],{},[1339,2175,2176],{},[636,2177,2008],{},[1339,2179,2180],{},"9",[1339,2182,2183],{},"INFO",[1324,2185,2186,2191,2194],{},[1339,2187,2188],{},[636,2189,2190],{},"warn",[1339,2192,2193],{},"13",[1339,2195,2196],{},"WARN",[1324,2198,2199,2204,2207],{},[1339,2200,2201],{},[636,2202,2203],{},"error",[1339,2205,2206],{},"17",[1339,2208,2209],{},"ERROR",[621,2211,2213],{"id":2212},"troubleshooting","Troubleshooting",[675,2215,2217],{"id":2216},"missing-endpoint-error","Missing endpoint error",[628,2219,2225],{"className":2220,"code":2222,"filename":2223,"language":2224,"meta":634},[2221],"language-text","[evlog\u002Fotlp] Missing endpoint. Set OTLP_ENDPOINT or OTEL_EXPORTER_OTLP_ENDPOINT\n","Console","text",[636,2226,2222],{"__ignoreMap":634},[527,2228,2229],{},"Make sure your endpoint environment variable is set and the server was restarted.",[675,2231,2233],{"id":2232},"_401-unauthorized","401 Unauthorized",[527,2235,2236],{},"Your authentication headers may be missing or incorrect. Check:",[583,2238,2239,2245,2248],{},[534,2240,2241,2242,2244],{},"The ",[636,2243,1370],{}," format is correct",[534,2246,2247],{},"Credentials are valid and not expired",[534,2249,2250],{},"The endpoint URL is correct",[675,2252,2254],{"id":2253},"_404-not-found","404 Not Found",[527,2256,2257,2258,2261],{},"The adapter sends to ",[636,2259,2260],{},"\u002Fv1\u002Flogs",". Make sure your endpoint:",[531,2263,2264,2267],{},[534,2265,2266],{},"Supports OTLP HTTP (not gRPC)",[534,2268,2269,2270,2272],{},"Is the base URL without ",[636,2271,2260],{}," suffix",[675,2274,2276],{"id":2275},"logs-not-appearing","Logs not appearing",[583,2278,2279,2286,2289],{},[534,2280,2281,2282,2285],{},"Check the server console for ",[636,2283,2284],{},"[evlog\u002Fotlp]"," error messages",[534,2287,2288],{},"Test with a local collector first to verify the format",[534,2290,2291],{},"Check your backend's ingestion delay (some have 1-2 minute delays)",[621,2293,2295],{"id":2294},"direct-api-usage","Direct API Usage",[527,2297,2298],{},"For advanced use cases:",[628,2300,2303],{"className":630,"code":2301,"filename":2302,"language":633,"meta":634,"style":634},"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",[636,2304,2305,2334,2338,2343,2356,2370,2376,2380,2385,2398,2412,2418,2422,2427],{"__ignoreMap":634},[639,2306,2307,2309,2311,2314,2316,2319,2321,2324,2326,2328,2330,2332],{"class":641,"line":642},[639,2308,646],{"class":645},[639,2310,650],{"class":649},[639,2312,2313],{"class":653}," sendToOTLP",[639,2315,805],{"class":649},[639,2317,2318],{"class":653}," sendBatchToOTLP",[639,2320,805],{"class":649},[639,2322,2323],{"class":653}," toOTLPLogRecord",[639,2325,657],{"class":649},[639,2327,660],{"class":645},[639,2329,663],{"class":649},[639,2331,667],{"class":666},[639,2333,670],{"class":649},[639,2335,2336],{"class":641,"line":719},[639,2337,742],{"emptyLinePlaceholder":741},[639,2339,2340],{"class":641,"line":738},[639,2341,2342],{"class":715},"\u002F\u002F Send a single event\n",[639,2344,2345,2347,2349,2352,2354],{"class":641,"line":745},[639,2346,1098],{"class":645},[639,2348,2313],{"class":754},[639,2350,2351],{"class":653},"(event",[639,2353,805],{"class":649},[639,2355,774],{"class":649},[639,2357,2358,2360,2362,2364,2366,2368],{"class":641,"line":777},[639,2359,1483],{"class":794},[639,2361,918],{"class":649},[639,2363,663],{"class":649},[639,2365,1348],{"class":666},[639,2367,797],{"class":649},[639,2369,928],{"class":649},[639,2371,2372,2374],{"class":641,"line":813},[639,2373,816],{"class":649},[639,2375,819],{"class":653},[639,2377,2378],{"class":641,"line":931},[639,2379,742],{"emptyLinePlaceholder":741},[639,2381,2382],{"class":641,"line":946},[639,2383,2384],{"class":715},"\u002F\u002F Send multiple events\n",[639,2386,2387,2389,2391,2394,2396],{"class":641,"line":1575},[639,2388,1098],{"class":645},[639,2390,2318],{"class":754},[639,2392,2393],{"class":653},"(events",[639,2395,805],{"class":649},[639,2397,774],{"class":649},[639,2399,2400,2402,2404,2406,2408,2410],{"class":641,"line":1580},[639,2401,1483],{"class":794},[639,2403,918],{"class":649},[639,2405,663],{"class":649},[639,2407,1348],{"class":666},[639,2409,797],{"class":649},[639,2411,928],{"class":649},[639,2413,2414,2416],{"class":641,"line":1795},[639,2415,816],{"class":649},[639,2417,819],{"class":653},[639,2419,2420],{"class":641,"line":1803},[639,2421,742],{"emptyLinePlaceholder":741},[639,2423,2424],{"class":641,"line":1811},[639,2425,2426],{"class":715},"\u002F\u002F Convert event to OTLP format (for inspection)\n",[639,2428,2429,2431,2434,2436,2438],{"class":641,"line":1819},[639,2430,1467],{"class":770},[639,2432,2433],{"class":653}," otlpRecord ",[639,2435,694],{"class":649},[639,2437,2323],{"class":754},[639,2439,2440],{"class":653},"(event)\n",[621,2442,2444],{"id":2443},"next-steps","Next Steps",[531,2446,2447,2453,2459,2465],{},[534,2448,2449,2452],{},[610,2450,2451],{"href":147},"Axiom Adapter"," - Send logs to Axiom",[534,2454,2455,2458],{},[610,2456,2457],{"href":152},"PostHog Adapter"," - Send logs to PostHog",[534,2460,2461,2464],{},[610,2462,2463],{"href":482},"Custom Adapters"," - Build your own adapter",[534,2466,2467,2469],{},[610,2468,508],{"href":509}," - Security and production tips",[2471,2472,2473],"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}",{"title":634,"searchDepth":719,"depth":719,"links":2475},[2476,2477,2481,2487,2491,2494,2500,2501],{"id":623,"depth":719,"text":20},{"id":673,"depth":719,"text":25,"children":2478},[2479,2480],{"id":677,"depth":738,"text":678},{"id":700,"depth":738,"text":701},{"id":1283,"depth":719,"text":495,"children":2482},[2483,2484,2485,2486],{"id":1315,"depth":738,"text":1316},{"id":1383,"depth":738,"text":1384},{"id":1455,"depth":738,"text":1456},{"id":1587,"depth":738,"text":1588},{"id":1702,"depth":719,"text":1703,"children":2488},[2489,2490],{"id":1709,"depth":738,"text":1710},{"id":1916,"depth":738,"text":1917},{"id":2016,"depth":719,"text":2017,"children":2492},[2493],{"id":2141,"depth":738,"text":2142},{"id":2212,"depth":719,"text":2213,"children":2495},[2496,2497,2498,2499],{"id":2216,"depth":738,"text":2217},{"id":2232,"depth":738,"text":2233},{"id":2253,"depth":738,"text":2254},{"id":2275,"depth":738,"text":2276},{"id":2294,"depth":719,"text":2295},{"id":2443,"depth":719,"text":2444},"Send logs via OpenTelemetry Protocol (OTLP) to Grafana, Datadog, Honeycomb, and any compatible backend. Supports gRPC and HTTP transports.","md",[2505,2512],{"label":2506,"icon":2507,"to":2508,"target":2509,"color":2510,"variant":2511},"OpenTelemetry Docs","i-lucide-external-link","https:\u002F\u002Fopentelemetry.io\u002Fdocs\u002F","_blank","neutral","subtle",{"label":2463,"icon":329,"to":482,"color":2510,"variant":2511},{},{"title":186,"icon":189},{"title":522,"description":2502},"2LeAo1kOYRBcGjqn3X98eYDtaTvwPTcuWOrSIkv4dpI",[2518,2520],{"title":181,"path":182,"stem":183,"description":2519,"icon":184,"children":-1},"Insert wide events into ClickHouse over the HTTP interface — typed columns for what you aggregate, full JSON for everything else.",{"title":191,"path":192,"stem":193,"description":2521,"icon":194,"children":-1},"Send wide events to HyperDX via OTLP\u002FHTTP using HyperDX’s documented OpenTelemetry endpoint and authorization header. Zero-config setup with environment variables.",1785615023415]