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