[{"data":1,"prerenderedAt":1923},["ShallowReactive",2],{"navigation_docs":3,"-core-concepts-performance":297,"-core-concepts-performance-surround":1918},[4,30,70,115,203,267,283],{"title":5,"path":6,"stem":7,"children":8,"page":29},"Getting Started","\u002Fgetting-started","1.getting-started",[9,14,19,24],{"title":10,"path":11,"stem":12,"icon":13},"Introduction","\u002Fgetting-started\u002Fintroduction","1.getting-started\u002F1.introduction","i-lucide-info",{"title":15,"path":16,"stem":17,"icon":18},"Installation","\u002Fgetting-started\u002Finstallation","1.getting-started\u002F2.installation","i-lucide-download",{"title":20,"path":21,"stem":22,"icon":23},"Quick Start","\u002Fgetting-started\u002Fquick-start","1.getting-started\u002F3.quick-start","i-lucide-zap",{"title":25,"path":26,"stem":27,"icon":28},"Agent Skills","\u002Fgetting-started\u002Fagent-skills","1.getting-started\u002F4.agent-skills","i-lucide-sparkles",false,{"title":31,"path":32,"stem":33,"children":34,"page":29},"Logging","\u002Flogging","2.logging",[35,40,45,50,55,60,65],{"title":36,"path":37,"stem":38,"icon":39},"Overview","\u002Flogging\u002Foverview","2.logging\u002F0.overview","i-lucide-list",{"title":41,"path":42,"stem":43,"icon":44},"Simple Logging","\u002Flogging\u002Fsimple-logging","2.logging\u002F1.simple-logging","i-lucide-terminal",{"title":46,"path":47,"stem":48,"icon":49},"Wide Events","\u002Flogging\u002Fwide-events","2.logging\u002F2.wide-events","i-lucide-layers",{"title":51,"path":52,"stem":53,"icon":54},"Structured Errors","\u002Flogging\u002Fstructured-errors","2.logging\u002F3.structured-errors","i-lucide-shield-alert",{"title":56,"path":57,"stem":58,"icon":59},"Client Logging","\u002Flogging\u002Fclient-logging","2.logging\u002F4.client-logging","i-lucide-monitor",{"title":61,"path":62,"stem":63,"icon":64},"AI SDK Integration","\u002Flogging\u002Fai-sdk","2.logging\u002F5.ai-sdk","i-simple-icons-vercel",{"title":66,"path":67,"stem":68,"icon":69},"Better Auth Integration","\u002Flogging\u002Fbetter-auth","2.logging\u002F6.better-auth","i-simple-icons-betterauth",{"title":71,"path":72,"stem":73,"children":74,"page":29},"Core Concepts","\u002Fcore-concepts","3.core-concepts",[75,80,85,90,95,100,105,110],{"title":76,"path":77,"stem":78,"icon":79},"Lifecycle","\u002Fcore-concepts\u002Flifecycle","3.core-concepts\u002F0.lifecycle","i-lucide-arrow-right-left",{"title":81,"path":82,"stem":83,"icon":84},"Configuration","\u002Fcore-concepts\u002Fconfiguration","3.core-concepts\u002F1.configuration","i-lucide-settings",{"title":86,"path":87,"stem":88,"icon":89},"Sampling","\u002Fcore-concepts\u002Fsampling","3.core-concepts\u002F2.sampling","i-lucide-filter",{"title":91,"path":92,"stem":93,"icon":94},"Typed Fields","\u002Fcore-concepts\u002Ftyped-fields","3.core-concepts\u002F3.typed-fields","i-simple-icons-typescript",{"title":96,"path":97,"stem":98,"icon":99},"Best Practices","\u002Fcore-concepts\u002Fbest-practices","3.core-concepts\u002F4.best-practices","i-lucide-shield-check",{"title":101,"path":102,"stem":103,"icon":104},"Performance","\u002Fcore-concepts\u002Fperformance","3.core-concepts\u002F5.performance","i-lucide-gauge",{"title":106,"path":107,"stem":108,"icon":109},"Vite Plugin","\u002Fcore-concepts\u002Fvite-plugin","3.core-concepts\u002F6.vite-plugin","i-custom-vite",{"title":111,"path":112,"stem":113,"icon":114},"Auto-Redaction","\u002Fcore-concepts\u002Fredaction","3.core-concepts\u002F7.redaction","i-lucide-eye-off",{"title":116,"path":117,"stem":118,"children":119,"page":29},"Frameworks","\u002Fframeworks","4.frameworks",[120,124,129,134,139,144,149,154,159,164,169,174,179,184,188,193,198],{"title":36,"path":121,"stem":122,"icon":123},"\u002Fframeworks\u002Foverview","4.frameworks\u002F00.overview","i-lucide-layout-grid",{"title":125,"path":126,"stem":127,"icon":128},"Nuxt","\u002Fframeworks\u002Fnuxt","4.frameworks\u002F01.nuxt","i-simple-icons-nuxtdotjs",{"title":130,"path":131,"stem":132,"icon":133},"Next.js","\u002Fframeworks\u002Fnextjs","4.frameworks\u002F02.nextjs","i-simple-icons-nextdotjs",{"title":135,"path":136,"stem":137,"icon":138},"SvelteKit","\u002Fframeworks\u002Fsveltekit","4.frameworks\u002F03.sveltekit","i-simple-icons-svelte",{"title":140,"path":141,"stem":142,"icon":143},"Nitro","\u002Fframeworks\u002Fnitro","4.frameworks\u002F04.nitro","i-custom-nitro",{"title":145,"path":146,"stem":147,"icon":148},"TanStack Start","\u002Fframeworks\u002Ftanstack-start","4.frameworks\u002F05.tanstack-start","i-custom-tanstack",{"title":150,"path":151,"stem":152,"icon":153},"NestJS","\u002Fframeworks\u002Fnestjs","4.frameworks\u002F06.nestjs","i-simple-icons-nestjs",{"title":155,"path":156,"stem":157,"icon":158},"Express","\u002Fframeworks\u002Fexpress","4.frameworks\u002F07.express","i-simple-icons-express",{"title":160,"path":161,"stem":162,"icon":163},"Hono","\u002Fframeworks\u002Fhono","4.frameworks\u002F08.hono","i-simple-icons-hono",{"title":165,"path":166,"stem":167,"icon":168},"Fastify","\u002Fframeworks\u002Ffastify","4.frameworks\u002F09.fastify","i-simple-icons-fastify",{"title":170,"path":171,"stem":172,"icon":173},"Elysia","\u002Fframeworks\u002Felysia","4.frameworks\u002F10.elysia","i-custom-elysia",{"title":175,"path":176,"stem":177,"icon":178},"React Router","\u002Fframeworks\u002Freact-router","4.frameworks\u002F11.react-router","i-custom-reactrouter",{"title":180,"path":181,"stem":182,"icon":183},"Cloudflare Workers","\u002Fframeworks\u002Fcloudflare-workers","4.frameworks\u002F12.cloudflare-workers","i-simple-icons-cloudflare",{"title":185,"path":186,"stem":187,"icon":94},"Standalone","\u002Fframeworks\u002Fstandalone","4.frameworks\u002F13.standalone",{"title":189,"path":190,"stem":191,"icon":192},"Astro","\u002Fframeworks\u002Fastro","4.frameworks\u002F14.astro","i-simple-icons-astro",{"title":194,"path":195,"stem":196,"icon":197},"Custom Integration","\u002Fframeworks\u002Fcustom-integration","4.frameworks\u002F15.custom-integration","i-lucide-puzzle",{"title":199,"path":200,"stem":201,"icon":202},"AWS Lambda","\u002Fframeworks\u002Faws-lambda","4.frameworks\u002F16.aws-lambda","i-custom-lambda",{"title":204,"path":205,"stem":206,"children":207,"page":29},"Adapters","\u002Fadapters","5.adapters",[208,212,217,222,227,232,237,242,247,252,257,262],{"title":36,"path":209,"stem":210,"icon":211},"\u002Fadapters\u002Foverview","5.adapters\u002F1.overview","i-custom-plug",{"title":213,"path":214,"stem":215,"icon":216},"Custom Adapters","\u002Fadapters\u002Fcustom","5.adapters\u002F10.custom","i-lucide-code",{"title":218,"path":219,"stem":220,"icon":221},"Pipeline","\u002Fadapters\u002Fpipeline","5.adapters\u002F11.pipeline","i-lucide-workflow",{"title":223,"path":224,"stem":225,"icon":226},"HTTP","\u002Fadapters\u002Fhttp","5.adapters\u002F12.http","i-lucide-globe",{"title":228,"path":229,"stem":230,"icon":231},"Axiom","\u002Fadapters\u002Faxiom","5.adapters\u002F2.axiom","i-custom-axiom",{"title":233,"path":234,"stem":235,"icon":236},"OTLP","\u002Fadapters\u002Fotlp","5.adapters\u002F3.otlp","i-simple-icons-opentelemetry",{"title":238,"path":239,"stem":240,"icon":241},"PostHog","\u002Fadapters\u002Fposthog","5.adapters\u002F4.posthog","i-simple-icons-posthog",{"title":243,"path":244,"stem":245,"icon":246},"Sentry","\u002Fadapters\u002Fsentry","5.adapters\u002F5.sentry","i-simple-icons-sentry",{"title":248,"path":249,"stem":250,"icon":251},"Better Stack","\u002Fadapters\u002Fbetter-stack","5.adapters\u002F6.better-stack","i-simple-icons-betterstack",{"title":253,"path":254,"stem":255,"icon":256},"File System","\u002Fadapters\u002Ffs","5.adapters\u002F7.fs","i-lucide-hard-drive",{"title":258,"path":259,"stem":260,"icon":261},"Datadog","\u002Fadapters\u002Fdatadog","5.adapters\u002F8.datadog","i-simple-icons-datadog",{"title":263,"path":264,"stem":265,"icon":266},"HyperDX","\u002Fadapters\u002Fhyperdx","5.adapters\u002F9.hyperdx","i-custom-hyperdx",{"title":268,"path":269,"stem":270,"children":271,"page":29},"Enrichers","\u002Fenrichers","6.enrichers",[272,275,279],{"title":36,"path":273,"stem":274,"icon":28},"\u002Fenrichers\u002Foverview","6.enrichers\u002F1.overview",{"title":276,"path":277,"stem":278,"icon":197},"Built-in","\u002Fenrichers\u002Fbuilt-in","6.enrichers\u002F2.built-in",{"title":280,"path":281,"stem":282,"icon":216},"Custom","\u002Fenrichers\u002Fcustom","6.enrichers\u002F3.custom",{"title":284,"path":285,"stem":286,"children":287,"page":29},"NuxtHub","\u002Fnuxthub","7.nuxthub",[288,292],{"title":36,"path":289,"stem":290,"icon":291},"\u002Fnuxthub\u002Foverview","7.nuxthub\u002F1.overview","i-lucide-database",{"title":293,"path":294,"stem":295,"icon":296},"Retention","\u002Fnuxthub\u002Fretention","7.nuxthub\u002F2.retention","i-lucide-clock",{"id":298,"title":101,"body":299,"description":1907,"extension":1908,"links":1909,"meta":1914,"navigation":1915,"path":102,"seo":1916,"stem":103,"__hash__":1917},"docs\u002F3.core-concepts\u002F5.performance.md",{"type":300,"value":301,"toc":1882},"minimark",[302,319,324,332,337,500,519,527,531,534,1049,1052,1056,1059,1077,1091,1101,1107,1113,1117,1120,1190,1196,1200,1203,1264,1281,1285,1288,1355,1362,1420,1427,1483,1495,1499,1546,1549,1584,1586,1661,1665,1715,1719,1723,1742,1745,1784,1788,1791,1810,1814,1878],[303,304,305,306,310,311,318],"p",{},"evlog adds ",[307,308,309],"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 ",[312,313,317],"a",{"href":314,"rel":315},"https:\u002F\u002Fcodspeed.io",[316],"nofollow","CodSpeed",".",[320,321,323],"h2",{"id":322},"evlog-vs-alternatives","evlog vs alternatives",[303,325,326,327,331],{},"All benchmarks run with JSON output to no-op destinations. pino writes to ",[328,329,330],"code",{},"\u002Fdev\u002Fnull"," (sync), winston writes to a no-op stream, consola uses a no-op reporter, evlog uses silent mode.",[333,334,336],"h3",{"id":335},"results","Results",[338,339,340,363],"table",{},[341,342,343],"thead",{},[344,345,346,350,354,357,360],"tr",{},[347,348,349],"th",{},"Scenario",[347,351,353],{"align":352},"right","evlog",[347,355,356],{"align":352},"pino",[347,358,359],{"align":352},"consola",[347,361,362],{"align":352},"winston",[364,365,366,386,405,424,443,462,481],"tbody",{},[344,367,368,372,375,378,383],{},[369,370,371],"td",{},"Simple string log",[369,373,374],{"align":352},"1.96M ops\u002Fs",[369,376,377],{"align":352},"1.06M",[369,379,380],{"align":352},[307,381,382],{},"2.67M",[369,384,385],{"align":352},"977.6K",[344,387,388,391,394,397,402],{},[369,389,390],{},"Structured (5 fields)",[369,392,393],{"align":352},"1.74M ops\u002Fs",[369,395,396],{"align":352},"705.6K",[369,398,399],{"align":352},[307,400,401],{},"1.75M",[369,403,404],{"align":352},"440.6K",[344,406,407,410,415,418,421],{},[369,408,409],{},"Deep nested log",[369,411,412,414],{"align":352},[307,413,401],{}," ops\u002Fs",[369,416,417],{"align":352},"507.8K",[369,419,420],{"align":352},"1.04M",[369,422,423],{"align":352},"202.5K",[344,425,426,429,434,437,440],{},[369,427,428],{},"Child \u002F scoped logger",[369,430,431,414],{"align":352},[307,432,433],{},"1.85M",[369,435,436],{"align":352},"871.0K",[369,438,439],{"align":352},"272.2K",[369,441,442],{"align":352},"568.5K",[344,444,445,448,453,456,459],{},[369,446,447],{},"Wide event lifecycle",[369,449,450,414],{"align":352},[307,451,452],{},"1.68M",[369,454,455],{"align":352},"209.0K",[369,457,458],{"align":352},"—",[369,460,461],{"align":352},"114.6K",[344,463,464,467,470,473,478],{},[369,465,466],{},"Burst (100 logs)",[369,468,469],{"align":352},"19.1K ops\u002Fs",[369,471,472],{"align":352},"10.0K",[369,474,475],{"align":352},[307,476,477],{},"40.8K",[369,479,480],{"align":352},"7.6K",[344,482,483,486,491,494,497],{},[369,484,485],{},"Logger creation",[369,487,488,414],{"align":352},[307,489,490],{},"20.52M",[369,492,493],{"align":352},"7.36M",[369,495,496],{"align":352},"299.3K",[369,498,499],{"align":352},"5.43M",[303,501,502,503,506,507,510,511,514,515,518],{},"evlog wins ",[307,504,505],{},"4 out of 7"," head-to-head comparisons, and the wins that matter most are decisive: ",[307,508,509],{},"8x faster"," than pino in the wide event lifecycle, ",[307,512,513],{},"2.8x faster"," logger creation, and ",[307,516,517],{},"3.5x 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.",[520,521,523,526],"callout",{"color":522,"icon":13},"info",[307,524,525],{},"Why this matters",": in the wide event lifecycle (the real-world pattern), evlog is 8x faster than pino and 14.7x faster than winston while sending 75% less data to your log drain and giving you one queryable event instead of 4 disconnected lines.",[333,528,530],{"id":529},"what-is-the-wide-event-lifecycle","What is the \"wide event lifecycle\"?",[303,532,533],{},"This benchmark simulates a real API request:",[535,536,537,803],"code-group",{},[538,539,545],"pre",{"className":540,"code":541,"filename":542,"language":543,"meta":544,"style":544},"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","",[328,546,547,626,681,726,777],{"__ignoreMap":544},[548,549,552,556,560,564,568,571,574,578,581,584,588,591,594,597,599,601,604,606,608,611,613,615,618,620,623],"span",{"class":550,"line":551},"line",1,[548,553,555],{"class":554},"spNyl","const",[548,557,559],{"class":558},"sTEyZ"," log ",[548,561,563],{"class":562},"sMK4o","=",[548,565,567],{"class":566},"s2Zo4"," createLogger",[548,569,570],{"class":558},"(",[548,572,573],{"class":562},"{",[548,575,577],{"class":576},"swJcz"," method",[548,579,580],{"class":562},":",[548,582,583],{"class":562}," '",[548,585,587],{"class":586},"sfazB","POST",[548,589,590],{"class":562},"'",[548,592,593],{"class":562},",",[548,595,596],{"class":576}," path",[548,598,580],{"class":562},[548,600,583],{"class":562},[548,602,603],{"class":586},"\u002Fapi\u002Fcheckout",[548,605,590],{"class":562},[548,607,593],{"class":562},[548,609,610],{"class":576}," requestId",[548,612,580],{"class":562},[548,614,583],{"class":562},[548,616,617],{"class":586},"req_abc",[548,619,590],{"class":562},[548,621,622],{"class":562}," }",[548,624,625],{"class":558},")\n",[548,627,629,632,634,637,639,641,644,646,649,652,654,656,659,661,663,666,668,670,673,675,677,679],{"class":550,"line":628},2,[548,630,631],{"class":558},"log",[548,633,318],{"class":562},[548,635,636],{"class":566},"set",[548,638,570],{"class":558},[548,640,573],{"class":562},[548,642,643],{"class":576}," user",[548,645,580],{"class":562},[548,647,648],{"class":562}," {",[548,650,651],{"class":576}," id",[548,653,580],{"class":562},[548,655,583],{"class":562},[548,657,658],{"class":586},"usr_123",[548,660,590],{"class":562},[548,662,593],{"class":562},[548,664,665],{"class":576}," plan",[548,667,580],{"class":562},[548,669,583],{"class":562},[548,671,672],{"class":586},"pro",[548,674,590],{"class":562},[548,676,622],{"class":562},[548,678,622],{"class":562},[548,680,625],{"class":558},[548,682,684,686,688,690,692,694,697,699,701,704,706,710,712,715,717,720,722,724],{"class":550,"line":683},3,[548,685,631],{"class":558},[548,687,318],{"class":562},[548,689,636],{"class":566},[548,691,570],{"class":558},[548,693,573],{"class":562},[548,695,696],{"class":576}," cart",[548,698,580],{"class":562},[548,700,648],{"class":562},[548,702,703],{"class":576}," items",[548,705,580],{"class":562},[548,707,709],{"class":708},"sbssI"," 3",[548,711,593],{"class":562},[548,713,714],{"class":576}," total",[548,716,580],{"class":562},[548,718,719],{"class":708}," 9999",[548,721,622],{"class":562},[548,723,622],{"class":562},[548,725,625],{"class":558},[548,727,729,731,733,735,737,739,742,744,746,748,750,752,755,757,759,762,764,766,769,771,773,775],{"class":550,"line":728},4,[548,730,631],{"class":558},[548,732,318],{"class":562},[548,734,636],{"class":566},[548,736,570],{"class":558},[548,738,573],{"class":562},[548,740,741],{"class":576}," payment",[548,743,580],{"class":562},[548,745,648],{"class":562},[548,747,577],{"class":576},[548,749,580],{"class":562},[548,751,583],{"class":562},[548,753,754],{"class":586},"card",[548,756,590],{"class":562},[548,758,593],{"class":562},[548,760,761],{"class":576}," last4",[548,763,580],{"class":562},[548,765,583],{"class":562},[548,767,768],{"class":586},"4242",[548,770,590],{"class":562},[548,772,622],{"class":562},[548,774,622],{"class":562},[548,776,625],{"class":558},[548,778,780,782,784,787,789,791,794,796,799,801],{"class":550,"line":779},5,[548,781,631],{"class":558},[548,783,318],{"class":562},[548,785,786],{"class":566},"emit",[548,788,570],{"class":558},[548,790,573],{"class":562},[548,792,793],{"class":576}," status",[548,795,580],{"class":562},[548,797,798],{"class":708}," 200",[548,800,622],{"class":562},[548,802,625],{"class":558},[538,804,807],{"className":540,"code":805,"filename":806,"language":543,"meta":544,"style":544},"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)",[328,808,809,868,922,967,1020],{"__ignoreMap":544},[548,810,811,813,816,818,821,823,826,828,830,832,834,836,838,840,842,844,846,848,850,852,854,856,858,860,862,864,866],{"class":550,"line":551},[548,812,555],{"class":554},[548,814,815],{"class":558}," child ",[548,817,563],{"class":562},[548,819,820],{"class":558}," pinoLogger",[548,822,318],{"class":562},[548,824,825],{"class":566},"child",[548,827,570],{"class":558},[548,829,573],{"class":562},[548,831,577],{"class":576},[548,833,580],{"class":562},[548,835,583],{"class":562},[548,837,587],{"class":586},[548,839,590],{"class":562},[548,841,593],{"class":562},[548,843,596],{"class":576},[548,845,580],{"class":562},[548,847,583],{"class":562},[548,849,603],{"class":586},[548,851,590],{"class":562},[548,853,593],{"class":562},[548,855,610],{"class":576},[548,857,580],{"class":562},[548,859,583],{"class":562},[548,861,617],{"class":586},[548,863,590],{"class":562},[548,865,622],{"class":562},[548,867,625],{"class":558},[548,869,870,872,874,876,878,880,882,884,886,888,890,892,894,896,898,900,902,904,906,908,910,913,915,918,920],{"class":550,"line":628},[548,871,825],{"class":558},[548,873,318],{"class":562},[548,875,522],{"class":566},[548,877,570],{"class":558},[548,879,573],{"class":562},[548,881,643],{"class":576},[548,883,580],{"class":562},[548,885,648],{"class":562},[548,887,651],{"class":576},[548,889,580],{"class":562},[548,891,583],{"class":562},[548,893,658],{"class":586},[548,895,590],{"class":562},[548,897,593],{"class":562},[548,899,665],{"class":576},[548,901,580],{"class":562},[548,903,583],{"class":562},[548,905,672],{"class":586},[548,907,590],{"class":562},[548,909,622],{"class":562},[548,911,912],{"class":562}," },",[548,914,583],{"class":562},[548,916,917],{"class":586},"user context",[548,919,590],{"class":562},[548,921,625],{"class":558},[548,923,924,926,928,930,932,934,936,938,940,942,944,946,948,950,952,954,956,958,960,963,965],{"class":550,"line":683},[548,925,825],{"class":558},[548,927,318],{"class":562},[548,929,522],{"class":566},[548,931,570],{"class":558},[548,933,573],{"class":562},[548,935,696],{"class":576},[548,937,580],{"class":562},[548,939,648],{"class":562},[548,941,703],{"class":576},[548,943,580],{"class":562},[548,945,709],{"class":708},[548,947,593],{"class":562},[548,949,714],{"class":576},[548,951,580],{"class":562},[548,953,719],{"class":708},[548,955,622],{"class":562},[548,957,912],{"class":562},[548,959,583],{"class":562},[548,961,962],{"class":586},"cart context",[548,964,590],{"class":562},[548,966,625],{"class":558},[548,968,969,971,973,975,977,979,981,983,985,987,989,991,993,995,997,999,1001,1003,1005,1007,1009,1011,1013,1016,1018],{"class":550,"line":728},[548,970,825],{"class":558},[548,972,318],{"class":562},[548,974,522],{"class":566},[548,976,570],{"class":558},[548,978,573],{"class":562},[548,980,741],{"class":576},[548,982,580],{"class":562},[548,984,648],{"class":562},[548,986,577],{"class":576},[548,988,580],{"class":562},[548,990,583],{"class":562},[548,992,754],{"class":586},[548,994,590],{"class":562},[548,996,593],{"class":562},[548,998,761],{"class":576},[548,1000,580],{"class":562},[548,1002,583],{"class":562},[548,1004,768],{"class":586},[548,1006,590],{"class":562},[548,1008,622],{"class":562},[548,1010,912],{"class":562},[548,1012,583],{"class":562},[548,1014,1015],{"class":586},"payment context",[548,1017,590],{"class":562},[548,1019,625],{"class":558},[548,1021,1022,1024,1026,1028,1030,1032,1034,1036,1038,1040,1042,1045,1047],{"class":550,"line":779},[548,1023,825],{"class":558},[548,1025,318],{"class":562},[548,1027,522],{"class":566},[548,1029,570],{"class":558},[548,1031,573],{"class":562},[548,1033,793],{"class":576},[548,1035,580],{"class":562},[548,1037,798],{"class":708},[548,1039,912],{"class":562},[548,1041,583],{"class":562},[548,1043,1044],{"class":586},"request complete",[548,1046,590],{"class":562},[548,1048,625],{"class":558},[303,1050,1051],{},"Same CPU cost, but evlog gives you everything in one place.",[320,1053,1055],{"id":1054},"why-is-evlog-faster","Why is evlog faster?",[303,1057,1058],{},"The numbers above aren't magic, they come from deliberate architectural choices:",[303,1060,1061,1064,1065,1068,1069,1072,1073,1076],{},[307,1062,1063],{},"In-place mutations, not copies."," ",[328,1066,1067],{},"log.set()"," writes directly into the context object via a recursive ",[328,1070,1071],{},"mergeInto"," function. Other loggers clone objects on every call (object spread, ",[328,1074,1075],{},"Object.assign","). evlog never allocates intermediate objects during context accumulation.",[303,1078,1079,1082,1083,1086,1087,1090],{},[307,1080,1081],{},"No serialization until drain."," Context stays as plain JavaScript objects throughout the request lifecycle. ",[328,1084,1085],{},"JSON.stringify"," runs exactly once, at emit time. Traditional loggers serialize on every ",[328,1088,1089],{},".info()"," call, that's 4x serialization for 4 log lines.",[303,1092,1093,1096,1097,1100],{},[307,1094,1095],{},"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 ",[328,1098,1099],{},"Date"," instance used for ISO timestamps is reused across calls.",[303,1102,1103,1106],{},[307,1104,1105],{},"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.",[303,1108,1109,1112],{},[307,1110,1111],{},"RegExp caching."," Glob patterns (used in sampling and route matching) are compiled once and cached. Repeated evaluations hit the cache instead of recompiling.",[320,1114,1116],{"id":1115},"real-world-overhead","Real-world overhead",[303,1118,1119],{},"For a typical API request:",[338,1121,1122,1132],{},[341,1123,1124],{},[344,1125,1126,1129],{},[347,1127,1128],{},"Component",[347,1130,1131],{"align":352},"Cost",[364,1133,1134,1141,1153,1163,1170,1178],{},[344,1135,1136,1138],{},[369,1137,485],{},[369,1139,1140],{"align":352},"49ns",[344,1142,1143,1150],{},[369,1144,1145,1146,1149],{},"3x ",[328,1147,1148],{},"set()"," calls",[369,1151,1152],{"align":352},"63ns",[344,1154,1155,1160],{},[369,1156,1157],{},[328,1158,1159],{},"emit()",[369,1161,1162],{"align":352},"570ns",[344,1164,1165,1167],{},[369,1166,86],{},[369,1168,1169],{"align":352},"23ns",[344,1171,1172,1175],{},[369,1173,1174],{},"Enricher pipeline",[369,1176,1177],{"align":352},"2.05µs",[344,1179,1180,1185],{},[369,1181,1182],{},[307,1183,1184],{},"Total",[369,1186,1187],{"align":352},[307,1188,1189],{},"~2.8µs",[303,1191,1192,1193,318],{},"For context, a database query takes 1-50ms, an HTTP call takes 10-500ms. evlog's overhead is ",[307,1194,1195],{},"invisible",[320,1197,1199],{"id":1198},"bundle-size","Bundle size",[303,1201,1202],{},"Every entry point is tree-shakeable. You only pay for what you import.",[338,1204,1205,1215],{},[341,1206,1207],{},[344,1208,1209,1212],{},[347,1210,1211],{},"Entry",[347,1213,1214],{"align":352},"Gzip",[364,1216,1217,1225,1233,1241,1249,1257],{},[344,1218,1219,1222],{},[369,1220,1221],{},"logger",[369,1223,1224],{"align":352},"3.78 kB",[344,1226,1227,1230],{},[369,1228,1229],{},"utils",[369,1231,1232],{"align":352},"1.41 kB",[344,1234,1235,1238],{},[369,1236,1237],{},"error",[369,1239,1240],{"align":352},"1.21 kB",[344,1242,1243,1246],{},[369,1244,1245],{},"enrichers",[369,1247,1248],{"align":352},"1.92 kB",[344,1250,1251,1254],{},[369,1252,1253],{},"pipeline",[369,1255,1256],{"align":352},"1.35 kB",[344,1258,1259,1262],{},[369,1260,1261],{},"http",[369,1263,1240],{"align":352},[303,1265,1266,1267,1269,1270,1272,1273,1276,1277,1280],{},"A typical Nuxt setup loads ",[328,1268,1221],{}," + ",[328,1271,1229],{},", about ",[307,1274,1275],{},"5.2 kB gzip",". Bundle size is tracked on every PR and compared against the ",[328,1278,1279],{},"main"," baseline.",[320,1282,1284],{"id":1283},"detailed-benchmarks","Detailed benchmarks",[333,1286,485],{"id":1287},"logger-creation",[338,1289,1290,1303],{},[341,1291,1292],{},[344,1293,1294,1297,1300],{},[347,1295,1296],{},"Operation",[347,1298,1299],{"align":352},"ops\u002Fsec",[347,1301,1302],{"align":352},"Mean",[364,1304,1305,1319,1331,1343],{},[344,1306,1307,1313,1316],{},[369,1308,1309,1312],{},[328,1310,1311],{},"createLogger()"," (no context)",[369,1314,1315],{"align":352},"19.35M",[369,1317,1318],{"align":352},"52ns",[344,1320,1321,1326,1329],{},[369,1322,1323,1325],{},[328,1324,1311],{}," (shallow context)",[369,1327,1328],{"align":352},"20.38M",[369,1330,1140],{"align":352},[344,1332,1333,1338,1341],{},[369,1334,1335,1337],{},[328,1336,1311],{}," (nested context)",[369,1339,1340],{"align":352},"19.10M",[369,1342,1318],{"align":352},[344,1344,1345,1350,1353],{},[369,1346,1347],{},[328,1348,1349],{},"createRequestLogger()",[369,1351,1352],{"align":352},"19.27M",[369,1354,1318],{"align":352},[333,1356,1358,1359,1361],{"id":1357},"context-accumulation-logset","Context accumulation (",[328,1360,1067],{},")",[338,1363,1364,1374],{},[341,1365,1366],{},[344,1367,1368,1370,1372],{},[347,1369,1296],{},[347,1371,1299],{"align":352},[347,1373,1302],{"align":352},[364,1375,1376,1387,1398,1409],{},[344,1377,1378,1381,1384],{},[369,1379,1380],{},"Shallow merge (3 fields)",[369,1382,1383],{"align":352},"9.54M",[369,1385,1386],{"align":352},"105ns",[344,1388,1389,1392,1395],{},[369,1390,1391],{},"Shallow merge (10 fields)",[369,1393,1394],{"align":352},"4.78M",[369,1396,1397],{"align":352},"209ns",[344,1399,1400,1403,1406],{},[369,1401,1402],{},"Deep nested merge",[369,1404,1405],{"align":352},"8.40M",[369,1407,1408],{"align":352},"119ns",[344,1410,1411,1414,1417],{},[369,1412,1413],{},"4 sequential calls",[369,1415,1416],{"align":352},"7.53M",[369,1418,1419],{"align":352},"133ns",[333,1421,1423,1424,1361],{"id":1422},"event-emission-logemit","Event emission (",[328,1425,1426],{},"log.emit()",[338,1428,1429,1439],{},[341,1430,1431],{},[344,1432,1433,1435,1437],{},[347,1434,1296],{},[347,1436,1299],{"align":352},[347,1438,1302],{"align":352},[364,1440,1441,1450,1461,1472],{},[344,1442,1443,1446,1448],{},[369,1444,1445],{},"Emit minimal event",[369,1447,401],{"align":352},[369,1449,1162],{"align":352},[344,1451,1452,1455,1458],{},[369,1453,1454],{},"Emit with context",[369,1456,1457],{"align":352},"1.76M",[369,1459,1460],{"align":352},"569ns",[344,1462,1463,1466,1469],{},[369,1464,1465],{},"Full lifecycle (create + 3 sets + emit)",[369,1467,1468],{"align":352},"1.69M",[369,1470,1471],{"align":352},"592ns",[344,1473,1474,1477,1480],{},[369,1475,1476],{},"Emit with error",[369,1478,1479],{"align":352},"66.1K",[369,1481,1482],{"align":352},"15.13µs",[520,1484,1487,1490,1491,1494],{"color":1485,"icon":1486},"amber","i-lucide-triangle-alert",[328,1488,1489],{},"emit with error"," is slower because ",[328,1492,1493],{},"Error.captureStackTrace()"," is an expensive V8 operation (~15µs). This only triggers when errors are thrown.",[333,1496,1498],{"id":1497},"payload-scaling","Payload scaling",[338,1500,1501,1512],{},[341,1502,1503],{},[344,1504,1505,1508,1510],{},[347,1506,1507],{},"Payload",[347,1509,1299],{"align":352},[347,1511,1302],{"align":352},[364,1513,1514,1524,1535],{},[344,1515,1516,1519,1521],{},[369,1517,1518],{},"Small (2 fields)",[369,1520,1457],{"align":352},[369,1522,1523],{"align":352},"567ns",[344,1525,1526,1529,1532],{},[369,1527,1528],{},"Medium (50 fields)",[369,1530,1531],{"align":352},"555.5K",[369,1533,1534],{"align":352},"1.80µs",[344,1536,1537,1540,1543],{},[369,1538,1539],{},"Large (200 nested fields)",[369,1541,1542],{"align":352},"115.7K",[369,1544,1545],{"align":352},"8.65µs",[333,1547,86],{"id":1548},"sampling",[338,1550,1551,1561],{},[341,1552,1553],{},[344,1554,1555,1557,1559],{},[347,1556,1296],{},[347,1558,1299],{"align":352},[347,1560,1302],{"align":352},[364,1562,1563,1573],{},[344,1564,1565,1568,1571],{},[369,1566,1567],{},"Tail sampling (shouldKeep)",[369,1569,1570],{"align":352},"43.76M",[369,1572,1169],{"align":352},[344,1574,1575,1578,1581],{},[369,1576,1577],{},"Full emit with head + tail",[369,1579,1580],{"align":352},"7.57M",[369,1582,1583],{"align":352},"132ns",[333,1585,268],{"id":1245},[338,1587,1588,1599],{},[341,1589,1590],{},[344,1591,1592,1595,1597],{},[347,1593,1594],{},"Enricher",[347,1596,1299],{"align":352},[347,1598,1302],{"align":352},[364,1600,1601,1612,1623,1634,1645],{},[344,1602,1603,1606,1609],{},[369,1604,1605],{},"User Agent (Chrome)",[369,1607,1608],{"align":352},"2.57M",[369,1610,1611],{"align":352},"389ns",[344,1613,1614,1617,1620],{},[369,1615,1616],{},"Geo (Vercel)",[369,1618,1619],{"align":352},"5.32M",[369,1621,1622],{"align":352},"188ns",[344,1624,1625,1628,1631],{},[369,1626,1627],{},"Request Size",[369,1629,1630],{"align":352},"24.16M",[369,1632,1633],{"align":352},"41ns",[344,1635,1636,1639,1642],{},[369,1637,1638],{},"Trace Context",[369,1640,1641],{"align":352},"4.86M",[369,1643,1644],{"align":352},"206ns",[344,1646,1647,1652,1657],{},[369,1648,1649],{},[307,1650,1651],{},"All combined",[369,1653,1654],{"align":352},[307,1655,1656],{},"487.2K",[369,1658,1659],{"align":352},[307,1660,1177],{},[333,1662,1664],{"id":1663},"error-handling","Error handling",[338,1666,1667,1677],{},[341,1668,1669],{},[344,1670,1671,1673,1675],{},[347,1672,1296],{},[347,1674,1299],{"align":352},[347,1676,1302],{"align":352},[364,1678,1679,1692,1704],{},[344,1680,1681,1686,1689],{},[369,1682,1683],{},[328,1684,1685],{},"createError()",[369,1687,1688],{"align":352},"226.9K",[369,1690,1691],{"align":352},"4.41µs",[344,1693,1694,1699,1702],{},[369,1695,1696],{},[328,1697,1698],{},"parseError()",[369,1700,1701],{"align":352},"43.92M",[369,1703,1169],{"align":352},[344,1705,1706,1709,1712],{},[369,1707,1708],{},"Round-trip (create + parse)",[369,1710,1711],{"align":352},"227.6K",[369,1713,1714],{"align":352},"4.39µs",[320,1716,1718],{"id":1717},"methodology-trust","Methodology & trust",[333,1720,1722],{"id":1721},"can-you-trust-these-numbers","Can you trust these numbers?",[303,1724,1725,1726,1729,1730,1733,1734,1741],{},"Every benchmark in this page is ",[307,1727,1728],{},"open source"," and ",[307,1731,1732],{},"reproducible",". The benchmark files live in ",[312,1735,1738],{"href":1736,"rel":1737},"https:\u002F\u002Fgithub.com\u002Fhugorcd\u002Fevlog\u002Ftree\u002Fmain\u002Fpackages\u002Fevlog\u002Fbench",[316],[328,1739,1740],{},"packages\u002Fevlog\u002Fbench\u002F",". You can read the exact code, run it on your machine, and verify the results.",[303,1743,1744],{},"All libraries are tested under the same conditions:",[1746,1747,1748,1755,1761,1778],"ul",{},[1749,1750,1751,1754],"li",{},[307,1752,1753],{},"Same output mode",": JSON to a no-op destination (no disk or network I\u002FO measured)",[1749,1756,1757,1760],{},[307,1758,1759],{},"Same warmup",": each benchmark runs for 500ms after JIT stabilization",[1749,1762,1763,1766,1767,1772,1773],{},[307,1764,1765],{},"Same tooling",": ",[312,1768,1771],{"href":1769,"rel":1770},"https:\u002F\u002Fvitest.dev\u002Fguide\u002Ffeatures#benchmarking",[316],"Vitest bench"," powered by ",[312,1774,1777],{"href":1775,"rel":1776},"https:\u002F\u002Fgithub.com\u002Ftinylibs\u002Ftinybench",[316],"tinybench",[1749,1779,1780,1783],{},[307,1781,1782],{},"Same machine",": when comparing libraries, all benchmarks run in the same process on the same hardware",[333,1785,1787],{"id":1786},"ci-regression-tracking","CI regression tracking",[303,1789,1790],{},"Performance regressions are tracked on every pull request via two systems:",[1746,1792,1793,1801],{},[1749,1794,1795,1800],{},[307,1796,1797],{},[312,1798,317],{"href":314,"rel":1799},[316]," 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.",[1749,1802,1803,1806,1807,1809],{},[307,1804,1805],{},"Bundle size comparison"," measures all entry points against the ",[328,1808,1279],{}," baseline and posts a size delta report as a PR comment.",[333,1811,1813],{"id":1812},"run-it-yourself","Run it yourself",[538,1815,1820],{"className":1816,"code":1817,"filename":1818,"language":1819,"meta":544,"style":544},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","cd packages\u002Fevlog\n\nbun run bench                          # all benchmarks\nbunx vitest bench bench\u002Fcomparison\u002F    # vs alternatives only\nbun bench\u002Fscripts\u002Fsize.ts              # bundle size\n","Terminal","bash",[328,1821,1822,1830,1836,1852,1868],{"__ignoreMap":544},[548,1823,1824,1827],{"class":550,"line":551},[548,1825,1826],{"class":566},"cd",[548,1828,1829],{"class":586}," packages\u002Fevlog\n",[548,1831,1832],{"class":550,"line":628},[548,1833,1835],{"emptyLinePlaceholder":1834},true,"\n",[548,1837,1838,1842,1845,1848],{"class":550,"line":683},[548,1839,1841],{"class":1840},"sBMFI","bun",[548,1843,1844],{"class":586}," run",[548,1846,1847],{"class":586}," bench",[548,1849,1851],{"class":1850},"sHwdD","                          # all benchmarks\n",[548,1853,1854,1857,1860,1862,1865],{"class":550,"line":728},[548,1855,1856],{"class":1840},"bunx",[548,1858,1859],{"class":586}," vitest",[548,1861,1847],{"class":586},[548,1863,1864],{"class":586}," bench\u002Fcomparison\u002F",[548,1866,1867],{"class":1850},"    # vs alternatives only\n",[548,1869,1870,1872,1875],{"class":550,"line":779},[548,1871,1841],{"class":1840},[548,1873,1874],{"class":586}," bench\u002Fscripts\u002Fsize.ts",[548,1876,1877],{"class":1850},"              # bundle size\n",[1879,1880,1881],"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":544,"searchDepth":628,"depth":628,"links":1883},[1884,1888,1889,1890,1891,1902],{"id":322,"depth":628,"text":323,"children":1885},[1886,1887],{"id":335,"depth":683,"text":336},{"id":529,"depth":683,"text":530},{"id":1054,"depth":628,"text":1055},{"id":1115,"depth":628,"text":1116},{"id":1198,"depth":628,"text":1199},{"id":1283,"depth":628,"text":1284,"children":1892},[1893,1894,1896,1898,1899,1900,1901],{"id":1287,"depth":683,"text":485},{"id":1357,"depth":683,"text":1895},"Context accumulation (log.set())",{"id":1422,"depth":683,"text":1897},"Event emission (log.emit())",{"id":1497,"depth":683,"text":1498},{"id":1548,"depth":683,"text":86},{"id":1245,"depth":683,"text":268},{"id":1663,"depth":683,"text":1664},{"id":1717,"depth":628,"text":1718,"children":1903},[1904,1905,1906],{"id":1721,"depth":683,"text":1722},{"id":1786,"depth":683,"text":1787},{"id":1812,"depth":683,"text":1813},"evlog adds ~3µs per request. Faster than pino, consola, and winston in most scenarios while emitting richer, more useful events.","md",[1910,1913],{"label":86,"icon":89,"to":87,"color":1911,"variant":1912},"neutral","subtle",{"label":81,"icon":84,"to":82,"color":1911,"variant":1912},{},{"icon":104},{"title":101,"description":1907},"AN-CV3lEGWmwVfXIKxN1ak8tkQHWOX9bhslakF7-OE4",[1919,1921],{"title":96,"path":97,"stem":98,"description":1920,"icon":99,"children":-1},"Security guidelines, data sanitization, and production tips for evlog. Learn what not to log and how to protect sensitive data.",{"title":106,"path":107,"stem":108,"description":1922,"icon":109,"children":-1},"Build-time optimizations for any Vite-based framework. Auto-init, debug stripping, source location injection, and optional auto-imports.",1776287857064]