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