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