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