[{"data":1,"prerenderedAt":1452},["ShallowReactive",2],{"navigation_docs":3,"-compare-opentelemetry":602,"-compare-opentelemetry-surround":1447},[4,35,85,138,318,479,538,577],{"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,453],{"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,"icon":455,"path":456,"stem":457,"children":458,"page":34},"Signals","i-lucide-scan-search","\u002Fuse-cases\u002Fsignals","5.use-cases\u002F7.signals",[459,462,467,472,475],{"title":41,"path":460,"stem":461,"icon":44},"\u002Fuse-cases\u002Fsignals\u002Foverview","5.use-cases\u002F7.signals\u002F01.overview",{"title":463,"path":464,"stem":465,"icon":466},"What You Can Ask","\u002Fuse-cases\u002Fsignals\u002Fask","5.use-cases\u002F7.signals\u002F02.ask","i-lucide-message-circle-question",{"title":468,"path":469,"stem":470,"icon":471},"What It Costs","\u002Fuse-cases\u002Fsignals\u002Fcost","5.use-cases\u002F7.signals\u002F03.cost","i-lucide-coins",{"title":436,"path":473,"stem":474,"icon":84},"\u002Fuse-cases\u002Fsignals\u002Freference","5.use-cases\u002F7.signals\u002F04.reference",{"title":415,"path":476,"stem":477,"icon":478},"\u002Fuse-cases\u002Fsignals\u002Frecipes","5.use-cases\u002F7.signals\u002F05.recipes","i-lucide-lightbulb",{"title":480,"path":481,"stem":482,"children":483,"page":34},"Extend","\u002Fextend","6.extend",[484,488,493,498,502,507,511,515,519,523,528,533],{"title":41,"path":485,"stem":486,"icon":487},"\u002Fextend\u002Foverview","6.extend\u002F0.overview","i-lucide-blocks",{"title":489,"path":490,"stem":491,"icon":492},"Stream","\u002Fextend\u002Fstream","6.extend\u002F1.stream","i-lucide-radio-tower",{"title":494,"path":495,"stem":496,"icon":497},"Custom framework","\u002Fextend\u002Fcustom-framework","6.extend\u002F10.custom-framework","i-lucide-puzzle",{"title":499,"path":500,"stem":501,"icon":492},"Diagnostics channel","\u002Fextend\u002Fdiagnostics-channel","6.extend\u002F11.diagnostics-channel",{"title":503,"path":504,"stem":505,"icon":506},"FS reader","\u002Fextend\u002Ffs-reader","6.extend\u002F2.fs-reader","i-lucide-folder-search",{"title":415,"path":508,"stem":509,"icon":510},"\u002Fextend\u002Fconsumer-recipes","6.extend\u002F3.consumer-recipes","i-lucide-chef-hat",{"title":512,"path":513,"stem":514,"icon":487},"Plugins","\u002Fextend\u002Fplugins","6.extend\u002F4.plugins",{"title":516,"path":517,"stem":518,"icon":443},"Custom enrichers","\u002Fextend\u002Fcustom-enrichers","6.extend\u002F5.custom-enrichers",{"title":520,"path":521,"stem":522,"icon":69},"Tail sampling","\u002Fextend\u002Ftail-sampling","6.extend\u002F6.tail-sampling",{"title":524,"path":525,"stem":526,"icon":527},"Identity headers","\u002Fextend\u002Fidentity-headers","6.extend\u002F7.identity-headers","i-lucide-fingerprint",{"title":529,"path":530,"stem":531,"icon":532},"Custom drains","\u002Fextend\u002Fcustom-drains","6.extend\u002F8.custom-drains","i-lucide-share-2",{"title":534,"path":535,"stem":536,"icon":537},"Drain pipeline","\u002Fextend\u002Fdrain-pipeline","6.extend\u002F9.drain-pipeline","i-lucide-workflow",{"title":436,"path":539,"stem":540,"children":541,"page":34},"\u002Freference","7.reference",[542,546,551,554,559,563,568,572],{"title":41,"path":543,"stem":544,"icon":545},"\u002Freference\u002Foverview","7.reference\u002F0.overview","i-lucide-book-marked",{"title":547,"path":548,"stem":549,"icon":550},"Configuration","\u002Freference\u002Fconfiguration","7.reference\u002F1.configuration","i-lucide-settings",{"title":383,"path":552,"stem":553,"icon":112},"\u002Freference\u002Fperformance","7.reference\u002F2.performance",{"title":555,"path":556,"stem":557,"icon":558},"Vite Plugin","\u002Freference\u002Fvite-plugin","7.reference\u002F3.vite-plugin","i-custom-vite",{"title":560,"path":561,"stem":562,"icon":388},"Best Practices","\u002Freference\u002Fbest-practices","7.reference\u002F4.best-practices",{"title":564,"path":565,"stem":566,"icon":567},"vs Other Loggers","\u002Freference\u002Fvs-other-loggers","7.reference\u002F5.vs-other-loggers","i-lucide-scale",{"title":569,"path":570,"stem":571,"icon":443},"Agent Skills","\u002Freference\u002Fagent-skills","7.reference\u002F6.agent-skills",{"title":573,"path":574,"stem":575,"icon":576},"Cost","\u002Freference\u002Fcost","7.reference\u002F7.cost","i-lucide-receipt",{"title":578,"path":579,"stem":580,"children":581,"page":34},"Compare","\u002Fcompare","8.compare",[582,586,590,594,598],{"title":583,"path":584,"stem":585,"icon":567},"evlog vs Pino","\u002Fcompare\u002Fpino","8.compare\u002F1.pino",{"title":587,"path":588,"stem":589,"icon":204},"evlog vs OpenTelemetry","\u002Fcompare\u002Fopentelemetry","8.compare\u002F2.opentelemetry",{"title":591,"path":592,"stem":593,"icon":567},"evlog vs LogTape","\u002Fcompare\u002Flogtape","8.compare\u002F3.logtape",{"title":595,"path":596,"stem":597,"icon":567},"evlog vs Winston: formats and request events","\u002Fcompare\u002Fwinston","8.compare\u002F4.winston",{"title":599,"path":600,"stem":601,"icon":567},"evlog vs Consola: reporters and request context","\u002Fcompare\u002Fconsola","8.compare\u002F5.consola",{"id":603,"title":604,"body":605,"description":1434,"extension":1435,"links":1436,"meta":1443,"navigation":1444,"path":588,"seo":1445,"stem":589,"__hash__":1446},"docs\u002F8.compare\u002F2.opentelemetry.md","evlog and OpenTelemetry: connect logs to traces",{"type":606,"value":607,"toc":1428},"minimark",[608,612,617,629,640,644,653,656,683,690,1174,1177,1193,1203,1206,1328,1335,1339,1355,1377,1391,1395,1404,1410,1424],[609,610,611],"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.",[613,614,616],"h2",{"id":615},"assign-each-layer-a-job","Assign each layer a job",[618,619,626],"pre",{"className":620,"code":622,"filename":623,"language":624,"meta":625},[621],"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","",[627,628,622],"code",{"__ignoreMap":625},[609,630,631,632,639],{},"The SDK instruments operations, the Collector receives and processes telemetry, and the backend provides storage, queries, and alerts. ",[633,634,638],"a",{"href":635,"rel":636},"https:\u002F\u002Fopentelemetry.io\u002Fdocs\u002F",[637],"nofollow","OpenTelemetry's documentation"," describes those responsibilities. Semantic conventions standardize shared attributes, while custom application attributes remain valid.",[613,641,643],{"id":642},"export-an-event-with-the-active-span-context","Export an event with the active span context",[609,645,646,647,652],{},"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 ",[633,648,651],{"href":649,"rel":650},"https:\u002F\u002Fopentelemetry.io\u002Fdocs\u002Flanguages\u002Fjs\u002Finstrumentation\u002F",[637],"JavaScript instrumentation guide"," if tracing is not configured yet.",[609,654,655],{},"Install the logging package and OTel API in that application:",[618,657,662],{"className":658,"code":659,"filename":660,"language":661,"meta":625,"style":625},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","npm install evlog @opentelemetry\u002Fapi\n","Terminal","bash",[627,663,664],{"__ignoreMap":625},[665,666,669,673,677,680],"span",{"class":667,"line":668},"line",1,[665,670,672],{"class":671},"sBMFI","npm",[665,674,676],{"class":675},"sfazB"," install",[665,678,679],{"class":675}," evlog",[665,681,682],{"class":675}," @opentelemetry\u002Fapi\n",[609,684,685,686,689],{},"The function writes a completed checkout event as local JSON and exports it through OTLP. It awaits delivery explicitly: a failed export is logged with the drain name and does not throw, so the request path never breaks. Use ",[627,687,688],{},"drain.raw({ event })"," when the caller must observe failures. Do not also register this drain globally, which would export the event twice.",[618,691,696],{"className":692,"code":693,"filename":694,"language":695,"meta":625,"style":625},"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",[627,697,698,733,759,780,787,839,874,879,935,964,994,1020,1065,1071,1121,1140,1168],{"__ignoreMap":625},[665,699,700,704,708,712,715,718,721,724,727,730],{"class":667,"line":668},[665,701,703],{"class":702},"s7zQu","import",[665,705,707],{"class":706},"sMK4o"," {",[665,709,711],{"class":710},"sTEyZ"," isSpanContextValid",[665,713,714],{"class":706},",",[665,716,717],{"class":710}," trace",[665,719,720],{"class":706}," }",[665,722,723],{"class":702}," from",[665,725,726],{"class":706}," '",[665,728,729],{"class":675},"@opentelemetry\u002Fapi",[665,731,732],{"class":706},"'\n",[665,734,736,738,740,743,745,748,750,752,754,757],{"class":667,"line":735},2,[665,737,703],{"class":702},[665,739,707],{"class":706},[665,741,742],{"class":710}," createLogger",[665,744,714],{"class":706},[665,746,747],{"class":710}," initLogger",[665,749,720],{"class":706},[665,751,723],{"class":702},[665,753,726],{"class":706},[665,755,756],{"class":675},"evlog",[665,758,732],{"class":706},[665,760,762,764,766,769,771,773,775,778],{"class":667,"line":761},3,[665,763,703],{"class":702},[665,765,707],{"class":706},[665,767,768],{"class":710}," createOTLPDrain",[665,770,720],{"class":706},[665,772,723],{"class":702},[665,774,726],{"class":706},[665,776,777],{"class":675},"evlog\u002Fotlp",[665,779,732],{"class":706},[665,781,783],{"class":667,"line":782},4,[665,784,786],{"emptyLinePlaceholder":785},true,"\n",[665,788,790,794,797,800,804,807,809,812,814,816,819,822,825,828,830,834,836],{"class":667,"line":789},5,[665,791,793],{"class":792},"s2Zo4","initLogger",[665,795,796],{"class":710},"(",[665,798,799],{"class":706},"{",[665,801,803],{"class":802},"swJcz"," env",[665,805,806],{"class":706},":",[665,808,707],{"class":706},[665,810,811],{"class":802}," service",[665,813,806],{"class":706},[665,815,726],{"class":706},[665,817,818],{"class":675},"checkout",[665,820,821],{"class":706},"'",[665,823,824],{"class":706}," },",[665,826,827],{"class":802}," pretty",[665,829,806],{"class":706},[665,831,833],{"class":832},"sfNiH"," false",[665,835,720],{"class":706},[665,837,838],{"class":710},")\n",[665,840,842,846,849,852,854,856,858,861,863,865,868,870,872],{"class":667,"line":841},6,[665,843,845],{"class":844},"spNyl","const",[665,847,848],{"class":710}," drain ",[665,850,851],{"class":706},"=",[665,853,768],{"class":792},[665,855,796],{"class":710},[665,857,799],{"class":706},[665,859,860],{"class":802}," recordShape",[665,862,806],{"class":706},[665,864,726],{"class":706},[665,866,867],{"class":675},"compact",[665,869,821],{"class":706},[665,871,720],{"class":706},[665,873,838],{"class":710},[665,875,877],{"class":667,"line":876},7,[665,878,786],{"emptyLinePlaceholder":785},[665,880,882,885,888,891,894,896,900,902,905,907,910,912,914,917,919,922,924,927,929,932],{"class":667,"line":881},8,[665,883,884],{"class":702},"export",[665,886,887],{"class":844}," async",[665,889,890],{"class":844}," function",[665,892,893],{"class":792}," recordCheckout",[665,895,796],{"class":706},[665,897,899],{"class":898},"sHdIc","orderId",[665,901,806],{"class":706},[665,903,904],{"class":671}," string",[665,906,714],{"class":706},[665,908,909],{"class":898}," outcome",[665,911,806],{"class":706},[665,913,726],{"class":706},[665,915,916],{"class":675},"paid",[665,918,821],{"class":706},[665,920,921],{"class":706}," |",[665,923,726],{"class":706},[665,925,926],{"class":675},"declined",[665,928,821],{"class":706},[665,930,931],{"class":706},")",[665,933,934],{"class":706}," {\n",[665,936,938,941,944,947,949,951,953,956,958,960,962],{"class":667,"line":937},9,[665,939,940],{"class":844},"  const",[665,942,943],{"class":710}," log",[665,945,946],{"class":706}," =",[665,948,742],{"class":792},[665,950,796],{"class":802},[665,952,799],{"class":706},[665,954,955],{"class":710}," orderId",[665,957,714],{"class":706},[665,959,909],{"class":710},[665,961,720],{"class":706},[665,963,838],{"class":802},[665,965,967,969,972,974,976,979,982,985,988,991],{"class":667,"line":966},10,[665,968,940],{"class":844},[665,970,971],{"class":710}," spanContext",[665,973,946],{"class":706},[665,975,717],{"class":710},[665,977,978],{"class":706},".",[665,980,981],{"class":792},"getActiveSpan",[665,983,984],{"class":802},"()",[665,986,987],{"class":706},"?.",[665,989,990],{"class":792},"spanContext",[665,992,993],{"class":802},"()\n",[665,995,997,1000,1003,1005,1008,1010,1012,1014,1017],{"class":667,"line":996},11,[665,998,999],{"class":702},"  if",[665,1001,1002],{"class":802}," (",[665,1004,990],{"class":710},[665,1006,1007],{"class":706}," &&",[665,1009,711],{"class":792},[665,1011,796],{"class":802},[665,1013,990],{"class":710},[665,1015,1016],{"class":802},")) ",[665,1018,1019],{"class":706},"{\n",[665,1021,1023,1026,1028,1031,1033,1035,1038,1040,1042,1044,1047,1049,1052,1054,1056,1058,1061,1063],{"class":667,"line":1022},12,[665,1024,1025],{"class":710},"    log",[665,1027,978],{"class":706},[665,1029,1030],{"class":792},"set",[665,1032,796],{"class":802},[665,1034,799],{"class":706},[665,1036,1037],{"class":802}," traceId",[665,1039,806],{"class":706},[665,1041,971],{"class":710},[665,1043,978],{"class":706},[665,1045,1046],{"class":710},"traceId",[665,1048,714],{"class":706},[665,1050,1051],{"class":802}," spanId",[665,1053,806],{"class":706},[665,1055,971],{"class":710},[665,1057,978],{"class":706},[665,1059,1060],{"class":710},"spanId",[665,1062,720],{"class":706},[665,1064,838],{"class":802},[665,1066,1068],{"class":667,"line":1067},13,[665,1069,1070],{"class":706},"  }\n",[665,1072,1074,1076,1078,1081,1084,1086,1088,1090,1093,1096,1098,1101,1103,1106,1109,1111,1113,1116,1118],{"class":667,"line":1073},14,[665,1075,999],{"class":702},[665,1077,1002],{"class":802},[665,1079,1080],{"class":710},"outcome",[665,1082,1083],{"class":706}," ===",[665,1085,726],{"class":706},[665,1087,926],{"class":675},[665,1089,821],{"class":706},[665,1091,1092],{"class":802},") ",[665,1094,1095],{"class":710},"log",[665,1097,978],{"class":706},[665,1099,1100],{"class":792},"error",[665,1102,796],{"class":802},[665,1104,1105],{"class":706},"new",[665,1107,1108],{"class":792}," Error",[665,1110,796],{"class":802},[665,1112,821],{"class":706},[665,1114,1115],{"class":675},"Payment declined",[665,1117,821],{"class":706},[665,1119,1120],{"class":802},"))\n",[665,1122,1124,1126,1129,1131,1133,1135,1138],{"class":667,"line":1123},15,[665,1125,940],{"class":844},[665,1127,1128],{"class":710}," event",[665,1130,946],{"class":706},[665,1132,943],{"class":710},[665,1134,978],{"class":706},[665,1136,1137],{"class":792},"emit",[665,1139,993],{"class":802},[665,1141,1143,1145,1147,1150,1152,1155,1158,1160,1162,1164,1166],{"class":667,"line":1142},16,[665,1144,999],{"class":702},[665,1146,1002],{"class":802},[665,1148,1149],{"class":710},"event",[665,1151,1092],{"class":802},[665,1153,1154],{"class":702},"await",[665,1156,1157],{"class":792}," drain",[665,1159,796],{"class":802},[665,1161,799],{"class":706},[665,1163,1128],{"class":710},[665,1165,720],{"class":706},[665,1167,838],{"class":802},[665,1169,1171],{"class":667,"line":1170},17,[665,1172,1173],{"class":706},"}\n",[609,1175,1176],{},"Configure the OTLP HTTP base endpoint in the application's environment. If it is unset, the drain logs a missing-endpoint warning and skips delivery:",[618,1178,1181],{"className":658,"code":1179,"filename":1180,"language":661,"meta":625,"style":625},"OTLP_ENDPOINT=http:\u002F\u002Flocalhost:4318\n",".env",[627,1182,1183],{"__ignoreMap":625},[665,1184,1185,1188,1190],{"class":667,"line":668},[665,1186,1187],{"class":710},"OTLP_ENDPOINT",[665,1189,851],{"class":706},[665,1191,1192],{"class":675},"http:\u002F\u002Flocalhost:4318\n",[609,1194,1195,1196,1199,1200,1202],{},"Load that file through your application or Node's ",[627,1197,1198],{},"--env-file"," option. A file named ",[627,1201,1180],{}," alone does not configure an arbitrary Node.js process.",[609,1204,1205],{},"For a local Collector, enable a logs pipeline. This minimal configuration prints received records through the debug exporter:",[618,1207,1212],{"className":1208,"code":1209,"filename":1210,"language":1211,"meta":625,"style":625},"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",[627,1213,1214,1222,1229,1236,1243,1253,1260,1267,1277,1284,1291,1298,1314],{"__ignoreMap":625},[665,1215,1216,1219],{"class":667,"line":668},[665,1217,1218],{"class":802},"receivers",[665,1220,1221],{"class":706},":\n",[665,1223,1224,1227],{"class":667,"line":735},[665,1225,1226],{"class":802},"  otlp",[665,1228,1221],{"class":706},[665,1230,1231,1234],{"class":667,"line":761},[665,1232,1233],{"class":802},"    protocols",[665,1235,1221],{"class":706},[665,1237,1238,1241],{"class":667,"line":782},[665,1239,1240],{"class":802},"      http",[665,1242,1221],{"class":706},[665,1244,1245,1248,1250],{"class":667,"line":789},[665,1246,1247],{"class":802},"        endpoint",[665,1249,806],{"class":706},[665,1251,1252],{"class":675}," 127.0.0.1:4318\n",[665,1254,1255,1258],{"class":667,"line":841},[665,1256,1257],{"class":802},"exporters",[665,1259,1221],{"class":706},[665,1261,1262,1265],{"class":667,"line":876},[665,1263,1264],{"class":802},"  debug",[665,1266,1221],{"class":706},[665,1268,1269,1272,1274],{"class":667,"line":881},[665,1270,1271],{"class":802},"    verbosity",[665,1273,806],{"class":706},[665,1275,1276],{"class":675}," detailed\n",[665,1278,1279,1282],{"class":667,"line":937},[665,1280,1281],{"class":802},"service",[665,1283,1221],{"class":706},[665,1285,1286,1289],{"class":667,"line":966},[665,1287,1288],{"class":802},"  pipelines",[665,1290,1221],{"class":706},[665,1292,1293,1296],{"class":667,"line":996},[665,1294,1295],{"class":802},"    logs",[665,1297,1221],{"class":706},[665,1299,1300,1303,1305,1308,1311],{"class":667,"line":1022},[665,1301,1302],{"class":802},"      receivers",[665,1304,806],{"class":706},[665,1306,1307],{"class":706}," [",[665,1309,1310],{"class":675},"otlp",[665,1312,1313],{"class":706},"]\n",[665,1315,1316,1319,1321,1323,1326],{"class":667,"line":1067},[665,1317,1318],{"class":802},"      exporters",[665,1320,806],{"class":706},[665,1322,1307],{"class":706},[665,1324,1325],{"class":675},"debug",[665,1327,1313],{"class":706},[609,1329,1330,1331,1334],{},"Run the Collector with this configuration and call ",[627,1332,1333],{},"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.",[613,1336,1338],{"id":1337},"verify-correlation-before-shipping","Verify correlation before shipping",[609,1340,1341,1342,1344,1345,1348,1349,1351,1352,1354],{},"Find the record by ",[627,1343,899],{},". Its resource should contain ",[627,1346,1347],{},"service.name: checkout",", and its ",[627,1350,1046],{}," and ",[627,1353,1060],{}," should match the active span from the same operation. Without a valid active span the event still exports, but those identifiers are absent.",[609,1356,1357,1358,1361,1362,1365,1366,1351,1369,1372,1373,1376],{},"The drain maps level and timestamp to OTLP severity and time fields. With ",[627,1359,1360],{},"recordShape: 'compact'",", nested application fields become dotted attributes. The default JSON shape uses a serialized event body and sends nested attribute values as OTLP key-value lists. Set ",[627,1363,1364],{},"semanticConventions: true"," to add OpenTelemetry attribute names such as ",[627,1367,1368],{},"http.request.method",[627,1370,1371],{},"gen_ai.usage.input_tokens"," next to the evlog ones. The ",[633,1374,1375],{"href":202},"OTLP adapter reference"," describes the mapping and delivery options.",[609,1378,1379,1380,1383,1384,1387,1388,1390],{},"The TraceContext enricher reads an incoming ",[627,1381,1382],{},"traceparent"," and records its span identifier as ",[627,1385,1386],{},"parentSpanId",", because that span belongs to the caller. It never sets ",[627,1389,1060],{},". Use the active SDK context as above to link the event to the server span.",[613,1392,1394],{"id":1393},"decide-what-to-sample-and-how-to-deliver","Decide what to sample and how to deliver",[609,1396,1397,1398,1403],{},"Event sampling in evlog and ",[633,1399,1402],{"href":1400,"rel":1401},"https:\u002F\u002Fopentelemetry.io\u002Fdocs\u002Fconcepts\u002Fsampling\u002F",[637],"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.",[609,1405,1406,1407,1409],{},"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 ",[633,1408,383],{"href":552}," for those boundaries.",[609,1411,1412,1413,1416,1417,1420,1421,978],{},"If you use Nitro, the integration can invoke ",[627,1414,1415],{},"createOTLPDrain()"," through ",[627,1418,1419],{},"evlog:drain"," after evlog is enabled. Keep your existing OTel instrumentation in either setup. For a library-to-library decision, continue with ",[633,1422,1423],{"href":565},"evlog vs other loggers",[1425,1426,1427],"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":625,"searchDepth":735,"depth":735,"links":1429},[1430,1431,1432,1433],{"id":615,"depth":735,"text":616},{"id":642,"depth":735,"text":643},{"id":1337,"depth":735,"text":1338},{"id":1393,"depth":735,"text":1394},"Send evlog events to an OpenTelemetry Collector over OTLP HTTP and attach the active trace context without replacing tracing.","md",[1437,1441],{"label":1438,"icon":204,"to":202,"color":1439,"variant":1440},"OTLP Adapter","neutral","subtle",{"label":1442,"icon":112,"to":552,"color":1439,"variant":1440},"Performance Benchmarks",{},{"title":587,"icon":204},{"title":604,"description":1434},"X62ApeMFhfvXJr5hjjq9R2aC1Uwmyj9GTdDyOKe8K10",[1448,1450],{"title":583,"path":584,"stem":585,"description":1449,"icon":567,"children":-1},"Compare request context, serializers, transports, and migration costs before moving a Pino application to evlog.",{"title":591,"path":592,"stem":593,"description":1451,"icon":567,"children":-1},"Compare LogTape categories, application-owned configuration, context propagation, and testing with evlog request events.",1791110192020]