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