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