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