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