[{"data":1,"prerenderedAt":1401},["ShallowReactive",2],{"navigation_docs":3,"-core-concepts-performance":243,"-core-concepts-performance-surround":1396},[4,30,110,159,213,229],{"title":5,"path":6,"stem":7,"children":8,"page":29},"Getting Started","\u002Fgetting-started","1.getting-started",[9,14,19,24],{"title":10,"path":11,"stem":12,"icon":13},"Introduction","\u002Fgetting-started\u002Fintroduction","1.getting-started\u002F1.introduction","i-lucide-info",{"title":15,"path":16,"stem":17,"icon":18},"Installation","\u002Fgetting-started\u002Finstallation","1.getting-started\u002F2.installation","i-lucide-download",{"title":20,"path":21,"stem":22,"icon":23},"Quick Start","\u002Fgetting-started\u002Fquick-start","1.getting-started\u002F3.quick-start","i-lucide-zap",{"title":25,"path":26,"stem":27,"icon":28},"Agent Skills","\u002Fgetting-started\u002Fagent-skills","1.getting-started\u002F4.agent-skills","i-lucide-sparkles",false,{"title":31,"path":32,"stem":33,"children":34,"page":29},"Frameworks","\u002Fframeworks","2.frameworks",[35,40,45,50,55,60,65,70,75,80,85,90,95,100,105],{"title":36,"path":37,"stem":38,"icon":39},"Overview","\u002Fframeworks\u002Foverview","2.frameworks\u002F00.overview","i-lucide-layout-grid",{"title":41,"path":42,"stem":43,"icon":44},"Nuxt","\u002Fframeworks\u002Fnuxt","2.frameworks\u002F01.nuxt","i-simple-icons-nuxtdotjs",{"title":46,"path":47,"stem":48,"icon":49},"Next.js","\u002Fframeworks\u002Fnextjs","2.frameworks\u002F02.nextjs","i-simple-icons-nextdotjs",{"title":51,"path":52,"stem":53,"icon":54},"SvelteKit","\u002Fframeworks\u002Fsveltekit","2.frameworks\u002F03.sveltekit","i-simple-icons-svelte",{"title":56,"path":57,"stem":58,"icon":59},"Nitro","\u002Fframeworks\u002Fnitro","2.frameworks\u002F04.nitro","i-custom-nitro",{"title":61,"path":62,"stem":63,"icon":64},"TanStack Start","\u002Fframeworks\u002Ftanstack-start","2.frameworks\u002F05.tanstack-start","i-custom-tanstack",{"title":66,"path":67,"stem":68,"icon":69},"NestJS","\u002Fframeworks\u002Fnestjs","2.frameworks\u002F06.nestjs","i-simple-icons-nestjs",{"title":71,"path":72,"stem":73,"icon":74},"Express","\u002Fframeworks\u002Fexpress","2.frameworks\u002F07.express","i-simple-icons-express",{"title":76,"path":77,"stem":78,"icon":79},"Hono","\u002Fframeworks\u002Fhono","2.frameworks\u002F08.hono","i-simple-icons-hono",{"title":81,"path":82,"stem":83,"icon":84},"Fastify","\u002Fframeworks\u002Ffastify","2.frameworks\u002F09.fastify","i-simple-icons-fastify",{"title":86,"path":87,"stem":88,"icon":89},"Elysia","\u002Fframeworks\u002Felysia","2.frameworks\u002F10.elysia","i-custom-elysia",{"title":91,"path":92,"stem":93,"icon":94},"Cloudflare Workers","\u002Fframeworks\u002Fcloudflare-workers","2.frameworks\u002F11.cloudflare-workers","i-simple-icons-cloudflare",{"title":96,"path":97,"stem":98,"icon":99},"Standalone","\u002Fframeworks\u002Fstandalone","2.frameworks\u002F12.standalone","i-simple-icons-typescript",{"title":101,"path":102,"stem":103,"icon":104},"Astro","\u002Fframeworks\u002Fastro","2.frameworks\u002F13.astro","i-simple-icons-astro",{"title":106,"path":107,"stem":108,"icon":109},"Custom Integration","\u002Fframeworks\u002Fcustom-integration","2.frameworks\u002F14.custom-integration","i-lucide-puzzle",{"title":111,"path":112,"stem":113,"children":114,"page":29},"Core Concepts","\u002Fcore-concepts","3.core-concepts",[115,120,125,130,135,139,144,149,154],{"title":116,"path":117,"stem":118,"icon":119},"Request Lifecycle","\u002Fcore-concepts\u002Flifecycle","3.core-concepts\u002F0.lifecycle","i-lucide-arrow-right-left",{"title":121,"path":122,"stem":123,"icon":124},"Wide Events","\u002Fcore-concepts\u002Fwide-events","3.core-concepts\u002F1.wide-events","i-lucide-layers",{"title":126,"path":127,"stem":128,"icon":129},"Structured Errors","\u002Fcore-concepts\u002Fstructured-errors","3.core-concepts\u002F2.structured-errors","i-lucide-shield-alert",{"title":131,"path":132,"stem":133,"icon":134},"Best Practices","\u002Fcore-concepts\u002Fbest-practices","3.core-concepts\u002F3.best-practices","i-lucide-shield-check",{"title":136,"path":137,"stem":138,"icon":99},"Typed Fields","\u002Fcore-concepts\u002Ftyped-fields","3.core-concepts\u002F4.typed-fields",{"title":140,"path":141,"stem":142,"icon":143},"Sampling","\u002Fcore-concepts\u002Fsampling","3.core-concepts\u002F5.sampling","i-lucide-filter",{"title":145,"path":146,"stem":147,"icon":148},"Client Logging","\u002Fcore-concepts\u002Fclient-logging","3.core-concepts\u002F6.client-logging","i-lucide-monitor",{"title":150,"path":151,"stem":152,"icon":153},"Configuration","\u002Fcore-concepts\u002Fconfiguration","3.core-concepts\u002F7.configuration","i-lucide-settings",{"title":155,"path":156,"stem":157,"icon":158},"Performance","\u002Fcore-concepts\u002Fperformance","3.core-concepts\u002F8.performance","i-lucide-gauge",{"title":160,"path":161,"stem":162,"children":163,"page":29},"Adapters","\u002Fadapters","4.adapters",[164,168,173,178,183,188,193,198,203,208],{"title":36,"path":165,"stem":166,"icon":167},"\u002Fadapters\u002Foverview","4.adapters\u002F1.overview","i-custom-plug",{"title":169,"path":170,"stem":171,"icon":172},"Browser","\u002Fadapters\u002Fbrowser","4.adapters\u002F10.browser","i-lucide-globe",{"title":174,"path":175,"stem":176,"icon":177},"Axiom","\u002Fadapters\u002Faxiom","4.adapters\u002F2.axiom","i-custom-axiom",{"title":179,"path":180,"stem":181,"icon":182},"OTLP","\u002Fadapters\u002Fotlp","4.adapters\u002F3.otlp","i-simple-icons-opentelemetry",{"title":184,"path":185,"stem":186,"icon":187},"PostHog","\u002Fadapters\u002Fposthog","4.adapters\u002F4.posthog","i-simple-icons-posthog",{"title":189,"path":190,"stem":191,"icon":192},"Sentry","\u002Fadapters\u002Fsentry","4.adapters\u002F5.sentry","i-simple-icons-sentry",{"title":194,"path":195,"stem":196,"icon":197},"Better Stack","\u002Fadapters\u002Fbetter-stack","4.adapters\u002F6.better-stack","i-simple-icons-betterstack",{"title":199,"path":200,"stem":201,"icon":202},"File System","\u002Fadapters\u002Ffs","4.adapters\u002F7.fs","i-lucide-hard-drive",{"title":204,"path":205,"stem":206,"icon":207},"Custom Adapters","\u002Fadapters\u002Fcustom","4.adapters\u002F8.custom","i-lucide-code",{"title":209,"path":210,"stem":211,"icon":212},"Pipeline","\u002Fadapters\u002Fpipeline","4.adapters\u002F9.pipeline","i-lucide-workflow",{"title":214,"path":215,"stem":216,"children":217,"page":29},"Enrichers","\u002Fenrichers","5.enrichers",[218,221,225],{"title":36,"path":219,"stem":220,"icon":28},"\u002Fenrichers\u002Foverview","5.enrichers\u002F1.overview",{"title":222,"path":223,"stem":224,"icon":109},"Built-in","\u002Fenrichers\u002Fbuilt-in","5.enrichers\u002F2.built-in",{"title":226,"path":227,"stem":228,"icon":207},"Custom","\u002Fenrichers\u002Fcustom","5.enrichers\u002F3.custom",{"title":230,"path":231,"stem":232,"children":233,"page":29},"NuxtHub","\u002Fnuxthub","6.nuxthub",[234,238],{"title":36,"path":235,"stem":236,"icon":237},"\u002Fnuxthub\u002Foverview","6.nuxthub\u002F1.overview","i-lucide-database",{"title":239,"path":240,"stem":241,"icon":242},"Retention","\u002Fnuxthub\u002Fretention","6.nuxthub\u002F2.retention","i-lucide-clock",{"id":244,"title":155,"body":245,"description":1385,"extension":1386,"links":1387,"meta":1392,"navigation":1393,"path":156,"seo":1394,"stem":157,"__hash__":1395},"docs\u002F3.core-concepts\u002F8.performance.md",{"type":246,"value":247,"toc":1367},"minimark",[248,252,257,274,325,328,363,367,370,375,447,450,457,519,528,535,593,603,616,620,668,671,675,734,752,755,758,833,844,847,962,968,971,975,1076,1087,1091,1094,1159,1166,1170,1185,1206,1209,1213,1280,1286,1363],[249,250,251],"p",{},"evlog is designed for production. Every operation is benchmarked and tracked against regressions in CI. This page documents the methodology, current numbers, and what they mean for your application.",[253,254,256],"h2",{"id":255},"methodology","Methodology",[249,258,259,260,267,268,273],{},"Benchmarks run with ",[261,262,266],"a",{"href":263,"rel":264},"https:\u002F\u002Fvitest.dev\u002Fguide\u002Ffeatures#benchmarking",[265],"nofollow","Vitest bench"," (powered by ",[261,269,272],{"href":270,"rel":271},"https:\u002F\u002Fgithub.com\u002Ftinylibs\u002Ftinybench",[265],"tinybench","):",[275,276,277,286,310,322],"ul",{},[278,279,280,281,285],"li",{},"Each benchmark runs for ",[282,283,284],"strong",{},"500ms"," after JIT warmup",[278,287,288,289,292,293,292,296,292,299,292,302,305,306,309],{},"Results report ",[282,290,291],{},"ops\u002Fsec",", ",[282,294,295],{},"mean",[282,297,298],{},"p75",[282,300,301],{},"p99",[282,303,304],{},"p995",", and ",[282,307,308],{},"p999"," latency",[278,311,312,313,316,317,321],{},"All benchmarks run in ",[282,314,315],{},"silent mode"," (",[318,319,320],"code",{},"silent: true",") to isolate the library overhead from I\u002FO",[278,323,324],{},"JSON output is saved for CI comparison between commits",[249,326,327],{},"Run benchmarks locally:",[329,330,335],"pre",{"className":331,"code":332,"language":333,"meta":334,"style":334},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","cd packages\u002Fevlog\nbun run bench\n","bash","",[318,336,337,350],{"__ignoreMap":334},[338,339,342,346],"span",{"class":340,"line":341},"line",1,[338,343,345],{"class":344},"s2Zo4","cd",[338,347,349],{"class":348},"sfazB"," packages\u002Fevlog\n",[338,351,353,357,360],{"class":340,"line":352},2,[338,354,356],{"class":355},"sBMFI","bun",[338,358,359],{"class":348}," run",[338,361,362],{"class":348}," bench\n",[253,364,366],{"id":365},"core-operations","Core operations",[249,368,369],{},"These benchmarks measure the cost of evlog's fundamental building blocks in isolation.",[371,372,374],"h3",{"id":373},"logger-creation","Logger creation",[376,377,378,394],"table",{},[379,380,381],"thead",{},[382,383,384,388,391],"tr",{},[385,386,387],"th",{},"Operation",[385,389,291],{"align":390},"right",[385,392,393],{"align":390},"Mean",[395,396,397,412,425,436],"tbody",{},[382,398,399,406,409],{},[400,401,402,405],"td",{},[318,403,404],{},"createLogger()"," (no context)",[400,407,408],{"align":390},"~18M",[400,410,411],{"align":390},"0.06µs",[382,413,414,419,422],{},[400,415,416,418],{},[318,417,404],{}," (shallow context)",[400,420,421],{"align":390},"~19M",[400,423,424],{"align":390},"0.05µs",[382,426,427,432,434],{},[400,428,429,431],{},[318,430,404],{}," (nested context)",[400,433,408],{"align":390},[400,435,411],{"align":390},[382,437,438,443,445],{},[400,439,440],{},[318,441,442],{},"createRequestLogger()",[400,444,408],{"align":390},[400,446,411],{"align":390},[249,448,449],{},"Creating a logger is essentially free — it's a closure over a plain object spread. No allocation pressure.",[371,451,453,456],{"id":452},"logset-accumulating-context",[318,454,455],{},"log.set()"," — accumulating context",[376,458,459,469],{},[379,460,461],{},[382,462,463,465,467],{},[385,464,387],{},[385,466,291],{"align":390},[385,468,393],{"align":390},[395,470,471,482,493,504],{},[382,472,473,476,479],{},[400,474,475],{},"Shallow merge (3 fields)",[400,477,478],{"align":390},"~12M",[400,480,481],{"align":390},"0.08µs",[382,483,484,487,490],{},[400,485,486],{},"Shallow merge (10 fields)",[400,488,489],{"align":390},"~11M",[400,491,492],{"align":390},"0.09µs",[382,494,495,498,501],{},[400,496,497],{},"Deep nested merge",[400,499,500],{"align":390},"~7M",[400,502,503],{"align":390},"0.14µs",[382,505,506,513,516],{},[400,507,508,509,512],{},"4 sequential ",[318,510,511],{},"set()"," calls",[400,514,515],{"align":390},"~4M",[400,517,518],{"align":390},"0.24µs",[249,520,521,523,524,527],{},[318,522,511],{}," uses ",[318,525,526],{},"deepDefaults"," — a recursive merge that preserves existing values. The cost scales linearly with object depth, not breadth.",[371,529,531,534],{"id":530},"logemit-building-the-wide-event",[318,532,533],{},"log.emit()"," — building the wide event",[376,536,537,547],{},[379,538,539],{},[382,540,541,543,545],{},[385,542,387],{},[385,544,291],{"align":390},[385,546,393],{"align":390},[395,548,549,560,571,582],{},[382,550,551,554,557],{},[400,552,553],{},"Emit minimal event",[400,555,556],{"align":390},"~1.6M",[400,558,559],{"align":390},"0.6µs",[382,561,562,565,568],{},[400,563,564],{},"Emit with context (typical request)",[400,566,567],{"align":390},"~1M",[400,569,570],{"align":390},"1.0µs",[382,572,573,576,579],{},[400,574,575],{},"Emit with error",[400,577,578],{"align":390},"~62K",[400,580,581],{"align":390},"16µs",[382,583,584,587,590],{},[400,585,586],{},"Full lifecycle (create + 3 sets + emit)",[400,588,589],{"align":390},"~937K",[400,591,592],{"align":390},"1.1µs",[249,594,595,596,598,599,602],{},"The full request lifecycle — create a logger, accumulate context across 3 ",[318,597,511],{}," calls, and emit — costs about ",[282,600,601],{},"1 microsecond",". That's ~0.001ms of overhead per request.",[604,605,608,611,612,615],"callout",{"color":606,"icon":607},"amber","i-lucide-triangle-alert",[318,609,610],{},"emit with error"," is significantly slower (~62K ops\u002Fsec) because ",[318,613,614],{},"Error.captureStackTrace()"," is an expensive V8 operation. This is expected — stack trace capture costs ~15µs regardless of library. This only runs when errors are thrown, not on every request.",[371,617,619],{"id":618},"payload-size-scaling","Payload size scaling",[376,621,622,633],{},[379,623,624],{},[382,625,626,629,631],{},[385,627,628],{},"Payload",[385,630,291],{"align":390},[385,632,393],{"align":390},[395,634,635,646,657],{},[382,636,637,640,643],{},[400,638,639],{},"Small (2 fields)",[400,641,642],{"align":390},"~1.2M",[400,644,645],{"align":390},"0.8µs",[382,647,648,651,654],{},[400,649,650],{},"Medium (50 fields)",[400,652,653],{"align":390},"~118K",[400,655,656],{"align":390},"8.5µs",[382,658,659,662,665],{},[400,660,661],{},"Large (200 nested fields)",[400,663,664],{"align":390},"~27K",[400,666,667],{"align":390},"37µs",[249,669,670],{},"Wide events with 50+ fields remain fast. Even at 200 deeply nested fields, emit takes under 40µs — well within budget for any HTTP request.",[253,672,674],{"id":673},"formatting","Formatting",[376,676,677,688],{},[379,678,679],{},[382,680,681,684,686],{},[385,682,683],{},"Mode",[385,685,291],{"align":390},[385,687,393],{"align":390},[395,689,690,701,710,719],{},[382,691,692,695,698],{},[400,693,694],{},"Silent (event build only)",[400,696,697],{"align":390},"~1.4M",[400,699,700],{"align":390},"0.7µs",[382,702,703,706,708],{},[400,704,705],{},"JSON serialization (production)",[400,707,697],{"align":390},[400,709,700],{"align":390},[382,711,712,715,717],{},[400,713,714],{},"Pretty print (development)",[400,716,697],{"align":390},[400,718,700],{"align":390},[382,720,721,728,731],{},[400,722,723,724,727],{},"Raw ",[318,725,726],{},"JSON.stringify"," (baseline)",[400,729,730],{"align":390},"~2M",[400,732,733],{"align":390},"0.5µs",[249,735,736,737,740,741,743,744,747,748,751],{},"evlog adds roughly ",[282,738,739],{},"30% overhead"," over raw ",[318,742,726],{}," — the difference is ",[318,745,746],{},"new Date().toISOString()",", the spread operator for building the ",[318,749,750],{},"WideEvent",", and the sampling check.",[249,753,754],{},"In development, the pretty printer with ANSI colors runs at the same speed when console output is mocked — the actual I\u002FO (writing to stdout) is the bottleneck, not the formatting logic.",[253,756,140],{"id":757},"sampling",[376,759,760,770],{},[379,761,762],{},[382,763,764,766,768],{},[385,765,387],{},[385,767,291],{"align":390},[385,769,393],{"align":390},[395,771,772,786,799,811,822],{},[382,773,774,780,783],{},[400,775,776,779],{},[318,777,778],{},"shouldKeep()"," — no match",[400,781,782],{"align":390},"~41M",[400,784,785],{"align":390},"0.02µs",[382,787,788,793,796],{},[400,789,790,792],{},[318,791,778],{}," — status match",[400,794,795],{"align":390},"~40M",[400,797,798],{"align":390},"0.03µs",[382,800,801,806,809],{},[400,802,803,805],{},[318,804,778],{}," — duration match",[400,807,808],{"align":390},"~42M",[400,810,785],{"align":390},[382,812,813,818,820],{},[400,814,815,817],{},[318,816,778],{}," — path glob match",[400,819,782],{"align":390},[400,821,785],{"align":390},[382,823,824,827,830],{},[400,825,826],{},"Full emit with head + tail sampling",[400,828,829],{"align":390},"~4.8M",[400,831,832],{"align":390},"0.2µs",[249,834,835,836,839,840,843],{},"Sampling adds ",[282,837,838],{},"zero measurable overhead",". Both head sampling (random percentage) and tail sampling (condition evaluation) complete in under 30 nanoseconds. Even path glob matching with ",[318,841,842],{},"matchesPattern()"," is negligible.",[253,845,214],{"id":846},"enrichers",[376,848,849,860],{},[379,850,851],{},[382,852,853,856,858],{},[385,854,855],{},"Enricher",[385,857,291],{"align":390},[385,859,393],{"align":390},[395,861,862,873,883,894,905,914,925,935,952],{},[382,863,864,867,870],{},[400,865,866],{},"User Agent (Chrome)",[400,868,869],{"align":390},"~2.5M",[400,871,872],{"align":390},"0.4µs",[382,874,875,878,880],{},[400,876,877],{},"User Agent (Firefox)",[400,879,515],{"align":390},[400,881,882],{"align":390},"0.25µs",[382,884,885,888,891],{},[400,886,887],{},"User Agent (Googlebot)",[400,889,890],{"align":390},"~4.5M",[400,892,893],{"align":390},"0.22µs",[382,895,896,899,902],{},[400,897,898],{},"Geo (Vercel headers)",[400,900,901],{"align":390},"~5.4M",[400,903,904],{"align":390},"0.18µs",[382,906,907,910,912],{},[400,908,909],{},"Geo (Cloudflare)",[400,911,567],{"align":390},[400,913,570],{"align":390},[382,915,916,919,922],{},[400,917,918],{},"Request Size",[400,920,921],{"align":390},"~26M",[400,923,924],{"align":390},"0.04µs",[382,926,927,930,933],{},[400,928,929],{},"Trace Context",[400,931,932],{"align":390},"~4.6M",[400,934,893],{"align":390},[382,936,937,942,947],{},[400,938,939],{},[282,940,941],{},"All enrichers combined",[400,943,944],{"align":390},[282,945,946],{},"~442K",[400,948,949],{"align":390},[282,950,951],{},"2.3µs",[382,953,954,957,960],{},[400,955,956],{},"All enrichers (no headers)",[400,958,959],{"align":390},"~1.9M",[400,961,733],{"align":390},[249,963,964,965,967],{},"Running the full enricher pipeline — User Agent parsing, Geo extraction, Request Size, and Trace Context — adds about ",[282,966,951],{}," per request. The User Agent regex parsing is the most expensive enricher.",[249,969,970],{},"When headers are absent (common for internal\u002Fhealth check requests), enrichers short-circuit immediately.",[253,972,974],{"id":973},"error-handling","Error handling",[376,976,977,987],{},[379,978,979],{},[382,980,981,983,985],{},[385,982,387],{},[385,984,291],{"align":390},[385,986,393],{"align":390},[395,988,989,1003,1016,1030,1041,1052,1063],{},[382,990,991,997,1000],{},[400,992,993,996],{},[318,994,995],{},"createError()"," (string)",[400,998,999],{"align":390},"~216K",[400,1001,1002],{"align":390},"4.6µs",[382,1004,1005,1010,1013],{},[400,1006,1007,1009],{},[318,1008,995],{}," (full options)",[400,1011,1012],{"align":390},"~208K",[400,1014,1015],{"align":390},"4.8µs",[382,1017,1018,1024,1027],{},[400,1019,1020,1023],{},[318,1021,1022],{},"parseError()"," (EvlogError)",[400,1025,1026],{"align":390},"~15M",[400,1028,1029],{"align":390},"0.07µs",[382,1031,1032,1037,1039],{},[400,1033,1034,1036],{},[318,1035,1022],{}," (plain Error)",[400,1038,782],{"align":390},[400,1040,785],{"align":390},[382,1042,1043,1046,1049],{},[400,1044,1045],{},"Round-trip (create + parse)",[400,1047,1048],{"align":390},"~164K",[400,1050,1051],{"align":390},"6.1µs",[382,1053,1054,1059,1061],{},[400,1055,1056],{},[318,1057,1058],{},"toJSON()",[400,1060,478],{"align":390},[400,1062,481],{"align":390},[382,1064,1065,1070,1073],{},[400,1066,1067],{},[318,1068,1069],{},"JSON.stringify()",[400,1071,1072],{"align":390},"~2.3M",[400,1074,1075],{"align":390},"0.43µs",[249,1077,1078,1080,1081,1083,1084,1086],{},[318,1079,995],{}," costs ~5µs, dominated by V8's ",[318,1082,614],{},". ",[318,1085,1022],{}," is essentially free — it's just property access.",[253,1088,1090],{"id":1089},"real-world-overhead","Real-world overhead",[249,1092,1093],{},"For a typical API request that creates a logger, sets context 3 times, and emits:",[376,1095,1096,1106],{},[379,1097,1098],{},[382,1099,1100,1103],{},[385,1101,1102],{},"Component",[385,1104,1105],{"align":390},"Cost",[395,1107,1108,1114,1123,1133,1140,1147],{},[382,1109,1110,1112],{},[400,1111,374],{},[400,1113,411],{"align":390},[382,1115,1116,1121],{},[400,1117,1118,1119,512],{},"3× ",[318,1120,511],{},[400,1122,518],{"align":390},[382,1124,1125,1131],{},[400,1126,1127,1130],{},[318,1128,1129],{},"emit()"," (silent)",[400,1132,700],{"align":390},[382,1134,1135,1138],{},[400,1136,1137],{},"Sampling evaluation",[400,1139,785],{"align":390},[382,1141,1142,1145],{},[400,1143,1144],{},"Full enricher pipeline",[400,1146,951],{"align":390},[382,1148,1149,1154],{},[400,1150,1151],{},[282,1152,1153],{},"Total evlog overhead",[400,1155,1156],{"align":390},[282,1157,1158],{},"~3.3µs",[249,1160,1161,1162,1165],{},"That's ",[282,1163,1164],{},"0.003ms"," per request — orders of magnitude below any HTTP framework or database overhead.",[253,1167,1169],{"id":1168},"ci-regression-tracking","CI regression tracking",[249,1171,1172,1173,1176,1177,1180,1181,1184],{},"Every pull request that touches ",[318,1174,1175],{},"packages\u002Fevlog\u002Fsrc\u002F"," or ",[318,1178,1179],{},"packages\u002Fevlog\u002Fbench\u002F"," automatically runs benchmarks against the ",[318,1182,1183],{},"main"," branch. A comparison report is posted as a PR comment showing:",[275,1186,1187,1193,1199],{},[278,1188,1189,1192],{},[282,1190,1191],{},"ops\u002Fsec delta"," for every benchmark",[278,1194,1195,1198],{},[282,1196,1197],{},"p99 latency"," changes",[278,1200,1201,1202,1205],{},"Regressions (",[282,1203,1204],{},">10% slower",") are flagged with a warning",[249,1207,1208],{},"This ensures performance never silently degrades across releases.",[253,1210,1212],{"id":1211},"running-benchmarks","Running benchmarks",[329,1214,1216],{"className":331,"code":1215,"language":333,"meta":334,"style":334},"# Run all benchmarks with table output\nbun run bench\n\n# Export results as JSON\nbun run bench:json\n\n# Compare two benchmark runs\nbun bench\u002Fcompare.ts baseline.json current.json\n",[318,1217,1218,1224,1232,1239,1245,1255,1260,1266],{"__ignoreMap":334},[338,1219,1220],{"class":340,"line":341},[338,1221,1223],{"class":1222},"sHwdD","# Run all benchmarks with table output\n",[338,1225,1226,1228,1230],{"class":340,"line":352},[338,1227,356],{"class":355},[338,1229,359],{"class":348},[338,1231,362],{"class":348},[338,1233,1235],{"class":340,"line":1234},3,[338,1236,1238],{"emptyLinePlaceholder":1237},true,"\n",[338,1240,1242],{"class":340,"line":1241},4,[338,1243,1244],{"class":1222},"# Export results as JSON\n",[338,1246,1248,1250,1252],{"class":340,"line":1247},5,[338,1249,356],{"class":355},[338,1251,359],{"class":348},[338,1253,1254],{"class":348}," bench:json\n",[338,1256,1258],{"class":340,"line":1257},6,[338,1259,1238],{"emptyLinePlaceholder":1237},[338,1261,1263],{"class":340,"line":1262},7,[338,1264,1265],{"class":1222},"# Compare two benchmark runs\n",[338,1267,1269,1271,1274,1277],{"class":340,"line":1268},8,[338,1270,356],{"class":355},[338,1272,1273],{"class":348}," bench\u002Fcompare.ts",[338,1275,1276],{"class":348}," baseline.json",[338,1278,1279],{"class":348}," current.json\n",[249,1281,1282,1283,1285],{},"Benchmark files live in ",[318,1284,1179],{},":",[376,1287,1288,1298],{},[379,1289,1290],{},[382,1291,1292,1295],{},[385,1293,1294],{},"File",[385,1296,1297],{},"What it measures",[395,1299,1300,1317,1327,1337,1347],{},[382,1301,1302,1307],{},[400,1303,1304],{},[318,1305,1306],{},"logger.bench.ts",[400,1308,1309,292,1312,292,1314,1316],{},[318,1310,1311],{},"createLogger",[318,1313,455],{},[318,1315,533],{},", payload sizes",[382,1318,1319,1324],{},[400,1320,1321],{},[318,1322,1323],{},"format.bench.ts",[400,1325,1326],{},"JSON vs pretty print vs silent mode",[382,1328,1329,1334],{},[400,1330,1331],{},[318,1332,1333],{},"sampling.bench.ts",[400,1335,1336],{},"Head sampling, tail sampling, combined",[382,1338,1339,1344],{},[400,1340,1341],{},[318,1342,1343],{},"enrichers.bench.ts",[400,1345,1346],{},"Per-enricher cost, full pipeline",[382,1348,1349,1354],{},[400,1350,1351],{},[318,1352,1353],{},"errors.bench.ts",[400,1355,1356,292,1359,1362],{},[318,1357,1358],{},"createError",[318,1360,1361],{},"parseError",", serialization",[1364,1365,1366],"style",{},"html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}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 .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":334,"searchDepth":352,"depth":352,"links":1368},[1369,1370,1378,1379,1380,1381,1382,1383,1384],{"id":255,"depth":352,"text":256},{"id":365,"depth":352,"text":366,"children":1371},[1372,1373,1375,1377],{"id":373,"depth":1234,"text":374},{"id":452,"depth":1234,"text":1374},"log.set() — accumulating context",{"id":530,"depth":1234,"text":1376},"log.emit() — building the wide event",{"id":618,"depth":1234,"text":619},{"id":673,"depth":352,"text":674},{"id":757,"depth":352,"text":140},{"id":846,"depth":352,"text":214},{"id":973,"depth":352,"text":974},{"id":1089,"depth":352,"text":1090},{"id":1168,"depth":352,"text":1169},{"id":1211,"depth":352,"text":1212},"Benchmark methodology, current numbers, and how evlog tracks performance regressions. Built for enterprise workloads with sub-microsecond overhead per request.","md",[1388,1391],{"label":140,"icon":143,"to":141,"color":1389,"variant":1390},"neutral","subtle",{"label":150,"icon":153,"to":151,"color":1389,"variant":1390},{},{"icon":158},{"title":155,"description":1385},"USkuyzb067Hs1MgQeLfPoBUDdcpfdeOoW4iaxJ_mejU",[1397,1399],{"title":150,"path":151,"stem":152,"description":1398,"icon":153,"children":-1},"Complete reference for all evlog configuration options including global logger settings, middleware options, environment context, and framework-specific overrides.",{"title":36,"path":165,"stem":166,"description":1400,"icon":167,"children":-1},"Send your logs to external services with evlog adapters. Built-in support for popular observability platforms and custom destinations.",1773505335935]