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