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