[{"data":1,"prerenderedAt":1395},["ShallowReactive",2],{"navigation_docs":3,"-compare-opentelemetry":567,"-compare-opentelemetry-surround":1390},[4,30,80,133,313,444,503,542],{"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,128],{"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,"icon":132},"Observability Score","\u002Fcli\u002Fobservability-score","3.cli\u002F9.observability-score","i-lucide-activity",{"title":134,"path":135,"stem":136,"children":137,"page":29},"Integrate","\u002Fintegrate","4.integrate",[138,142,225],{"title":36,"path":139,"stem":140,"icon":141},"\u002Fintegrate\u002Foverview","4.integrate\u002F0.overview","i-lucide-plug",{"title":143,"path":144,"stem":145,"children":146,"page":29},"Adapters","\u002Fintegrate\u002Fadapters","4.integrate\u002Fadapters",[147,150,180,205],{"title":36,"path":148,"stem":149,"icon":39},"\u002Fintegrate\u002Fadapters\u002Foverview","4.integrate\u002Fadapters\u002F01.overview",{"title":151,"path":152,"stem":153,"children":154,"page":29},"Cloud","\u002Fintegrate\u002Fadapters\u002Fcloud","4.integrate\u002Fadapters\u002Fcloud",[155,160,165,170,175],{"title":156,"path":157,"stem":158,"icon":159},"Axiom","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Faxiom","4.integrate\u002Fadapters\u002Fcloud\u002F01.axiom","i-custom-axiom",{"title":161,"path":162,"stem":163,"icon":164},"PostHog","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fposthog","4.integrate\u002Fadapters\u002Fcloud\u002F02.posthog","i-simple-icons-posthog",{"title":166,"path":167,"stem":168,"icon":169},"Sentry","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fsentry","4.integrate\u002Fadapters\u002Fcloud\u002F03.sentry","i-simple-icons-sentry",{"title":171,"path":172,"stem":173,"icon":174},"Better Stack","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fbetter-stack","4.integrate\u002Fadapters\u002Fcloud\u002F04.better-stack","i-simple-icons-betterstack",{"title":176,"path":177,"stem":178,"icon":179},"Datadog","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fdatadog","4.integrate\u002Fadapters\u002Fcloud\u002F05.datadog","i-simple-icons-datadog",{"title":181,"path":182,"stem":183,"children":184,"page":29},"Cloud or Self-Hosted","\u002Fintegrate\u002Fadapters\u002Fhybrid","4.integrate\u002Fadapters\u002Fhybrid",[185,190,195,200],{"title":186,"path":187,"stem":188,"icon":189},"Grafana Loki","\u002Fintegrate\u002Fadapters\u002Fhybrid\u002Floki","4.integrate\u002Fadapters\u002Fhybrid\u002F01.loki","i-simple-icons-grafana",{"title":191,"path":192,"stem":193,"icon":194},"ClickHouse","\u002Fintegrate\u002Fadapters\u002Fhybrid\u002Fclickhouse","4.integrate\u002Fadapters\u002Fhybrid\u002F02.clickhouse","i-simple-icons-clickhouse",{"title":196,"path":197,"stem":198,"icon":199},"OTLP","\u002Fintegrate\u002Fadapters\u002Fhybrid\u002Fotlp","4.integrate\u002Fadapters\u002Fhybrid\u002F03.otlp","i-simple-icons-opentelemetry",{"title":201,"path":202,"stem":203,"icon":204},"HyperDX","\u002Fintegrate\u002Fadapters\u002Fhybrid\u002Fhyperdx","4.integrate\u002Fadapters\u002Fhybrid\u002F04.hyperdx","i-custom-hyperdx",{"title":206,"path":207,"stem":208,"children":209,"page":29},"Self-Hosted","\u002Fintegrate\u002Fadapters\u002Fself-hosted","4.integrate\u002Fadapters\u002Fself-hosted",[210,215,220],{"title":211,"path":212,"stem":213,"icon":214},"File System","\u002Fintegrate\u002Fadapters\u002Fself-hosted\u002Ffs","4.integrate\u002Fadapters\u002Fself-hosted\u002F01.fs","i-lucide-hard-drive",{"title":216,"path":217,"stem":218,"icon":219},"NuxtHub","\u002Fintegrate\u002Fadapters\u002Fself-hosted\u002Fnuxthub","4.integrate\u002Fadapters\u002Fself-hosted\u002F02.nuxthub","i-simple-icons-nuxt",{"title":221,"path":222,"stem":223,"icon":224},"Memory","\u002Fintegrate\u002Fadapters\u002Fself-hosted\u002Fmemory","4.integrate\u002Fadapters\u002Fself-hosted\u002F03.memory","i-lucide-cpu",{"title":226,"path":227,"stem":228,"children":229,"page":29},"Frameworks","\u002Fintegrate\u002Fframeworks","4.integrate\u002Fframeworks",[230,234,239,244,249,254,259,264,269,274,279,284,289,294,298,303,308],{"title":36,"path":231,"stem":232,"icon":233},"\u002Fintegrate\u002Fframeworks\u002Foverview","4.integrate\u002Fframeworks\u002F00.overview","i-lucide-layout-grid",{"title":235,"path":236,"stem":237,"icon":238},"Nuxt","\u002Fintegrate\u002Fframeworks\u002Fnuxt","4.integrate\u002Fframeworks\u002F01.nuxt","i-simple-icons-nuxtdotjs",{"title":240,"path":241,"stem":242,"icon":243},"Next.js","\u002Fintegrate\u002Fframeworks\u002Fnextjs","4.integrate\u002Fframeworks\u002F02.nextjs","i-simple-icons-nextdotjs",{"title":245,"path":246,"stem":247,"icon":248},"SvelteKit","\u002Fintegrate\u002Fframeworks\u002Fsveltekit","4.integrate\u002Fframeworks\u002F03.sveltekit","i-simple-icons-svelte",{"title":250,"path":251,"stem":252,"icon":253},"Nitro","\u002Fintegrate\u002Fframeworks\u002Fnitro","4.integrate\u002Fframeworks\u002F04.nitro","i-custom-nitro",{"title":255,"path":256,"stem":257,"icon":258},"TanStack Start","\u002Fintegrate\u002Fframeworks\u002Ftanstack-start","4.integrate\u002Fframeworks\u002F05.tanstack-start","i-custom-tanstack",{"title":260,"path":261,"stem":262,"icon":263},"NestJS","\u002Fintegrate\u002Fframeworks\u002Fnestjs","4.integrate\u002Fframeworks\u002F06.nestjs","i-simple-icons-nestjs",{"title":265,"path":266,"stem":267,"icon":268},"Express","\u002Fintegrate\u002Fframeworks\u002Fexpress","4.integrate\u002Fframeworks\u002F07.express","i-simple-icons-express",{"title":270,"path":271,"stem":272,"icon":273},"Hono","\u002Fintegrate\u002Fframeworks\u002Fhono","4.integrate\u002Fframeworks\u002F08.hono","i-simple-icons-hono",{"title":275,"path":276,"stem":277,"icon":278},"Fastify","\u002Fintegrate\u002Fframeworks\u002Ffastify","4.integrate\u002Fframeworks\u002F09.fastify","i-simple-icons-fastify",{"title":280,"path":281,"stem":282,"icon":283},"Elysia","\u002Fintegrate\u002Fframeworks\u002Felysia","4.integrate\u002Fframeworks\u002F10.elysia","i-custom-elysia",{"title":285,"path":286,"stem":287,"icon":288},"React Router","\u002Fintegrate\u002Fframeworks\u002Freact-router","4.integrate\u002Fframeworks\u002F11.react-router","i-custom-reactrouter",{"title":290,"path":291,"stem":292,"icon":293},"Cloudflare Workers","\u002Fintegrate\u002Fframeworks\u002Fcloudflare-workers","4.integrate\u002Fframeworks\u002F12.cloudflare-workers","i-simple-icons-cloudflare",{"title":295,"path":296,"stem":297,"icon":74},"Standalone","\u002Fintegrate\u002Fframeworks\u002Fstandalone","4.integrate\u002Fframeworks\u002F13.standalone",{"title":299,"path":300,"stem":301,"icon":302},"Astro","\u002Fintegrate\u002Fframeworks\u002Fastro","4.integrate\u002Fframeworks\u002F14.astro","i-simple-icons-astro",{"title":304,"path":305,"stem":306,"icon":307},"oRPC","\u002Fintegrate\u002Fframeworks\u002Forpc","4.integrate\u002Fframeworks\u002F15.orpc","i-lucide-network",{"title":309,"path":310,"stem":311,"icon":312},"AWS Lambda","\u002Fintegrate\u002Fframeworks\u002Faws-lambda","4.integrate\u002Fframeworks\u002F16.aws-lambda","i-custom-lambda",{"title":314,"path":315,"stem":316,"children":317,"page":29},"Use Cases","\u002Fuse-cases","5.use-cases",[318,321,326,354,381,413,434,439],{"title":36,"path":319,"stem":320,"icon":102},"\u002Fuse-cases\u002Foverview","5.use-cases\u002F0.overview",{"title":322,"path":323,"stem":324,"icon":325},"Client Logging","\u002Fuse-cases\u002Fclient-logging","5.use-cases\u002F1.client-logging","i-lucide-monitor",{"title":327,"icon":328,"path":329,"stem":330,"children":331,"page":29},"AI SDK","i-simple-icons-vercel","\u002Fuse-cases\u002Fai-sdk","5.use-cases\u002F2.ai-sdk",[332,335,340,345,350],{"title":36,"path":333,"stem":334,"icon":39},"\u002Fuse-cases\u002Fai-sdk\u002Foverview","5.use-cases\u002F2.ai-sdk\u002F01.overview",{"title":336,"path":337,"stem":338,"icon":339},"Usage","\u002Fuse-cases\u002Fai-sdk\u002Fusage","5.use-cases\u002F2.ai-sdk\u002F02.usage","i-lucide-code",{"title":341,"path":342,"stem":343,"icon":344},"Options","\u002Fuse-cases\u002Fai-sdk\u002Foptions","5.use-cases\u002F2.ai-sdk\u002F03.options","i-lucide-sliders",{"title":346,"path":347,"stem":348,"icon":349},"Metadata","\u002Fuse-cases\u002Fai-sdk\u002Fmetadata","5.use-cases\u002F2.ai-sdk\u002F04.metadata","i-lucide-database",{"title":351,"path":352,"stem":353,"icon":132},"Telemetry","\u002Fuse-cases\u002Fai-sdk\u002Ftelemetry","5.use-cases\u002F2.ai-sdk\u002F05.telemetry",{"title":355,"icon":356,"path":357,"stem":358,"children":359,"page":29},"Better Auth","i-simple-icons-betterauth","\u002Fuse-cases\u002Fbetter-auth","5.use-cases\u002F3.better-auth",[360,363,368,373,377],{"title":36,"path":361,"stem":362,"icon":39},"\u002Fuse-cases\u002Fbetter-auth\u002Foverview","5.use-cases\u002F3.better-auth\u002F01.overview",{"title":364,"path":365,"stem":366,"icon":367},"Identify User","\u002Fuse-cases\u002Fbetter-auth\u002Fidentify-user","5.use-cases\u002F3.better-auth\u002F02.identify-user","i-lucide-user-check",{"title":369,"path":370,"stem":371,"icon":372},"Middleware","\u002Fuse-cases\u002Fbetter-auth\u002Fmiddleware","5.use-cases\u002F3.better-auth\u002F03.middleware","i-lucide-shield",{"title":374,"path":375,"stem":376,"icon":325},"Client Sync","\u002Fuse-cases\u002Fbetter-auth\u002Fclient-sync","5.use-cases\u002F3.better-auth\u002F04.client-sync",{"title":378,"path":379,"stem":380,"icon":107},"Performance","\u002Fuse-cases\u002Fbetter-auth\u002Fperformance","5.use-cases\u002F3.better-auth\u002F05.performance",{"title":382,"icon":383,"path":384,"stem":385,"children":386,"page":29},"Audit Logs","i-lucide-shield-check","\u002Fuse-cases\u002Faudit","5.use-cases\u002F4.audit",[387,390,395,400,405,409],{"title":36,"path":388,"stem":389,"icon":39},"\u002Fuse-cases\u002Faudit\u002Foverview","5.use-cases\u002F4.audit\u002F01.overview",{"title":391,"path":392,"stem":393,"icon":394},"Schema","\u002Fuse-cases\u002Faudit\u002Fschema","5.use-cases\u002F4.audit\u002F02.schema","i-lucide-file-text",{"title":396,"path":397,"stem":398,"icon":399},"Recording","\u002Fuse-cases\u002Faudit\u002Frecording","5.use-cases\u002F4.audit\u002F03.recording","i-lucide-pen-line",{"title":401,"path":402,"stem":403,"icon":404},"Drains","\u002Fuse-cases\u002Faudit\u002Fpipeline","5.use-cases\u002F4.audit\u002F04.pipeline","i-lucide-link",{"title":406,"path":407,"stem":408,"icon":383},"Compliance","\u002Fuse-cases\u002Faudit\u002Fcompliance","5.use-cases\u002F4.audit\u002F05.compliance",{"title":410,"path":411,"stem":412,"icon":79},"Recipes","\u002Fuse-cases\u002Faudit\u002Frecipes","5.use-cases\u002F4.audit\u002F06.recipes",{"title":351,"icon":107,"path":414,"stem":415,"children":416,"page":29},"\u002Fuse-cases\u002Ftelemetry","5.use-cases\u002F4.telemetry",[417,420,425,430],{"title":36,"path":418,"stem":419,"icon":39},"\u002Fuse-cases\u002Ftelemetry\u002Foverview","5.use-cases\u002F4.telemetry\u002F01.overview",{"title":421,"path":422,"stem":423,"icon":424},"Setup","\u002Fuse-cases\u002Ftelemetry\u002Fsetup","5.use-cases\u002F4.telemetry\u002F02.setup","i-lucide-wrench",{"title":426,"path":427,"stem":428,"icon":429},"Ingest","\u002Fuse-cases\u002Ftelemetry\u002Fingest","5.use-cases\u002F4.telemetry\u002F03.ingest","i-lucide-server",{"title":431,"path":432,"stem":433,"icon":79},"Reference","\u002Fuse-cases\u002Ftelemetry\u002Freference","5.use-cases\u002F4.telemetry\u002F04.reference",{"title":435,"path":436,"stem":437,"icon":438},"Enrichers","\u002Fuse-cases\u002Fenrichers","5.use-cases\u002F5.enrichers","i-lucide-sparkles",{"title":440,"path":441,"stem":442,"icon":443},"eve","\u002Fuse-cases\u002Feve","5.use-cases\u002F5.eve","i-custom-eve",{"title":445,"path":446,"stem":447,"children":448,"page":29},"Extend","\u002Fextend","6.extend",[449,453,458,463,467,472,476,480,484,488,493,498],{"title":36,"path":450,"stem":451,"icon":452},"\u002Fextend\u002Foverview","6.extend\u002F0.overview","i-lucide-blocks",{"title":454,"path":455,"stem":456,"icon":457},"Stream","\u002Fextend\u002Fstream","6.extend\u002F1.stream","i-lucide-radio-tower",{"title":459,"path":460,"stem":461,"icon":462},"Custom framework","\u002Fextend\u002Fcustom-framework","6.extend\u002F10.custom-framework","i-lucide-puzzle",{"title":464,"path":465,"stem":466,"icon":457},"Diagnostics channel","\u002Fextend\u002Fdiagnostics-channel","6.extend\u002F11.diagnostics-channel",{"title":468,"path":469,"stem":470,"icon":471},"FS reader","\u002Fextend\u002Ffs-reader","6.extend\u002F2.fs-reader","i-lucide-folder-search",{"title":410,"path":473,"stem":474,"icon":475},"\u002Fextend\u002Fconsumer-recipes","6.extend\u002F3.consumer-recipes","i-lucide-chef-hat",{"title":477,"path":478,"stem":479,"icon":452},"Plugins","\u002Fextend\u002Fplugins","6.extend\u002F4.plugins",{"title":481,"path":482,"stem":483,"icon":438},"Custom enrichers","\u002Fextend\u002Fcustom-enrichers","6.extend\u002F5.custom-enrichers",{"title":485,"path":486,"stem":487,"icon":64},"Tail sampling","\u002Fextend\u002Ftail-sampling","6.extend\u002F6.tail-sampling",{"title":489,"path":490,"stem":491,"icon":492},"Identity headers","\u002Fextend\u002Fidentity-headers","6.extend\u002F7.identity-headers","i-lucide-fingerprint",{"title":494,"path":495,"stem":496,"icon":497},"Custom drains","\u002Fextend\u002Fcustom-drains","6.extend\u002F8.custom-drains","i-lucide-share-2",{"title":499,"path":500,"stem":501,"icon":502},"Drain pipeline","\u002Fextend\u002Fdrain-pipeline","6.extend\u002F9.drain-pipeline","i-lucide-workflow",{"title":431,"path":504,"stem":505,"children":506,"page":29},"\u002Freference","7.reference",[507,511,516,519,524,528,533,537],{"title":36,"path":508,"stem":509,"icon":510},"\u002Freference\u002Foverview","7.reference\u002F0.overview","i-lucide-book-marked",{"title":512,"path":513,"stem":514,"icon":515},"Configuration","\u002Freference\u002Fconfiguration","7.reference\u002F1.configuration","i-lucide-settings",{"title":378,"path":517,"stem":518,"icon":107},"\u002Freference\u002Fperformance","7.reference\u002F2.performance",{"title":520,"path":521,"stem":522,"icon":523},"Vite Plugin","\u002Freference\u002Fvite-plugin","7.reference\u002F3.vite-plugin","i-custom-vite",{"title":525,"path":526,"stem":527,"icon":383},"Best Practices","\u002Freference\u002Fbest-practices","7.reference\u002F4.best-practices",{"title":529,"path":530,"stem":531,"icon":532},"vs Other Loggers","\u002Freference\u002Fvs-other-loggers","7.reference\u002F5.vs-other-loggers","i-lucide-scale",{"title":534,"path":535,"stem":536,"icon":438},"Agent Skills","\u002Freference\u002Fagent-skills","7.reference\u002F6.agent-skills",{"title":538,"path":539,"stem":540,"icon":541},"Cost","\u002Freference\u002Fcost","7.reference\u002F7.cost","i-lucide-receipt",{"title":543,"path":544,"stem":545,"children":546,"page":29},"Compare","\u002Fcompare","8.compare",[547,551,555,559,563],{"title":548,"path":549,"stem":550,"icon":532},"evlog vs Pino","\u002Fcompare\u002Fpino","8.compare\u002F1.pino",{"title":552,"path":553,"stem":554,"icon":199},"evlog vs OpenTelemetry","\u002Fcompare\u002Fopentelemetry","8.compare\u002F2.opentelemetry",{"title":556,"path":557,"stem":558,"icon":532},"evlog vs LogTape","\u002Fcompare\u002Flogtape","8.compare\u002F3.logtape",{"title":560,"path":561,"stem":562,"icon":532},"evlog vs Winston: formats and request events","\u002Fcompare\u002Fwinston","8.compare\u002F4.winston",{"title":564,"path":565,"stem":566,"icon":532},"evlog vs Consola: reporters and request context","\u002Fcompare\u002Fconsola","8.compare\u002F5.consola",{"id":568,"title":569,"body":570,"description":1377,"extension":1378,"links":1379,"meta":1386,"navigation":1387,"path":553,"seo":1388,"stem":554,"__hash__":1389},"docs\u002F8.compare\u002F2.opentelemetry.md","evlog and OpenTelemetry: connect logs to traces",{"type":571,"value":572,"toc":1371},"minimark",[573,577,582,594,605,609,618,621,648,651,1135,1138,1154,1164,1167,1289,1296,1300,1316,1327,1334,1338,1347,1353,1367],[574,575,576],"p",{},"You already export traces to an OpenTelemetry Collector and want application logs beside them. evlog can build those log events and send them through OTLP. Keep the tracing instrumentation: evlog does not create spans or metrics.",[578,579,581],"h2",{"id":580},"assign-each-layer-a-job","Assign each layer a job",[583,584,591],"pre",{"className":585,"code":587,"filename":588,"language":589,"meta":590},[586],"language-text","Application fields -> evlog event -> OTLP HTTP \u002Fv1\u002Flogs -> Collector -> backend\nActive OTel span  -> traceId + spanId on the event\nOTel SDK         -> spans and metrics                -> Collector -> backend\n","Data flow","text","",[592,593,587],"code",{"__ignoreMap":590},[574,595,596,597,604],{},"The SDK instruments operations, the Collector receives and processes telemetry, and the backend provides storage, queries, and alerts. ",[598,599,603],"a",{"href":600,"rel":601},"https:\u002F\u002Fopentelemetry.io\u002Fdocs\u002F",[602],"nofollow","OpenTelemetry's documentation"," describes those responsibilities. Semantic conventions standardize shared attributes, while custom application attributes remain valid.",[578,606,608],{"id":607},"export-an-event-with-the-active-span-context","Export an event with the active span context",[574,610,611,612,617],{},"This example assumes a Node.js application with its OpenTelemetry SDK and context manager already initialized. The function must run inside an active span to attach trace context. Follow the ",[598,613,616],{"href":614,"rel":615},"https:\u002F\u002Fopentelemetry.io\u002Fdocs\u002Flanguages\u002Fjs\u002Finstrumentation\u002F",[602],"JavaScript instrumentation guide"," if tracing is not configured yet.",[574,619,620],{},"Install the logging package and OTel API in that application:",[583,622,627],{"className":623,"code":624,"filename":625,"language":626,"meta":590,"style":590},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","npm install evlog @opentelemetry\u002Fapi\n","Terminal","bash",[592,628,629],{"__ignoreMap":590},[630,631,634,638,642,645],"span",{"class":632,"line":633},"line",1,[630,635,637],{"class":636},"sBMFI","npm",[630,639,641],{"class":640},"sfazB"," install",[630,643,644],{"class":640}," evlog",[630,646,647],{"class":640}," @opentelemetry\u002Fapi\n",[574,649,650],{},"The function writes a completed checkout event as local JSON and exports it through OTLP. It awaits delivery explicitly, so the caller can observe an export failure. Do not also register this drain globally, which would export the event twice.",[583,652,657],{"className":653,"code":654,"filename":655,"language":656,"meta":590,"style":590},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { isSpanContextValid, trace } from '@opentelemetry\u002Fapi'\nimport { createLogger, initLogger } from 'evlog'\nimport { createOTLPDrain } from 'evlog\u002Fotlp'\n\ninitLogger({ env: { service: 'checkout' }, pretty: false })\nconst drain = createOTLPDrain({ recordShape: 'compact' })\n\nexport async function recordCheckout(orderId: string, outcome: 'paid' | 'declined') {\n  const log = createLogger({ orderId, outcome })\n  const spanContext = trace.getActiveSpan()?.spanContext()\n  if (spanContext && isSpanContextValid(spanContext)) {\n    log.set({ traceId: spanContext.traceId, spanId: spanContext.spanId })\n  }\n  if (outcome === 'declined') log.error(new Error('Payment declined'))\n  const event = log.emit()\n  if (event) await drain({ event })\n}\n","checkout-log.ts","typescript",[592,658,659,694,720,741,748,800,835,840,896,925,955,981,1026,1032,1082,1101,1129],{"__ignoreMap":590},[630,660,661,665,669,673,676,679,682,685,688,691],{"class":632,"line":633},[630,662,664],{"class":663},"s7zQu","import",[630,666,668],{"class":667},"sMK4o"," {",[630,670,672],{"class":671},"sTEyZ"," isSpanContextValid",[630,674,675],{"class":667},",",[630,677,678],{"class":671}," trace",[630,680,681],{"class":667}," }",[630,683,684],{"class":663}," from",[630,686,687],{"class":667}," '",[630,689,690],{"class":640},"@opentelemetry\u002Fapi",[630,692,693],{"class":667},"'\n",[630,695,697,699,701,704,706,709,711,713,715,718],{"class":632,"line":696},2,[630,698,664],{"class":663},[630,700,668],{"class":667},[630,702,703],{"class":671}," createLogger",[630,705,675],{"class":667},[630,707,708],{"class":671}," initLogger",[630,710,681],{"class":667},[630,712,684],{"class":663},[630,714,687],{"class":667},[630,716,717],{"class":640},"evlog",[630,719,693],{"class":667},[630,721,723,725,727,730,732,734,736,739],{"class":632,"line":722},3,[630,724,664],{"class":663},[630,726,668],{"class":667},[630,728,729],{"class":671}," createOTLPDrain",[630,731,681],{"class":667},[630,733,684],{"class":663},[630,735,687],{"class":667},[630,737,738],{"class":640},"evlog\u002Fotlp",[630,740,693],{"class":667},[630,742,744],{"class":632,"line":743},4,[630,745,747],{"emptyLinePlaceholder":746},true,"\n",[630,749,751,755,758,761,765,768,770,773,775,777,780,783,786,789,791,795,797],{"class":632,"line":750},5,[630,752,754],{"class":753},"s2Zo4","initLogger",[630,756,757],{"class":671},"(",[630,759,760],{"class":667},"{",[630,762,764],{"class":763},"swJcz"," env",[630,766,767],{"class":667},":",[630,769,668],{"class":667},[630,771,772],{"class":763}," service",[630,774,767],{"class":667},[630,776,687],{"class":667},[630,778,779],{"class":640},"checkout",[630,781,782],{"class":667},"'",[630,784,785],{"class":667}," },",[630,787,788],{"class":763}," pretty",[630,790,767],{"class":667},[630,792,794],{"class":793},"sfNiH"," false",[630,796,681],{"class":667},[630,798,799],{"class":671},")\n",[630,801,803,807,810,813,815,817,819,822,824,826,829,831,833],{"class":632,"line":802},6,[630,804,806],{"class":805},"spNyl","const",[630,808,809],{"class":671}," drain ",[630,811,812],{"class":667},"=",[630,814,729],{"class":753},[630,816,757],{"class":671},[630,818,760],{"class":667},[630,820,821],{"class":763}," recordShape",[630,823,767],{"class":667},[630,825,687],{"class":667},[630,827,828],{"class":640},"compact",[630,830,782],{"class":667},[630,832,681],{"class":667},[630,834,799],{"class":671},[630,836,838],{"class":632,"line":837},7,[630,839,747],{"emptyLinePlaceholder":746},[630,841,843,846,849,852,855,857,861,863,866,868,871,873,875,878,880,883,885,888,890,893],{"class":632,"line":842},8,[630,844,845],{"class":663},"export",[630,847,848],{"class":805}," async",[630,850,851],{"class":805}," function",[630,853,854],{"class":753}," recordCheckout",[630,856,757],{"class":667},[630,858,860],{"class":859},"sHdIc","orderId",[630,862,767],{"class":667},[630,864,865],{"class":636}," string",[630,867,675],{"class":667},[630,869,870],{"class":859}," outcome",[630,872,767],{"class":667},[630,874,687],{"class":667},[630,876,877],{"class":640},"paid",[630,879,782],{"class":667},[630,881,882],{"class":667}," |",[630,884,687],{"class":667},[630,886,887],{"class":640},"declined",[630,889,782],{"class":667},[630,891,892],{"class":667},")",[630,894,895],{"class":667}," {\n",[630,897,899,902,905,908,910,912,914,917,919,921,923],{"class":632,"line":898},9,[630,900,901],{"class":805},"  const",[630,903,904],{"class":671}," log",[630,906,907],{"class":667}," =",[630,909,703],{"class":753},[630,911,757],{"class":763},[630,913,760],{"class":667},[630,915,916],{"class":671}," orderId",[630,918,675],{"class":667},[630,920,870],{"class":671},[630,922,681],{"class":667},[630,924,799],{"class":763},[630,926,928,930,933,935,937,940,943,946,949,952],{"class":632,"line":927},10,[630,929,901],{"class":805},[630,931,932],{"class":671}," spanContext",[630,934,907],{"class":667},[630,936,678],{"class":671},[630,938,939],{"class":667},".",[630,941,942],{"class":753},"getActiveSpan",[630,944,945],{"class":763},"()",[630,947,948],{"class":667},"?.",[630,950,951],{"class":753},"spanContext",[630,953,954],{"class":763},"()\n",[630,956,958,961,964,966,969,971,973,975,978],{"class":632,"line":957},11,[630,959,960],{"class":663},"  if",[630,962,963],{"class":763}," (",[630,965,951],{"class":671},[630,967,968],{"class":667}," &&",[630,970,672],{"class":753},[630,972,757],{"class":763},[630,974,951],{"class":671},[630,976,977],{"class":763},")) ",[630,979,980],{"class":667},"{\n",[630,982,984,987,989,992,994,996,999,1001,1003,1005,1008,1010,1013,1015,1017,1019,1022,1024],{"class":632,"line":983},12,[630,985,986],{"class":671},"    log",[630,988,939],{"class":667},[630,990,991],{"class":753},"set",[630,993,757],{"class":763},[630,995,760],{"class":667},[630,997,998],{"class":763}," traceId",[630,1000,767],{"class":667},[630,1002,932],{"class":671},[630,1004,939],{"class":667},[630,1006,1007],{"class":671},"traceId",[630,1009,675],{"class":667},[630,1011,1012],{"class":763}," spanId",[630,1014,767],{"class":667},[630,1016,932],{"class":671},[630,1018,939],{"class":667},[630,1020,1021],{"class":671},"spanId",[630,1023,681],{"class":667},[630,1025,799],{"class":763},[630,1027,1029],{"class":632,"line":1028},13,[630,1030,1031],{"class":667},"  }\n",[630,1033,1035,1037,1039,1042,1045,1047,1049,1051,1054,1057,1059,1062,1064,1067,1070,1072,1074,1077,1079],{"class":632,"line":1034},14,[630,1036,960],{"class":663},[630,1038,963],{"class":763},[630,1040,1041],{"class":671},"outcome",[630,1043,1044],{"class":667}," ===",[630,1046,687],{"class":667},[630,1048,887],{"class":640},[630,1050,782],{"class":667},[630,1052,1053],{"class":763},") ",[630,1055,1056],{"class":671},"log",[630,1058,939],{"class":667},[630,1060,1061],{"class":753},"error",[630,1063,757],{"class":763},[630,1065,1066],{"class":667},"new",[630,1068,1069],{"class":753}," Error",[630,1071,757],{"class":763},[630,1073,782],{"class":667},[630,1075,1076],{"class":640},"Payment declined",[630,1078,782],{"class":667},[630,1080,1081],{"class":763},"))\n",[630,1083,1085,1087,1090,1092,1094,1096,1099],{"class":632,"line":1084},15,[630,1086,901],{"class":805},[630,1088,1089],{"class":671}," event",[630,1091,907],{"class":667},[630,1093,904],{"class":671},[630,1095,939],{"class":667},[630,1097,1098],{"class":753},"emit",[630,1100,954],{"class":763},[630,1102,1104,1106,1108,1111,1113,1116,1119,1121,1123,1125,1127],{"class":632,"line":1103},16,[630,1105,960],{"class":663},[630,1107,963],{"class":763},[630,1109,1110],{"class":671},"event",[630,1112,1053],{"class":763},[630,1114,1115],{"class":663},"await",[630,1117,1118],{"class":753}," drain",[630,1120,757],{"class":763},[630,1122,760],{"class":667},[630,1124,1089],{"class":671},[630,1126,681],{"class":667},[630,1128,799],{"class":763},[630,1130,1132],{"class":632,"line":1131},17,[630,1133,1134],{"class":667},"}\n",[574,1136,1137],{},"Configure the OTLP HTTP base endpoint in the application's environment:",[583,1139,1142],{"className":623,"code":1140,"filename":1141,"language":626,"meta":590,"style":590},"OTLP_ENDPOINT=http:\u002F\u002Flocalhost:4318\n",".env",[592,1143,1144],{"__ignoreMap":590},[630,1145,1146,1149,1151],{"class":632,"line":633},[630,1147,1148],{"class":671},"OTLP_ENDPOINT",[630,1150,812],{"class":667},[630,1152,1153],{"class":640},"http:\u002F\u002Flocalhost:4318\n",[574,1155,1156,1157,1160,1161,1163],{},"Load that file through your application or Node's ",[592,1158,1159],{},"--env-file"," option. A file named ",[592,1162,1141],{}," alone does not configure an arbitrary Node.js process.",[574,1165,1166],{},"For a local Collector, enable a logs pipeline. This minimal configuration prints received records through the debug exporter:",[583,1168,1173],{"className":1169,"code":1170,"filename":1171,"language":1172,"meta":590,"style":590},"language-yaml shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","receivers:\n  otlp:\n    protocols:\n      http:\n        endpoint: 127.0.0.1:4318\nexporters:\n  debug:\n    verbosity: detailed\nservice:\n  pipelines:\n    logs:\n      receivers: [otlp]\n      exporters: [debug]\n","otel-collector.yaml","yaml",[592,1174,1175,1183,1190,1197,1204,1214,1221,1228,1238,1245,1252,1259,1275],{"__ignoreMap":590},[630,1176,1177,1180],{"class":632,"line":633},[630,1178,1179],{"class":763},"receivers",[630,1181,1182],{"class":667},":\n",[630,1184,1185,1188],{"class":632,"line":696},[630,1186,1187],{"class":763},"  otlp",[630,1189,1182],{"class":667},[630,1191,1192,1195],{"class":632,"line":722},[630,1193,1194],{"class":763},"    protocols",[630,1196,1182],{"class":667},[630,1198,1199,1202],{"class":632,"line":743},[630,1200,1201],{"class":763},"      http",[630,1203,1182],{"class":667},[630,1205,1206,1209,1211],{"class":632,"line":750},[630,1207,1208],{"class":763},"        endpoint",[630,1210,767],{"class":667},[630,1212,1213],{"class":640}," 127.0.0.1:4318\n",[630,1215,1216,1219],{"class":632,"line":802},[630,1217,1218],{"class":763},"exporters",[630,1220,1182],{"class":667},[630,1222,1223,1226],{"class":632,"line":837},[630,1224,1225],{"class":763},"  debug",[630,1227,1182],{"class":667},[630,1229,1230,1233,1235],{"class":632,"line":842},[630,1231,1232],{"class":763},"    verbosity",[630,1234,767],{"class":667},[630,1236,1237],{"class":640}," detailed\n",[630,1239,1240,1243],{"class":632,"line":898},[630,1241,1242],{"class":763},"service",[630,1244,1182],{"class":667},[630,1246,1247,1250],{"class":632,"line":927},[630,1248,1249],{"class":763},"  pipelines",[630,1251,1182],{"class":667},[630,1253,1254,1257],{"class":632,"line":957},[630,1255,1256],{"class":763},"    logs",[630,1258,1182],{"class":667},[630,1260,1261,1264,1266,1269,1272],{"class":632,"line":983},[630,1262,1263],{"class":763},"      receivers",[630,1265,767],{"class":667},[630,1267,1268],{"class":667}," [",[630,1270,1271],{"class":640},"otlp",[630,1273,1274],{"class":667},"]\n",[630,1276,1277,1280,1282,1284,1287],{"class":632,"line":1028},[630,1278,1279],{"class":763},"      exporters",[630,1281,767],{"class":667},[630,1283,1268],{"class":667},[630,1285,1286],{"class":640},"debug",[630,1288,1274],{"class":667},[574,1290,1291,1292,1295],{},"Run the Collector with this configuration and call ",[592,1293,1294],{},"recordCheckout('order-123', 'paid')"," inside an instrumented operation. A Collector in a separate container needs a reachable receiver address and port mapping. Use the loopback configuration above for processes on the same host.",[578,1297,1299],{"id":1298},"verify-correlation-before-shipping","Verify correlation before shipping",[574,1301,1302,1303,1305,1306,1309,1310,1312,1313,1315],{},"Find the record by ",[592,1304,860],{},". Its resource should contain ",[592,1307,1308],{},"service.name: checkout",", and its ",[592,1311,1007],{}," and ",[592,1314,1021],{}," should match the active span from the same operation. Without a valid active span the event still exports, but those identifiers are absent.",[574,1317,1318,1319,1322,1323,1326],{},"The drain maps level and timestamp to OTLP severity and time fields. With ",[592,1320,1321],{},"recordShape: 'compact'",", nested application fields become dotted attributes. The default JSON shape uses a serialized event body and serializes nested attribute values. The ",[598,1324,1325],{"href":197},"OTLP adapter reference"," describes the mapping and delivery options.",[574,1328,1329,1330,1333],{},"The TraceContext enricher can read an incoming ",[592,1331,1332],{},"traceparent",", but its parent span identifier is not necessarily the active server span. Use the active SDK context as above when you need that exact association.",[578,1335,1337],{"id":1336},"decide-what-to-sample-and-how-to-deliver","Decide what to sample and how to deliver",[574,1339,1340,1341,1346],{},"Event sampling in evlog and ",[598,1342,1345],{"href":1343,"rel":1344},"https:\u002F\u002Fopentelemetry.io\u002Fdocs\u002Fconcepts\u002Fsampling\u002F",[602],"trace sampling in OpenTelemetry"," operate on different signals. A retained log can reference a trace that your tracing policy discarded. Coordinate the policies before relying on navigation from every error log to a stored trace.",[574,1348,1349,1350,1352],{},"This example waits for the network request. For production handler integration, configure the drain pipeline and the framework's background-delivery lifecycle deliberately. The adapter supports OTLP HTTP logs, not a gRPC-only endpoint. Serialization, batching, retries, and export add costs that event-construction microbenchmarks do not measure. See ",[598,1351,378],{"href":517}," for those boundaries.",[574,1354,1355,1356,1359,1360,1363,1364,939],{},"If you use Nitro, the integration can invoke ",[592,1357,1358],{},"createOTLPDrain()"," through ",[592,1361,1362],{},"evlog:drain"," after evlog is enabled. Keep your existing OTel instrumentation in either setup. For a library-to-library decision, continue with ",[598,1365,1366],{"href":530},"evlog vs other loggers",[1368,1369,1370],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}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 .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 .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}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}",{"title":590,"searchDepth":696,"depth":696,"links":1372},[1373,1374,1375,1376],{"id":580,"depth":696,"text":581},{"id":607,"depth":696,"text":608},{"id":1298,"depth":696,"text":1299},{"id":1336,"depth":696,"text":1337},"Send evlog events to an OpenTelemetry Collector over OTLP HTTP and attach the active trace context without replacing tracing.","md",[1380,1384],{"label":1381,"icon":199,"to":197,"color":1382,"variant":1383},"OTLP Adapter","neutral","subtle",{"label":1385,"icon":107,"to":517,"color":1382,"variant":1383},"Performance Benchmarks",{},{"title":552,"icon":199},{"title":569,"description":1377},"A6ZnZXCl--ZucWJrP-TwJZg3f9v7KCoFNe-OD2-AZv4",[1391,1393],{"title":548,"path":549,"stem":550,"description":1392,"icon":532,"children":-1},"Compare request context, serializers, transports, and migration costs before moving a Pino application to evlog.",{"title":556,"path":557,"stem":558,"description":1394,"icon":532,"children":-1},"Compare LogTape categories, application-owned configuration, context propagation, and testing with evlog request events.",1788901587038]