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