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