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