[{"data":1,"prerenderedAt":2334},["ShallowReactive",2],{"navigation_docs":3,"-reference-performance":443,"-reference-performance-surround":2329},[4,30,80,249,357,412],{"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},"Integrate","\u002Fintegrate","3.integrate",[85,89,157],{"title":36,"path":86,"stem":87,"icon":88},"\u002Fintegrate\u002Foverview","3.integrate\u002F0.overview","i-lucide-plug",{"title":90,"path":91,"stem":92,"children":93,"page":29},"Adapters","\u002Fintegrate\u002Fadapters","3.integrate\u002Fadapters",[94,97,137],{"title":36,"path":95,"stem":96,"icon":39},"\u002Fintegrate\u002Fadapters\u002Foverview","3.integrate\u002Fadapters\u002F01.overview",{"title":98,"path":99,"stem":100,"children":101,"page":29},"Cloud","\u002Fintegrate\u002Fadapters\u002Fcloud","3.integrate\u002Fadapters\u002Fcloud",[102,107,112,117,122,127,132],{"title":103,"path":104,"stem":105,"icon":106},"Axiom","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Faxiom","3.integrate\u002Fadapters\u002Fcloud\u002F01.axiom","i-custom-axiom",{"title":108,"path":109,"stem":110,"icon":111},"OTLP","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fotlp","3.integrate\u002Fadapters\u002Fcloud\u002F02.otlp","i-simple-icons-opentelemetry",{"title":113,"path":114,"stem":115,"icon":116},"PostHog","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fposthog","3.integrate\u002Fadapters\u002Fcloud\u002F03.posthog","i-simple-icons-posthog",{"title":118,"path":119,"stem":120,"icon":121},"Sentry","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fsentry","3.integrate\u002Fadapters\u002Fcloud\u002F04.sentry","i-simple-icons-sentry",{"title":123,"path":124,"stem":125,"icon":126},"Better Stack","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fbetter-stack","3.integrate\u002Fadapters\u002Fcloud\u002F05.better-stack","i-simple-icons-betterstack",{"title":128,"path":129,"stem":130,"icon":131},"Datadog","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fdatadog","3.integrate\u002Fadapters\u002Fcloud\u002F06.datadog","i-simple-icons-datadog",{"title":133,"path":134,"stem":135,"icon":136},"HyperDX","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fhyperdx","3.integrate\u002Fadapters\u002Fcloud\u002F07.hyperdx","i-custom-hyperdx",{"title":138,"path":139,"stem":140,"children":141,"page":29},"Self-Hosted","\u002Fintegrate\u002Fadapters\u002Fself-hosted","3.integrate\u002Fadapters\u002Fself-hosted",[142,147,152],{"title":143,"path":144,"stem":145,"icon":146},"File System","\u002Fintegrate\u002Fadapters\u002Fself-hosted\u002Ffs","3.integrate\u002Fadapters\u002Fself-hosted\u002F01.fs","i-lucide-hard-drive",{"title":148,"path":149,"stem":150,"icon":151},"NuxtHub","\u002Fintegrate\u002Fadapters\u002Fself-hosted\u002Fnuxthub","3.integrate\u002Fadapters\u002Fself-hosted\u002F02.nuxthub","i-simple-icons-nuxt",{"title":153,"path":154,"stem":155,"icon":156},"Memory","\u002Fintegrate\u002Fadapters\u002Fself-hosted\u002Fmemory","3.integrate\u002Fadapters\u002Fself-hosted\u002F03.memory","i-lucide-cpu",{"title":158,"path":159,"stem":160,"children":161,"page":29},"Frameworks","\u002Fintegrate\u002Fframeworks","3.integrate\u002Fframeworks",[162,166,171,176,181,186,191,196,201,206,211,216,221,226,230,235,240,245],{"title":36,"path":163,"stem":164,"icon":165},"\u002Fintegrate\u002Fframeworks\u002Foverview","3.integrate\u002Fframeworks\u002F00.overview","i-lucide-layout-grid",{"title":167,"path":168,"stem":169,"icon":170},"Nuxt","\u002Fintegrate\u002Fframeworks\u002Fnuxt","3.integrate\u002Fframeworks\u002F01.nuxt","i-simple-icons-nuxtdotjs",{"title":172,"path":173,"stem":174,"icon":175},"Next.js","\u002Fintegrate\u002Fframeworks\u002Fnextjs","3.integrate\u002Fframeworks\u002F02.nextjs","i-simple-icons-nextdotjs",{"title":177,"path":178,"stem":179,"icon":180},"SvelteKit","\u002Fintegrate\u002Fframeworks\u002Fsveltekit","3.integrate\u002Fframeworks\u002F03.sveltekit","i-simple-icons-svelte",{"title":182,"path":183,"stem":184,"icon":185},"Nitro","\u002Fintegrate\u002Fframeworks\u002Fnitro","3.integrate\u002Fframeworks\u002F04.nitro","i-custom-nitro",{"title":187,"path":188,"stem":189,"icon":190},"TanStack Start","\u002Fintegrate\u002Fframeworks\u002Ftanstack-start","3.integrate\u002Fframeworks\u002F05.tanstack-start","i-custom-tanstack",{"title":192,"path":193,"stem":194,"icon":195},"NestJS","\u002Fintegrate\u002Fframeworks\u002Fnestjs","3.integrate\u002Fframeworks\u002F06.nestjs","i-simple-icons-nestjs",{"title":197,"path":198,"stem":199,"icon":200},"Express","\u002Fintegrate\u002Fframeworks\u002Fexpress","3.integrate\u002Fframeworks\u002F07.express","i-simple-icons-express",{"title":202,"path":203,"stem":204,"icon":205},"Hono","\u002Fintegrate\u002Fframeworks\u002Fhono","3.integrate\u002Fframeworks\u002F08.hono","i-simple-icons-hono",{"title":207,"path":208,"stem":209,"icon":210},"Fastify","\u002Fintegrate\u002Fframeworks\u002Ffastify","3.integrate\u002Fframeworks\u002F09.fastify","i-simple-icons-fastify",{"title":212,"path":213,"stem":214,"icon":215},"Elysia","\u002Fintegrate\u002Fframeworks\u002Felysia","3.integrate\u002Fframeworks\u002F10.elysia","i-custom-elysia",{"title":217,"path":218,"stem":219,"icon":220},"React Router","\u002Fintegrate\u002Fframeworks\u002Freact-router","3.integrate\u002Fframeworks\u002F11.react-router","i-custom-reactrouter",{"title":222,"path":223,"stem":224,"icon":225},"Cloudflare Workers","\u002Fintegrate\u002Fframeworks\u002Fcloudflare-workers","3.integrate\u002Fframeworks\u002F12.cloudflare-workers","i-simple-icons-cloudflare",{"title":227,"path":228,"stem":229,"icon":74},"Standalone","\u002Fintegrate\u002Fframeworks\u002Fstandalone","3.integrate\u002Fframeworks\u002F13.standalone",{"title":231,"path":232,"stem":233,"icon":234},"Astro","\u002Fintegrate\u002Fframeworks\u002Fastro","3.integrate\u002Fframeworks\u002F14.astro","i-simple-icons-astro",{"title":236,"path":237,"stem":238,"icon":239},"oRPC","\u002Fintegrate\u002Fframeworks\u002Forpc","3.integrate\u002Fframeworks\u002F15.orpc","i-lucide-network",{"title":241,"path":242,"stem":243,"icon":244},"AWS Lambda","\u002Fintegrate\u002Fframeworks\u002Faws-lambda","3.integrate\u002Fframeworks\u002F16.aws-lambda","i-custom-lambda",{"title":246,"path":247,"stem":248,"icon":44},"CLI","\u002Fintegrate\u002Fframeworks\u002Fcli","3.integrate\u002Fframeworks\u002F17.cli",{"title":250,"path":251,"stem":252,"children":253,"page":29},"Use Cases","\u002Fuse-cases","4.use-cases",[254,258,263,292,320,352],{"title":36,"path":255,"stem":256,"icon":257},"\u002Fuse-cases\u002Foverview","4.use-cases\u002F0.overview","i-lucide-list-checks",{"title":259,"path":260,"stem":261,"icon":262},"Client Logging","\u002Fuse-cases\u002Fclient-logging","4.use-cases\u002F1.client-logging","i-lucide-monitor",{"title":264,"icon":265,"path":266,"stem":267,"children":268,"page":29},"AI SDK","i-simple-icons-vercel","\u002Fuse-cases\u002Fai-sdk","4.use-cases\u002F2.ai-sdk",[269,272,277,282,287],{"title":36,"path":270,"stem":271,"icon":39},"\u002Fuse-cases\u002Fai-sdk\u002Foverview","4.use-cases\u002F2.ai-sdk\u002F01.overview",{"title":273,"path":274,"stem":275,"icon":276},"Usage","\u002Fuse-cases\u002Fai-sdk\u002Fusage","4.use-cases\u002F2.ai-sdk\u002F02.usage","i-lucide-code",{"title":278,"path":279,"stem":280,"icon":281},"Options","\u002Fuse-cases\u002Fai-sdk\u002Foptions","4.use-cases\u002F2.ai-sdk\u002F03.options","i-lucide-sliders",{"title":283,"path":284,"stem":285,"icon":286},"Metadata","\u002Fuse-cases\u002Fai-sdk\u002Fmetadata","4.use-cases\u002F2.ai-sdk\u002F04.metadata","i-lucide-database",{"title":288,"path":289,"stem":290,"icon":291},"Telemetry","\u002Fuse-cases\u002Fai-sdk\u002Ftelemetry","4.use-cases\u002F2.ai-sdk\u002F05.telemetry","i-lucide-activity",{"title":293,"icon":294,"path":295,"stem":296,"children":297,"page":29},"Better Auth","i-simple-icons-betterauth","\u002Fuse-cases\u002Fbetter-auth","4.use-cases\u002F3.better-auth",[298,301,306,311,315],{"title":36,"path":299,"stem":300,"icon":39},"\u002Fuse-cases\u002Fbetter-auth\u002Foverview","4.use-cases\u002F3.better-auth\u002F01.overview",{"title":302,"path":303,"stem":304,"icon":305},"Identify User","\u002Fuse-cases\u002Fbetter-auth\u002Fidentify-user","4.use-cases\u002F3.better-auth\u002F02.identify-user","i-lucide-user-check",{"title":307,"path":308,"stem":309,"icon":310},"Middleware","\u002Fuse-cases\u002Fbetter-auth\u002Fmiddleware","4.use-cases\u002F3.better-auth\u002F03.middleware","i-lucide-shield",{"title":312,"path":313,"stem":314,"icon":262},"Client Sync","\u002Fuse-cases\u002Fbetter-auth\u002Fclient-sync","4.use-cases\u002F3.better-auth\u002F04.client-sync",{"title":316,"path":317,"stem":318,"icon":319},"Performance","\u002Fuse-cases\u002Fbetter-auth\u002Fperformance","4.use-cases\u002F3.better-auth\u002F05.performance","i-lucide-gauge",{"title":321,"icon":322,"path":323,"stem":324,"children":325,"page":29},"Audit Logs","i-lucide-shield-check","\u002Fuse-cases\u002Faudit","4.use-cases\u002F4.audit",[326,329,334,339,344,348],{"title":36,"path":327,"stem":328,"icon":39},"\u002Fuse-cases\u002Faudit\u002Foverview","4.use-cases\u002F4.audit\u002F01.overview",{"title":330,"path":331,"stem":332,"icon":333},"Schema","\u002Fuse-cases\u002Faudit\u002Fschema","4.use-cases\u002F4.audit\u002F02.schema","i-lucide-file-text",{"title":335,"path":336,"stem":337,"icon":338},"Recording","\u002Fuse-cases\u002Faudit\u002Frecording","4.use-cases\u002F4.audit\u002F03.recording","i-lucide-pen-line",{"title":340,"path":341,"stem":342,"icon":343},"Drains","\u002Fuse-cases\u002Faudit\u002Fpipeline","4.use-cases\u002F4.audit\u002F04.pipeline","i-lucide-link",{"title":345,"path":346,"stem":347,"icon":322},"Compliance","\u002Fuse-cases\u002Faudit\u002Fcompliance","4.use-cases\u002F4.audit\u002F05.compliance",{"title":349,"path":350,"stem":351,"icon":79},"Recipes","\u002Fuse-cases\u002Faudit\u002Frecipes","4.use-cases\u002F4.audit\u002F06.recipes",{"title":353,"path":354,"stem":355,"icon":356},"Enrichers","\u002Fuse-cases\u002Fenrichers","4.use-cases\u002F5.enrichers","i-lucide-sparkles",{"title":358,"path":359,"stem":360,"children":361,"page":29},"Extend","\u002Fextend","5.extend",[362,366,371,376,381,385,389,393,397,402,407],{"title":36,"path":363,"stem":364,"icon":365},"\u002Fextend\u002Foverview","5.extend\u002F0.overview","i-lucide-blocks",{"title":367,"path":368,"stem":369,"icon":370},"Stream","\u002Fextend\u002Fstream","5.extend\u002F1.stream","i-lucide-radio-tower",{"title":372,"path":373,"stem":374,"icon":375},"Custom framework","\u002Fextend\u002Fcustom-framework","5.extend\u002F10.custom-framework","i-lucide-puzzle",{"title":377,"path":378,"stem":379,"icon":380},"FS reader","\u002Fextend\u002Ffs-reader","5.extend\u002F2.fs-reader","i-lucide-folder-search",{"title":349,"path":382,"stem":383,"icon":384},"\u002Fextend\u002Fconsumer-recipes","5.extend\u002F3.consumer-recipes","i-lucide-chef-hat",{"title":386,"path":387,"stem":388,"icon":365},"Plugins","\u002Fextend\u002Fplugins","5.extend\u002F4.plugins",{"title":390,"path":391,"stem":392,"icon":356},"Custom enrichers","\u002Fextend\u002Fcustom-enrichers","5.extend\u002F5.custom-enrichers",{"title":394,"path":395,"stem":396,"icon":64},"Tail sampling","\u002Fextend\u002Ftail-sampling","5.extend\u002F6.tail-sampling",{"title":398,"path":399,"stem":400,"icon":401},"Identity headers","\u002Fextend\u002Fidentity-headers","5.extend\u002F7.identity-headers","i-lucide-fingerprint",{"title":403,"path":404,"stem":405,"icon":406},"Custom drains","\u002Fextend\u002Fcustom-drains","5.extend\u002F8.custom-drains","i-lucide-share-2",{"title":408,"path":409,"stem":410,"icon":411},"Drain pipeline","\u002Fextend\u002Fdrain-pipeline","5.extend\u002F9.drain-pipeline","i-lucide-workflow",{"title":413,"path":414,"stem":415,"children":416,"page":29},"Reference","\u002Freference","6.reference",[417,422,425,430,434,439],{"title":418,"path":419,"stem":420,"icon":421},"Configuration","\u002Freference\u002Fconfiguration","6.reference\u002F1.configuration","i-lucide-settings",{"title":316,"path":423,"stem":424,"icon":319},"\u002Freference\u002Fperformance","6.reference\u002F2.performance",{"title":426,"path":427,"stem":428,"icon":429},"Vite Plugin","\u002Freference\u002Fvite-plugin","6.reference\u002F3.vite-plugin","i-custom-vite",{"title":431,"path":432,"stem":433,"icon":322},"Best Practices","\u002Freference\u002Fbest-practices","6.reference\u002F4.best-practices",{"title":435,"path":436,"stem":437,"icon":438},"vs Other Loggers","\u002Freference\u002Fvs-other-loggers","6.reference\u002F5.vs-other-loggers","i-lucide-scale",{"title":440,"path":441,"stem":442,"icon":356},"Agent Skills","\u002Freference\u002Fagent-skills","6.reference\u002F6.agent-skills",{"id":444,"title":316,"body":445,"description":2318,"extension":2319,"links":2320,"meta":2325,"navigation":2326,"path":423,"seo":2327,"stem":424,"__hash__":2328},"docs\u002F6.reference\u002F2.performance.md",{"type":446,"value":447,"toc":2291},"minimark",[448,465,470,478,483,486,650,669,682,686,689,1204,1207,1211,1214,1232,1246,1256,1262,1268,1271,1274,1298,1308,1330,1340,1347,1351,1354,1424,1430,1434,1437,1537,1574,1578,1581,1664,1670,1727,1734,1790,1802,1806,1854,1857,1892,1894,1969,1973,2023,2027,2117,2121,2125,2144,2147,2186,2190,2193,2212,2216,2287],[449,450,451,452,456,457,464],"p",{},"evlog adds ",[453,454,455],"strong",{},"~3µs of overhead per request",", that's 0.003ms, orders of magnitude below any HTTP framework or database call. Performance is tracked on every pull request via ",[458,459,463],"a",{"href":460,"rel":461},"https:\u002F\u002Fcodspeed.io",[462],"nofollow","CodSpeed",".",[466,467,469],"h2",{"id":468},"evlog-vs-alternatives","evlog vs alternatives",[449,471,472,473,477],{},"All benchmarks run with JSON output to no-op destinations. pino writes to ",[474,475,476],"code",{},"\u002Fdev\u002Fnull"," (sync), winston writes to a no-op stream, consola uses a no-op reporter, evlog uses silent mode.",[479,480,482],"h3",{"id":481},"results","Results",[484,485],"bench-bar-race",{},[487,488,489,512],"table",{},[490,491,492],"thead",{},[493,494,495,499,503,506,509],"tr",{},[496,497,498],"th",{},"Scenario",[496,500,502],{"align":501},"right","evlog",[496,504,505],{"align":501},"pino",[496,507,508],{"align":501},"consola",[496,510,511],{"align":501},"winston",[513,514,515,535,554,574,593,612,631],"tbody",{},[493,516,517,521,524,527,532],{},[518,519,520],"td",{},"Simple string log",[518,522,523],{"align":501},"1.83M ops\u002Fs",[518,525,526],{"align":501},"1.09M",[518,528,529],{"align":501},[453,530,531],{},"2.79M",[518,533,534],{"align":501},"1.20M",[493,536,537,540,543,546,551],{},[518,538,539],{},"Structured (5 fields)",[518,541,542],{"align":501},"1.64M ops\u002Fs",[518,544,545],{"align":501},"716.1K",[518,547,548],{"align":501},[453,549,550],{},"1.71M",[518,552,553],{"align":501},"431.6K",[493,555,556,559,565,568,571],{},[518,557,558],{},"Deep nested log",[518,560,561,564],{"align":501},[453,562,563],{},"1.55M"," ops\u002Fs",[518,566,567],{"align":501},"464.9K",[518,569,570],{"align":501},"1.01M",[518,572,573],{"align":501},"164.0K",[493,575,576,579,584,587,590],{},[518,577,578],{},"Child \u002F scoped logger",[518,580,581,564],{"align":501},[453,582,583],{},"1.70M",[518,585,586],{"align":501},"845.0K",[518,588,589],{"align":501},"280.4K",[518,591,592],{"align":501},"430.0K",[493,594,595,598,603,606,609],{},[518,596,597],{},"Wide event lifecycle",[518,599,600,564],{"align":501},[453,601,602],{},"1.58M",[518,604,605],{"align":501},"205.8K",[518,607,608],{"align":501},"—",[518,610,611],{"align":501},"111.9K",[493,613,614,617,620,623,628],{},[518,615,616],{},"Burst (100 logs)",[518,618,619],{"align":501},"17.8K ops\u002Fs",[518,621,622],{"align":501},"10.3K",[518,624,625],{"align":501},[453,626,627],{},"39.4K",[518,629,630],{"align":501},"7.5K",[493,632,633,636,641,644,647],{},[518,634,635],{},"Logger creation",[518,637,638,564],{"align":501},[453,639,640],{},"16.85M",[518,642,643],{"align":501},"7.50M",[518,645,646],{"align":501},"310.3K",[518,648,649],{"align":501},"5.38M",[449,651,652,653,656,657,660,661,664,665,668],{},"evlog wins ",[453,654,655],{},"4 out of 7"," head-to-head comparisons, and the wins that matter most are decisive: ",[453,658,659],{},"7.7x faster"," than pino in the wide event pattern, ",[453,662,663],{},"2.3x faster"," logger creation, and ",[453,666,667],{},"3.3x faster"," deep nested logging. consola edges ahead on simple strings and burst (it uses a no-op reporter with no serialization), but evlog produces a single correlated event per request where traditional loggers emit N separate lines.",[670,671,673,676,677,681],"callout",{"color":672,"icon":13},"info",[453,674,675],{},"Why this matters",": in the wide event pattern (one event per request, the real-world API shape), evlog is 7.7x faster than pino and 14.1x faster than winston while sending 75% less data to your log drain and giving you one queryable event instead of 4 disconnected lines. The 7.7x is not a brute-force win — pino doesn't try to accumulate context, so the comparison reflects an architectural difference, not a fairness issue. See ",[458,678,680],{"href":679},"#when-evlog-might-not-win","When evlog might not win"," for the honest gaps.",[479,683,685],{"id":684},"what-is-the-wide-event-lifecycle","What is the \"wide event lifecycle\"?",[449,687,688],{},"This benchmark simulates a real API request:",[690,691,692,958],"code-group",{},[693,694,700],"pre",{"className":695,"code":696,"filename":697,"language":698,"meta":699,"style":699},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","const log = createLogger({ method: 'POST', path: '\u002Fapi\u002Fcheckout', requestId: 'req_abc' })\nlog.set({ user: { id: 'usr_123', plan: 'pro' } })\nlog.set({ cart: { items: 3, total: 9999 } })\nlog.set({ payment: { method: 'card', last4: '4242' } })\nlog.emit({ status: 200 })\n","evlog (1 event)","typescript","",[474,701,702,781,836,881,932],{"__ignoreMap":699},[703,704,707,711,715,719,723,726,729,733,736,739,743,746,749,752,754,756,759,761,763,766,768,770,773,775,778],"span",{"class":705,"line":706},"line",1,[703,708,710],{"class":709},"spNyl","const",[703,712,714],{"class":713},"sTEyZ"," log ",[703,716,718],{"class":717},"sMK4o","=",[703,720,722],{"class":721},"s2Zo4"," createLogger",[703,724,725],{"class":713},"(",[703,727,728],{"class":717},"{",[703,730,732],{"class":731},"swJcz"," method",[703,734,735],{"class":717},":",[703,737,738],{"class":717}," '",[703,740,742],{"class":741},"sfazB","POST",[703,744,745],{"class":717},"'",[703,747,748],{"class":717},",",[703,750,751],{"class":731}," path",[703,753,735],{"class":717},[703,755,738],{"class":717},[703,757,758],{"class":741},"\u002Fapi\u002Fcheckout",[703,760,745],{"class":717},[703,762,748],{"class":717},[703,764,765],{"class":731}," requestId",[703,767,735],{"class":717},[703,769,738],{"class":717},[703,771,772],{"class":741},"req_abc",[703,774,745],{"class":717},[703,776,777],{"class":717}," }",[703,779,780],{"class":713},")\n",[703,782,784,787,789,792,794,796,799,801,804,807,809,811,814,816,818,821,823,825,828,830,832,834],{"class":705,"line":783},2,[703,785,786],{"class":713},"log",[703,788,464],{"class":717},[703,790,791],{"class":721},"set",[703,793,725],{"class":713},[703,795,728],{"class":717},[703,797,798],{"class":731}," user",[703,800,735],{"class":717},[703,802,803],{"class":717}," {",[703,805,806],{"class":731}," id",[703,808,735],{"class":717},[703,810,738],{"class":717},[703,812,813],{"class":741},"usr_123",[703,815,745],{"class":717},[703,817,748],{"class":717},[703,819,820],{"class":731}," plan",[703,822,735],{"class":717},[703,824,738],{"class":717},[703,826,827],{"class":741},"pro",[703,829,745],{"class":717},[703,831,777],{"class":717},[703,833,777],{"class":717},[703,835,780],{"class":713},[703,837,839,841,843,845,847,849,852,854,856,859,861,865,867,870,872,875,877,879],{"class":705,"line":838},3,[703,840,786],{"class":713},[703,842,464],{"class":717},[703,844,791],{"class":721},[703,846,725],{"class":713},[703,848,728],{"class":717},[703,850,851],{"class":731}," cart",[703,853,735],{"class":717},[703,855,803],{"class":717},[703,857,858],{"class":731}," items",[703,860,735],{"class":717},[703,862,864],{"class":863},"sbssI"," 3",[703,866,748],{"class":717},[703,868,869],{"class":731}," total",[703,871,735],{"class":717},[703,873,874],{"class":863}," 9999",[703,876,777],{"class":717},[703,878,777],{"class":717},[703,880,780],{"class":713},[703,882,884,886,888,890,892,894,897,899,901,903,905,907,910,912,914,917,919,921,924,926,928,930],{"class":705,"line":883},4,[703,885,786],{"class":713},[703,887,464],{"class":717},[703,889,791],{"class":721},[703,891,725],{"class":713},[703,893,728],{"class":717},[703,895,896],{"class":731}," payment",[703,898,735],{"class":717},[703,900,803],{"class":717},[703,902,732],{"class":731},[703,904,735],{"class":717},[703,906,738],{"class":717},[703,908,909],{"class":741},"card",[703,911,745],{"class":717},[703,913,748],{"class":717},[703,915,916],{"class":731}," last4",[703,918,735],{"class":717},[703,920,738],{"class":717},[703,922,923],{"class":741},"4242",[703,925,745],{"class":717},[703,927,777],{"class":717},[703,929,777],{"class":717},[703,931,780],{"class":713},[703,933,935,937,939,942,944,946,949,951,954,956],{"class":705,"line":934},5,[703,936,786],{"class":713},[703,938,464],{"class":717},[703,940,941],{"class":721},"emit",[703,943,725],{"class":713},[703,945,728],{"class":717},[703,947,948],{"class":731}," status",[703,950,735],{"class":717},[703,952,953],{"class":863}," 200",[703,955,777],{"class":717},[703,957,780],{"class":713},[693,959,962],{"className":695,"code":960,"filename":961,"language":698,"meta":699,"style":699},"const child = pinoLogger.child({ method: 'POST', path: '\u002Fapi\u002Fcheckout', requestId: 'req_abc' })\nchild.info({ user: { id: 'usr_123', plan: 'pro' } }, 'user context')\nchild.info({ cart: { items: 3, total: 9999 } }, 'cart context')\nchild.info({ payment: { method: 'card', last4: '4242' } }, 'payment context')\nchild.info({ status: 200 }, 'request complete')\n","pino (4 log lines)",[474,963,964,1023,1077,1122,1175],{"__ignoreMap":699},[703,965,966,968,971,973,976,978,981,983,985,987,989,991,993,995,997,999,1001,1003,1005,1007,1009,1011,1013,1015,1017,1019,1021],{"class":705,"line":706},[703,967,710],{"class":709},[703,969,970],{"class":713}," child ",[703,972,718],{"class":717},[703,974,975],{"class":713}," pinoLogger",[703,977,464],{"class":717},[703,979,980],{"class":721},"child",[703,982,725],{"class":713},[703,984,728],{"class":717},[703,986,732],{"class":731},[703,988,735],{"class":717},[703,990,738],{"class":717},[703,992,742],{"class":741},[703,994,745],{"class":717},[703,996,748],{"class":717},[703,998,751],{"class":731},[703,1000,735],{"class":717},[703,1002,738],{"class":717},[703,1004,758],{"class":741},[703,1006,745],{"class":717},[703,1008,748],{"class":717},[703,1010,765],{"class":731},[703,1012,735],{"class":717},[703,1014,738],{"class":717},[703,1016,772],{"class":741},[703,1018,745],{"class":717},[703,1020,777],{"class":717},[703,1022,780],{"class":713},[703,1024,1025,1027,1029,1031,1033,1035,1037,1039,1041,1043,1045,1047,1049,1051,1053,1055,1057,1059,1061,1063,1065,1068,1070,1073,1075],{"class":705,"line":783},[703,1026,980],{"class":713},[703,1028,464],{"class":717},[703,1030,672],{"class":721},[703,1032,725],{"class":713},[703,1034,728],{"class":717},[703,1036,798],{"class":731},[703,1038,735],{"class":717},[703,1040,803],{"class":717},[703,1042,806],{"class":731},[703,1044,735],{"class":717},[703,1046,738],{"class":717},[703,1048,813],{"class":741},[703,1050,745],{"class":717},[703,1052,748],{"class":717},[703,1054,820],{"class":731},[703,1056,735],{"class":717},[703,1058,738],{"class":717},[703,1060,827],{"class":741},[703,1062,745],{"class":717},[703,1064,777],{"class":717},[703,1066,1067],{"class":717}," },",[703,1069,738],{"class":717},[703,1071,1072],{"class":741},"user context",[703,1074,745],{"class":717},[703,1076,780],{"class":713},[703,1078,1079,1081,1083,1085,1087,1089,1091,1093,1095,1097,1099,1101,1103,1105,1107,1109,1111,1113,1115,1118,1120],{"class":705,"line":838},[703,1080,980],{"class":713},[703,1082,464],{"class":717},[703,1084,672],{"class":721},[703,1086,725],{"class":713},[703,1088,728],{"class":717},[703,1090,851],{"class":731},[703,1092,735],{"class":717},[703,1094,803],{"class":717},[703,1096,858],{"class":731},[703,1098,735],{"class":717},[703,1100,864],{"class":863},[703,1102,748],{"class":717},[703,1104,869],{"class":731},[703,1106,735],{"class":717},[703,1108,874],{"class":863},[703,1110,777],{"class":717},[703,1112,1067],{"class":717},[703,1114,738],{"class":717},[703,1116,1117],{"class":741},"cart context",[703,1119,745],{"class":717},[703,1121,780],{"class":713},[703,1123,1124,1126,1128,1130,1132,1134,1136,1138,1140,1142,1144,1146,1148,1150,1152,1154,1156,1158,1160,1162,1164,1166,1168,1171,1173],{"class":705,"line":883},[703,1125,980],{"class":713},[703,1127,464],{"class":717},[703,1129,672],{"class":721},[703,1131,725],{"class":713},[703,1133,728],{"class":717},[703,1135,896],{"class":731},[703,1137,735],{"class":717},[703,1139,803],{"class":717},[703,1141,732],{"class":731},[703,1143,735],{"class":717},[703,1145,738],{"class":717},[703,1147,909],{"class":741},[703,1149,745],{"class":717},[703,1151,748],{"class":717},[703,1153,916],{"class":731},[703,1155,735],{"class":717},[703,1157,738],{"class":717},[703,1159,923],{"class":741},[703,1161,745],{"class":717},[703,1163,777],{"class":717},[703,1165,1067],{"class":717},[703,1167,738],{"class":717},[703,1169,1170],{"class":741},"payment context",[703,1172,745],{"class":717},[703,1174,780],{"class":713},[703,1176,1177,1179,1181,1183,1185,1187,1189,1191,1193,1195,1197,1200,1202],{"class":705,"line":934},[703,1178,980],{"class":713},[703,1180,464],{"class":717},[703,1182,672],{"class":721},[703,1184,725],{"class":713},[703,1186,728],{"class":717},[703,1188,948],{"class":731},[703,1190,735],{"class":717},[703,1192,953],{"class":863},[703,1194,1067],{"class":717},[703,1196,738],{"class":717},[703,1198,1199],{"class":741},"request complete",[703,1201,745],{"class":717},[703,1203,780],{"class":713},[449,1205,1206],{},"Same CPU cost, but evlog gives you everything in one place.",[466,1208,1210],{"id":1209},"why-is-evlog-faster","Why is evlog faster?",[449,1212,1213],{},"The numbers above aren't magic, they come from deliberate architectural choices:",[449,1215,1216,1219,1220,1223,1224,1227,1228,1231],{},[453,1217,1218],{},"In-place mutations, not copies."," ",[474,1221,1222],{},"log.set()"," writes directly into the context object via a recursive ",[474,1225,1226],{},"mergeInto"," function. Other loggers clone objects on every call (object spread, ",[474,1229,1230],{},"Object.assign","). evlog never allocates intermediate objects during context accumulation.",[449,1233,1234,1237,1238,1241,1242,1245],{},[453,1235,1236],{},"No serialization until drain."," Context stays as plain JavaScript objects throughout the request lifecycle. ",[474,1239,1240],{},"JSON.stringify"," runs exactly once, at emit time. Traditional loggers serialize on every ",[474,1243,1244],{},".info()"," call, that's 4x serialization for 4 log lines.",[449,1247,1248,1251,1252,1255],{},[453,1249,1250],{},"Lazy allocation."," Timestamps, sampling context, and override objects are only created when actually needed. If tail sampling is disabled (the common case), its context object is never allocated. The ",[474,1253,1254],{},"Date"," instance used for ISO timestamps is reused across calls.",[449,1257,1258,1261],{},[453,1259,1260],{},"One event, not N lines."," For a typical request, pino emits 4+ JSON lines that all need serializing, transporting, and indexing. evlog emits one. That's 75% less work for your log drain, fewer bytes on the wire, and one row to query instead of four.",[449,1263,1264,1267],{},[453,1265,1266],{},"RegExp caching."," Glob patterns (used in sampling and route matching) are compiled once and cached. Repeated evaluations hit the cache instead of recompiling.",[466,1269,680],{"id":1270},"when-evlog-might-not-win",[449,1272,1273],{},"The benchmarks above measure CPU + serialization cost on the main thread, with no real I\u002FO. That's the standard setup pino, winston, and logtape use for their own benchmarks — but it leaves out a few scenarios where another logger can edge ahead. Be honest about these:",[449,1275,1276,1279,1280,1285,1286,1289,1290,1293,1294,1297],{},[453,1277,1278],{},"Fire-and-forget hot paths with pino-via-worker-thread."," In production, pino is typically configured with a ",[458,1281,1284],{"href":1282,"rel":1283},"https:\u002F\u002Fgetpino.io\u002F#\u002Fdocs\u002Ftransports",[462],"worker-thread transport"," (",[474,1287,1288],{},"pino-pretty",", ",[474,1291,1292],{},"pino-loki",", vendor-specific transports). The serialization and I\u002FO move off the main thread entirely. For a workload that emits hundreds of thousands of ",[474,1295,1296],{},"log.info('foo')"," lines per second with no context accumulation, pino-via-worker can hit ~2-3M ops\u002Fs on the main thread because it's just queueing. We can't benchmark that mode fairly inside a single-threaded vitest process, so it's not in our table — but it's a real scenario where pino is faster.",[449,1299,1300,1303,1304,1307],{},[453,1301,1302],{},"CLI \u002F pretty-only output without serialization."," consola's no-op reporter mode in our benchmarks (",[474,1305,1306],{},"level: 4, reporters: [{ log: () => {} }]",") skips JSON serialization entirely. That's realistic if you're using consola for a CLI with terminal-only output, but it's why consola wins \"simple string\" and \"burst\" — it's not doing the same work. evlog and pino both serialize to JSON; consola in those benchmarks does not. If your use case is \"pretty terminal output, no shipping logs anywhere\", consola is genuinely lighter.",[449,1309,1310,1317,1318,1321,1322,1325,1326,1329],{},[453,1311,1312,1313,1316],{},"Single ",[474,1314,1315],{},"log.info"," calls, no context accumulation."," evlog and pino are roughly tied on ",[474,1319,1320],{},"pino.info('hello')"," vs ",[474,1323,1324],{},"evlog.info('hello')"," (1.83M vs 1.09M ops\u002Fs in our run, but the gap closes further if pino runs in async mode). evlog's ~7.7x advantage shows up specifically when you'd otherwise emit N separate lines for one logical operation. If you genuinely log one line per call and don't accumulate, the speed delta is much smaller — pick evlog for the API ergonomics (",[474,1327,1328],{},"log.set"," + structured errors), not raw throughput.",[449,1331,1332,1335,1336,1339],{},[453,1333,1334],{},"Wall-clock variance is real."," Vitest bench numbers shift ±5-10% between runs on the same machine (thermal throttling, GC, other processes). The numbers above come from a single run on a MacBook; CI tracks regressions via ",[458,1337,463],{"href":460,"rel":1338},[462],"'s CPU-instruction counting (deterministic, ±0.5% noise floor) but the absolute hz values in this page are the wall-clock snapshot, not a guaranteed floor.",[449,1341,1342,1343,1346],{},"The takeaway: ",[453,1344,1345],{},"the wins are real for the wide event pattern",", but if your stack is \"pure fire-and-forget pino with a worker transport\", that's the one place we don't claim to beat.",[466,1348,1350],{"id":1349},"real-world-overhead","Real-world overhead",[449,1352,1353],{},"For a typical API request:",[487,1355,1356,1366],{},[490,1357,1358],{},[493,1359,1360,1363],{},[496,1361,1362],{},"Component",[496,1364,1365],{"align":501},"Cost",[513,1367,1368,1375,1387,1397,1404,1412],{},[493,1369,1370,1372],{},[518,1371,635],{},[518,1373,1374],{"align":501},"52ns",[493,1376,1377,1384],{},[518,1378,1379,1380,1383],{},"3x ",[474,1381,1382],{},"set()"," calls",[518,1385,1386],{"align":501},"105ns",[493,1388,1389,1394],{},[518,1390,1391],{},[474,1392,1393],{},"emit()",[518,1395,1396],{"align":501},"588ns",[493,1398,1399,1401],{},[518,1400,61],{},[518,1402,1403],{"align":501},"22ns",[493,1405,1406,1409],{},[518,1407,1408],{},"Enricher pipeline",[518,1410,1411],{"align":501},"2.14µs",[493,1413,1414,1419],{},[518,1415,1416],{},[453,1417,1418],{},"Total",[518,1420,1421],{"align":501},[453,1422,1423],{},"~2.9µs",[449,1425,1426,1427,464],{},"For context, a database query takes 1-50ms, an HTTP call takes 10-500ms. evlog's overhead is ",[453,1428,1429],{},"invisible",[466,1431,1433],{"id":1432},"bundle-size","Bundle size",[449,1435,1436],{},"Every entry point is tree-shakeable. You only pay for what you import.",[487,1438,1439,1449],{},[490,1440,1441],{},[493,1442,1443,1446],{},[496,1444,1445],{},"Entry",[496,1447,1448],{"align":501},"Gzip",[513,1450,1451,1462,1473,1481,1489,1497,1505,1513,1521,1529],{},[493,1452,1453,1459],{},[518,1454,1455,1456,1458],{},"core (",[474,1457,502],{},")",[518,1460,1461],{"align":501},"510 B",[493,1463,1464,1470],{},[518,1465,1466,1467,1458],{},"toolkit (",[474,1468,1469],{},"evlog\u002Ftoolkit",[518,1471,1472],{"align":501},"720 B",[493,1474,1475,1478],{},[518,1476,1477],{},"utils",[518,1479,1480],{"align":501},"1.58 kB",[493,1482,1483,1486],{},[518,1484,1485],{},"error",[518,1487,1488],{"align":501},"1.46 kB",[493,1490,1491,1494],{},[518,1492,1493],{},"enrichers",[518,1495,1496],{"align":501},"1.99 kB",[493,1498,1499,1502],{},[518,1500,1501],{},"pipeline",[518,1503,1504],{"align":501},"1.35 kB",[493,1506,1507,1510],{},[518,1508,1509],{},"http",[518,1511,1512],{"align":501},"1.22 kB",[493,1514,1515,1518],{},[518,1516,1517],{},"browser",[518,1519,1520],{"align":501},"289 B",[493,1522,1523,1526],{},[518,1524,1525],{},"workers",[518,1527,1528],{"align":501},"1.30 kB",[493,1530,1531,1534],{},[518,1532,1533],{},"client",[518,1535,1536],{"align":501},"128 B",[449,1538,1539,1540,1543,1544,1547,1548,1551,1552,1289,1555,1289,1558,1561,1562,1565,1566,1569,1570,1573],{},"A typical Node.js bundle (",[474,1541,1542],{},"initLogger"," + ",[474,1545,1546],{},"createLogger",") measures ",[453,1549,1550],{},"~6.3 kB gzip"," end-to-end after tree-shaking; adding ",[474,1553,1554],{},"createRequestLogger",[474,1556,1557],{},"createError",[474,1559,1560],{},"parseError",", and ",[474,1563,1564],{},"useLogger"," brings the bundle to ",[453,1567,1568],{},"~7.2 kB gzip",". Adapters and framework integrations sit on top: Hono is 617 B, Express 734 B, Axiom 1.48 kB. Bundle size is tracked on every PR and compared against the ",[474,1571,1572],{},"main"," baseline.",[466,1575,1577],{"id":1576},"detailed-benchmarks","Detailed benchmarks",[479,1579,635],{"id":1580},"logger-creation",[487,1582,1583,1596],{},[490,1584,1585],{},[493,1586,1587,1590,1593],{},[496,1588,1589],{},"Operation",[496,1591,1592],{"align":501},"ops\u002Fsec",[496,1594,1595],{"align":501},"Mean",[513,1597,1598,1611,1624,1637,1651],{},[493,1599,1600,1606,1609],{},[518,1601,1602,1605],{},[474,1603,1604],{},"createLogger()"," (no context)",[518,1607,1608],{"align":501},"19.20M",[518,1610,1374],{"align":501},[493,1612,1613,1618,1621],{},[518,1614,1615,1617],{},[474,1616,1604],{}," (shallow context)",[518,1619,1620],{"align":501},"18.74M",[518,1622,1623],{"align":501},"53ns",[493,1625,1626,1631,1634],{},[518,1627,1628,1630],{},[474,1629,1604],{}," (nested context)",[518,1632,1633],{"align":501},"17.70M",[518,1635,1636],{"align":501},"56ns",[493,1638,1639,1645,1648],{},[518,1640,1641,1644],{},[474,1642,1643],{},"createRequestLogger()"," (method + path)",[518,1646,1647],{"align":501},"16.91M",[518,1649,1650],{"align":501},"59ns",[493,1652,1653,1658,1661],{},[518,1654,1655,1657],{},[474,1656,1643],{}," (method + path + requestId)",[518,1659,1660],{"align":501},"12.67M",[518,1662,1663],{"align":501},"79ns",[479,1665,1667,1668,1458],{"id":1666},"context-accumulation-logset","Context accumulation (",[474,1669,1222],{},[487,1671,1672,1682],{},[490,1673,1674],{},[493,1675,1676,1678,1680],{},[496,1677,1589],{},[496,1679,1592],{"align":501},[496,1681,1595],{"align":501},[513,1683,1684,1694,1705,1716],{},[493,1685,1686,1689,1692],{},[518,1687,1688],{},"Shallow merge (3 fields)",[518,1690,1691],{"align":501},"9.56M",[518,1693,1386],{"align":501},[493,1695,1696,1699,1702],{},[518,1697,1698],{},"Shallow merge (10 fields)",[518,1700,1701],{"align":501},"4.79M",[518,1703,1704],{"align":501},"209ns",[493,1706,1707,1710,1713],{},[518,1708,1709],{},"Deep nested merge",[518,1711,1712],{"align":501},"8.04M",[518,1714,1715],{"align":501},"124ns",[493,1717,1718,1721,1724],{},[518,1719,1720],{},"4 sequential calls",[518,1722,1723],{"align":501},"7.05M",[518,1725,1726],{"align":501},"142ns",[479,1728,1730,1731,1458],{"id":1729},"event-emission-logemit","Event emission (",[474,1732,1733],{},"log.emit()",[487,1735,1736,1746],{},[490,1737,1738],{},[493,1739,1740,1742,1744],{},[496,1741,1589],{},[496,1743,1592],{"align":501},[496,1745,1595],{"align":501},[513,1747,1748,1759,1768,1779],{},[493,1749,1750,1753,1756],{},[518,1751,1752],{},"Emit minimal event",[518,1754,1755],{"align":501},"1.93M",[518,1757,1758],{"align":501},"519ns",[493,1760,1761,1764,1766],{},[518,1762,1763],{},"Emit with context",[518,1765,583],{"align":501},[518,1767,1396],{"align":501},[493,1769,1770,1773,1776],{},[518,1771,1772],{},"Full lifecycle (create + 3 sets + emit)",[518,1774,1775],{"align":501},"1.59M",[518,1777,1778],{"align":501},"628ns",[493,1780,1781,1784,1787],{},[518,1782,1783],{},"Emit with error",[518,1785,1786],{"align":501},"65.9K",[518,1788,1789],{"align":501},"15.17µs",[670,1791,1794,1797,1798,1801],{"color":1792,"icon":1793},"amber","i-lucide-triangle-alert",[474,1795,1796],{},"emit with error"," is slower because ",[474,1799,1800],{},"Error.captureStackTrace()"," is an expensive V8 operation (~15µs). This only triggers when errors are thrown.",[479,1803,1805],{"id":1804},"payload-scaling","Payload scaling",[487,1807,1808,1819],{},[490,1809,1810],{},[493,1811,1812,1815,1817],{},[496,1813,1814],{},"Payload",[496,1816,1592],{"align":501},[496,1818,1595],{"align":501},[513,1820,1821,1832,1843],{},[493,1822,1823,1826,1829],{},[518,1824,1825],{},"Small (2 fields)",[518,1827,1828],{"align":501},"1.72M",[518,1830,1831],{"align":501},"581ns",[493,1833,1834,1837,1840],{},[518,1835,1836],{},"Medium (50 fields)",[518,1838,1839],{"align":501},"569.8K",[518,1841,1842],{"align":501},"1.76µs",[493,1844,1845,1848,1851],{},[518,1846,1847],{},"Large (200 nested fields)",[518,1849,1850],{"align":501},"131.2K",[518,1852,1853],{"align":501},"7.62µs",[479,1855,61],{"id":1856},"sampling",[487,1858,1859,1869],{},[490,1860,1861],{},[493,1862,1863,1865,1867],{},[496,1864,1589],{},[496,1866,1592],{"align":501},[496,1868,1595],{"align":501},[513,1870,1871,1881],{},[493,1872,1873,1876,1879],{},[518,1874,1875],{},"Tail sampling (shouldKeep)",[518,1877,1878],{"align":501},"44.97M",[518,1880,1403],{"align":501},[493,1882,1883,1886,1889],{},[518,1884,1885],{},"Full emit with head + tail",[518,1887,1888],{"align":501},"7.01M",[518,1890,1891],{"align":501},"143ns",[479,1893,353],{"id":1493},[487,1895,1896,1907],{},[490,1897,1898],{},[493,1899,1900,1903,1905],{},[496,1901,1902],{},"Enricher",[496,1904,1592],{"align":501},[496,1906,1595],{"align":501},[513,1908,1909,1920,1931,1942,1953],{},[493,1910,1911,1914,1917],{},[518,1912,1913],{},"User Agent (Chrome)",[518,1915,1916],{"align":501},"2.61M",[518,1918,1919],{"align":501},"384ns",[493,1921,1922,1925,1928],{},[518,1923,1924],{},"Geo (Vercel)",[518,1926,1927],{"align":501},"3.88M",[518,1929,1930],{"align":501},"258ns",[493,1932,1933,1936,1939],{},[518,1934,1935],{},"Request Size",[518,1937,1938],{"align":501},"12.37M",[518,1940,1941],{"align":501},"81ns",[493,1943,1944,1947,1950],{},[518,1945,1946],{},"Trace Context",[518,1948,1949],{"align":501},"4.35M",[518,1951,1952],{"align":501},"230ns",[493,1954,1955,1960,1965],{},[518,1956,1957],{},[453,1958,1959],{},"All combined (all headers)",[518,1961,1962],{"align":501},[453,1963,1964],{},"466.7K",[518,1966,1967],{"align":501},[453,1968,1411],{},[479,1970,1972],{"id":1971},"error-handling","Error handling",[487,1974,1975,1985],{},[490,1976,1977],{},[493,1978,1979,1981,1983],{},[496,1980,1589],{},[496,1982,1592],{"align":501},[496,1984,1595],{"align":501},[513,1986,1987,2000,2012],{},[493,1988,1989,1994,1997],{},[518,1990,1991],{},[474,1992,1993],{},"createError()",[518,1995,1996],{"align":501},"232.2K",[518,1998,1999],{"align":501},"4.31µs",[493,2001,2002,2007,2010],{},[518,2003,2004],{},[474,2005,2006],{},"parseError()",[518,2008,2009],{"align":501},"45.48M",[518,2011,1403],{"align":501},[493,2013,2014,2017,2020],{},[518,2015,2016],{},"Round-trip (create + parse)",[518,2018,2019],{"align":501},"231.4K",[518,2021,2022],{"align":501},"4.32µs",[479,2024,2026],{"id":2025},"middleware-pipeline","Middleware pipeline",[487,2028,2029,2039],{},[490,2030,2031],{},[493,2032,2033,2035,2037],{},[496,2034,1589],{},[496,2036,1592],{"align":501},[496,2038,1595],{"align":501},[513,2040,2041,2055,2068,2082,2095,2106],{},[493,2042,2043,2049,2052],{},[518,2044,2045,2048],{},[474,2046,2047],{},"resolveMiddlewarePluginRunner"," (no plugins)",[518,2050,2051],{"align":501},"37.70M",[518,2053,2054],{"align":501},"27ns",[493,2056,2057,2062,2065],{},[518,2058,2059,2061],{},[474,2060,2047],{}," (2 plugins, cached)",[518,2063,2064],{"align":501},"32.26M",[518,2066,2067],{"align":501},"31ns",[493,2069,2070,2076,2079],{},[518,2071,2072,2075],{},[474,2073,2074],{},"createMiddlewareLogger"," (no plugins, safe headers)",[518,2077,2078],{"align":501},"4.41M",[518,2080,2081],{"align":501},"227ns",[493,2083,2084,2089,2092],{},[518,2085,2086,2088],{},[474,2087,2074],{}," (2 plugins, cached merge)",[518,2090,2091],{"align":501},"4.13M",[518,2093,2094],{"align":501},"242ns",[493,2096,2097,2100,2103],{},[518,2098,2099],{},"Full request lifecycle (no plugins, no drain)",[518,2101,2102],{"align":501},"993.7K",[518,2104,2105],{"align":501},"1.01µs",[493,2107,2108,2111,2114],{},[518,2109,2110],{},"Full request lifecycle (2 plugins, sync drain)",[518,2112,2113],{"align":501},"621.2K",[518,2115,2116],{"align":501},"1.61µs",[466,2118,2120],{"id":2119},"methodology-trust","Methodology & trust",[479,2122,2124],{"id":2123},"can-you-trust-these-numbers","Can you trust these numbers?",[449,2126,2127,2128,2131,2132,2135,2136,2143],{},"Every benchmark in this page is ",[453,2129,2130],{},"open source"," and ",[453,2133,2134],{},"reproducible",". The benchmark files live in ",[458,2137,2140],{"href":2138,"rel":2139},"https:\u002F\u002Fgithub.com\u002Fhugorcd\u002Fevlog\u002Ftree\u002Fmain\u002Fpackages\u002Fevlog\u002Fbench",[462],[474,2141,2142],{},"packages\u002Fevlog\u002Fbench\u002F",". You can read the exact code, run it on your machine, and verify the results.",[449,2145,2146],{},"All libraries are tested under the same conditions:",[2148,2149,2150,2157,2163,2180],"ul",{},[2151,2152,2153,2156],"li",{},[453,2154,2155],{},"Same output mode",": JSON to a no-op destination (no disk or network I\u002FO measured)",[2151,2158,2159,2162],{},[453,2160,2161],{},"Same warmup",": each benchmark runs for 500ms after JIT stabilization",[2151,2164,2165,2168,2169,2174,2175],{},[453,2166,2167],{},"Same tooling",": ",[458,2170,2173],{"href":2171,"rel":2172},"https:\u002F\u002Fvitest.dev\u002Fguide\u002Ffeatures#benchmarking",[462],"Vitest bench"," powered by ",[458,2176,2179],{"href":2177,"rel":2178},"https:\u002F\u002Fgithub.com\u002Ftinylibs\u002Ftinybench",[462],"tinybench",[2151,2181,2182,2185],{},[453,2183,2184],{},"Same machine",": when comparing libraries, all benchmarks run in the same process on the same hardware",[479,2187,2189],{"id":2188},"ci-regression-tracking","CI regression tracking",[449,2191,2192],{},"Performance regressions are tracked on every pull request via two systems:",[2148,2194,2195,2203],{},[2151,2196,2197,2202],{},[453,2198,2199],{},[458,2200,463],{"href":460,"rel":2201},[462]," runs all benchmarks using CPU instruction counting (not wall-clock timing). This eliminates noise from shared CI runners and produces deterministic, reproducible results. Regressions are flagged directly on the PR.",[2151,2204,2205,2208,2209,2211],{},[453,2206,2207],{},"Bundle size comparison"," measures all entry points against the ",[474,2210,1572],{}," baseline and posts a size delta report as a PR comment.",[479,2213,2215],{"id":2214},"run-it-yourself","Run it yourself",[693,2217,2222],{"className":2218,"code":2219,"filename":2220,"language":2221,"meta":699,"style":699},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","cd packages\u002Fevlog\n\npnpm run bench                          # all benchmarks\npnpm exec vitest bench bench\u002Fcomparison\u002F # vs alternatives only\npnpm exec tsx bench\u002Fscripts\u002Fsize.ts     # bundle size\n","Terminal","bash",[474,2223,2224,2232,2238,2254,2272],{"__ignoreMap":699},[703,2225,2226,2229],{"class":705,"line":706},[703,2227,2228],{"class":721},"cd",[703,2230,2231],{"class":741}," packages\u002Fevlog\n",[703,2233,2234],{"class":705,"line":783},[703,2235,2237],{"emptyLinePlaceholder":2236},true,"\n",[703,2239,2240,2244,2247,2250],{"class":705,"line":838},[703,2241,2243],{"class":2242},"sBMFI","pnpm",[703,2245,2246],{"class":741}," run",[703,2248,2249],{"class":741}," bench",[703,2251,2253],{"class":2252},"sHwdD","                          # all benchmarks\n",[703,2255,2256,2258,2261,2264,2266,2269],{"class":705,"line":883},[703,2257,2243],{"class":2242},[703,2259,2260],{"class":741}," exec",[703,2262,2263],{"class":741}," vitest",[703,2265,2249],{"class":741},[703,2267,2268],{"class":741}," bench\u002Fcomparison\u002F",[703,2270,2271],{"class":2252}," # vs alternatives only\n",[703,2273,2274,2276,2278,2281,2284],{"class":705,"line":934},[703,2275,2243],{"class":2242},[703,2277,2260],{"class":741},[703,2279,2280],{"class":741}," tsx",[703,2282,2283],{"class":741}," bench\u002Fscripts\u002Fsize.ts",[703,2285,2286],{"class":2252},"     # bundle size\n",[2288,2289,2290],"style",{},"html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}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 .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}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 .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}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}",{"title":699,"searchDepth":783,"depth":783,"links":2292},[2293,2297,2298,2299,2300,2301,2313],{"id":468,"depth":783,"text":469,"children":2294},[2295,2296],{"id":481,"depth":838,"text":482},{"id":684,"depth":838,"text":685},{"id":1209,"depth":783,"text":1210},{"id":1270,"depth":783,"text":680},{"id":1349,"depth":783,"text":1350},{"id":1432,"depth":783,"text":1433},{"id":1576,"depth":783,"text":1577,"children":2302},[2303,2304,2306,2308,2309,2310,2311,2312],{"id":1580,"depth":838,"text":635},{"id":1666,"depth":838,"text":2305},"Context accumulation (log.set())",{"id":1729,"depth":838,"text":2307},"Event emission (log.emit())",{"id":1804,"depth":838,"text":1805},{"id":1856,"depth":838,"text":61},{"id":1493,"depth":838,"text":353},{"id":1971,"depth":838,"text":1972},{"id":2025,"depth":838,"text":2026},{"id":2119,"depth":783,"text":2120,"children":2314},[2315,2316,2317],{"id":2123,"depth":838,"text":2124},{"id":2188,"depth":838,"text":2189},{"id":2214,"depth":838,"text":2215},"evlog adds ~3µs per request. Faster than pino, consola, and winston in most scenarios while emitting richer, more useful events.","md",[2321,2324],{"label":61,"icon":64,"to":62,"color":2322,"variant":2323},"neutral","subtle",{"label":418,"icon":421,"to":419,"color":2322,"variant":2323},{},{"icon":319},{"title":316,"description":2318},"P2y1W5h7NCZfbOjek7pla765FzgPeifmUTz0akEacdM",[2330,2332],{"title":418,"path":419,"stem":420,"description":2331,"icon":421,"children":-1},"Complete reference for all evlog configuration options including global logger settings, middleware options, environment context, and framework-specific overrides.",{"title":426,"path":427,"stem":428,"description":2333,"icon":429,"children":-1},"Build-time optimizations for any Vite-based framework. Auto-init, debug stripping, source location injection, and optional auto-imports.",1780170263802]