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