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