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