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