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