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