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