[{"data":1,"prerenderedAt":2525},["ShallowReactive",2],{"navigation_docs":3,"-core-concepts-sampling":228,"-core-concepts-sampling-surround":2520},[4,30,110,149,198,214],{"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],{"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,"children":153,"page":29},"Adapters","\u002Fadapters","4.adapters",[154,158,163,168,173,178,183,188,193],{"title":36,"path":155,"stem":156,"icon":157},"\u002Fadapters\u002Foverview","4.adapters\u002F1.overview","i-custom-plug",{"title":159,"path":160,"stem":161,"icon":162},"Axiom","\u002Fadapters\u002Faxiom","4.adapters\u002F2.axiom","i-custom-axiom",{"title":164,"path":165,"stem":166,"icon":167},"OTLP","\u002Fadapters\u002Fotlp","4.adapters\u002F3.otlp","i-simple-icons-opentelemetry",{"title":169,"path":170,"stem":171,"icon":172},"PostHog","\u002Fadapters\u002Fposthog","4.adapters\u002F4.posthog","i-simple-icons-posthog",{"title":174,"path":175,"stem":176,"icon":177},"Sentry","\u002Fadapters\u002Fsentry","4.adapters\u002F5.sentry","i-simple-icons-sentry",{"title":179,"path":180,"stem":181,"icon":182},"Better Stack","\u002Fadapters\u002Fbetter-stack","4.adapters\u002F6.better-stack","i-simple-icons-betterstack",{"title":184,"path":185,"stem":186,"icon":187},"Custom Adapters","\u002Fadapters\u002Fcustom","4.adapters\u002F7.custom","i-lucide-code",{"title":189,"path":190,"stem":191,"icon":192},"Pipeline","\u002Fadapters\u002Fpipeline","4.adapters\u002F8.pipeline","i-lucide-workflow",{"title":194,"path":195,"stem":196,"icon":197},"Browser","\u002Fadapters\u002Fbrowser","4.adapters\u002F9.browser","i-lucide-globe",{"title":199,"path":200,"stem":201,"children":202,"page":29},"Enrichers","\u002Fenrichers","5.enrichers",[203,206,210],{"title":36,"path":204,"stem":205,"icon":28},"\u002Fenrichers\u002Foverview","5.enrichers\u002F1.overview",{"title":207,"path":208,"stem":209,"icon":109},"Built-in","\u002Fenrichers\u002Fbuilt-in","5.enrichers\u002F2.built-in",{"title":211,"path":212,"stem":213,"icon":187},"Custom","\u002Fenrichers\u002Fcustom","5.enrichers\u002F3.custom",{"title":215,"path":216,"stem":217,"children":218,"page":29},"NuxtHub","\u002Fnuxthub","6.nuxthub",[219,223],{"title":36,"path":220,"stem":221,"icon":222},"\u002Fnuxthub\u002Foverview","6.nuxthub\u002F1.overview","i-lucide-database",{"title":224,"path":225,"stem":226,"icon":227},"Retention","\u002Fnuxthub\u002Fretention","6.nuxthub\u002F2.retention","i-lucide-clock",{"id":229,"title":140,"body":230,"description":2509,"extension":2510,"links":2511,"meta":2516,"navigation":2517,"path":141,"seo":2518,"stem":142,"__hash__":2519},"docs\u002F3.core-concepts\u002F5.sampling.md",{"type":231,"value":232,"toc":2499},"minimark",[233,237,242,250,732,739,748,752,759,876,899,904,976,980,983,1015,1025,1226,1230,1240,1691,1697,1802,1806,1809,2468,2477,2481,2495],[234,235,236],"p",{},"At scale, logging everything gets expensive fast. Sampling lets you keep costs under control without losing visibility into what matters. evlog uses a two-tier approach: head sampling drops noise upfront, tail sampling rescues critical events after the fact.",[238,239,241],"h2",{"id":240},"head-sampling","Head Sampling",[234,243,244,245,249],{},"Head sampling randomly keeps a percentage of logs per level. It runs ",[246,247,248],"strong",{},"before"," the request completes — a coin flip at emission time.",[251,252,253,441,600],"code-group",{},[254,255,261],"pre",{"className":256,"code":257,"filename":258,"language":259,"meta":260,"style":260},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","export default defineNuxtConfig({\n  modules: ['evlog\u002Fnuxt'],\n  evlog: {\n    sampling: {\n      rates: {\n        info: 10,    \u002F\u002F Keep 10% of info logs\n        warn: 50,    \u002F\u002F Keep 50% of warnings\n        debug: 0,    \u002F\u002F Drop all debug logs\n        error: 100,  \u002F\u002F Always keep errors (default)\n      },\n    },\n  },\n})\n","nuxt.config.ts","typescript","",[262,263,264,288,316,327,337,347,366,382,398,414,420,426,432],"code",{"__ignoreMap":260},[265,266,269,273,276,280,284],"span",{"class":267,"line":268},"line",1,[265,270,272],{"class":271},"s7zQu","export",[265,274,275],{"class":271}," default",[265,277,279],{"class":278},"s2Zo4"," defineNuxtConfig",[265,281,283],{"class":282},"sTEyZ","(",[265,285,287],{"class":286},"sMK4o","{\n",[265,289,291,295,298,301,304,308,310,313],{"class":267,"line":290},2,[265,292,294],{"class":293},"swJcz","  modules",[265,296,297],{"class":286},":",[265,299,300],{"class":282}," [",[265,302,303],{"class":286},"'",[265,305,307],{"class":306},"sfazB","evlog\u002Fnuxt",[265,309,303],{"class":286},[265,311,312],{"class":282},"]",[265,314,315],{"class":286},",\n",[265,317,319,322,324],{"class":267,"line":318},3,[265,320,321],{"class":293},"  evlog",[265,323,297],{"class":286},[265,325,326],{"class":286}," {\n",[265,328,330,333,335],{"class":267,"line":329},4,[265,331,332],{"class":293},"    sampling",[265,334,297],{"class":286},[265,336,326],{"class":286},[265,338,340,343,345],{"class":267,"line":339},5,[265,341,342],{"class":293},"      rates",[265,344,297],{"class":286},[265,346,326],{"class":286},[265,348,350,353,355,359,362],{"class":267,"line":349},6,[265,351,352],{"class":293},"        info",[265,354,297],{"class":286},[265,356,358],{"class":357},"sbssI"," 10",[265,360,361],{"class":286},",",[265,363,365],{"class":364},"sHwdD","    \u002F\u002F Keep 10% of info logs\n",[265,367,369,372,374,377,379],{"class":267,"line":368},7,[265,370,371],{"class":293},"        warn",[265,373,297],{"class":286},[265,375,376],{"class":357}," 50",[265,378,361],{"class":286},[265,380,381],{"class":364},"    \u002F\u002F Keep 50% of warnings\n",[265,383,385,388,390,393,395],{"class":267,"line":384},8,[265,386,387],{"class":293},"        debug",[265,389,297],{"class":286},[265,391,392],{"class":357}," 0",[265,394,361],{"class":286},[265,396,397],{"class":364},"    \u002F\u002F Drop all debug logs\n",[265,399,401,404,406,409,411],{"class":267,"line":400},9,[265,402,403],{"class":293},"        error",[265,405,297],{"class":286},[265,407,408],{"class":357}," 100",[265,410,361],{"class":286},[265,412,413],{"class":364},"  \u002F\u002F Always keep errors (default)\n",[265,415,417],{"class":267,"line":416},10,[265,418,419],{"class":286},"      },\n",[265,421,423],{"class":267,"line":422},11,[265,424,425],{"class":286},"    },\n",[265,427,429],{"class":267,"line":428},12,[265,430,431],{"class":286},"  },\n",[265,433,435,438],{"class":267,"line":434},13,[265,436,437],{"class":286},"}",[265,439,440],{"class":282},")\n",[254,442,445],{"className":256,"code":443,"filename":444,"language":259,"meta":260,"style":260},"import { createEvlog } from 'evlog\u002Fnext'\n\nexport const { withEvlog, useLogger } = createEvlog({\n  service: 'my-app',\n  sampling: {\n    rates: {\n      info: 10,\n      warn: 50,\n      debug: 0,\n      error: 100,\n    },\n  },\n})\n","lib\u002Fevlog.ts (Next.js)",[262,446,447,473,479,508,524,533,542,553,564,575,586,590,594],{"__ignoreMap":260},[265,448,449,452,455,458,461,464,467,470],{"class":267,"line":268},[265,450,451],{"class":271},"import",[265,453,454],{"class":286}," {",[265,456,457],{"class":282}," createEvlog",[265,459,460],{"class":286}," }",[265,462,463],{"class":271}," from",[265,465,466],{"class":286}," '",[265,468,469],{"class":306},"evlog\u002Fnext",[265,471,472],{"class":286},"'\n",[265,474,475],{"class":267,"line":290},[265,476,478],{"emptyLinePlaceholder":477},true,"\n",[265,480,481,483,487,489,492,494,497,499,502,504,506],{"class":267,"line":318},[265,482,272],{"class":271},[265,484,486],{"class":485},"spNyl"," const",[265,488,454],{"class":286},[265,490,491],{"class":282}," withEvlog",[265,493,361],{"class":286},[265,495,496],{"class":282}," useLogger ",[265,498,437],{"class":286},[265,500,501],{"class":286}," =",[265,503,457],{"class":278},[265,505,283],{"class":282},[265,507,287],{"class":286},[265,509,510,513,515,517,520,522],{"class":267,"line":329},[265,511,512],{"class":293},"  service",[265,514,297],{"class":286},[265,516,466],{"class":286},[265,518,519],{"class":306},"my-app",[265,521,303],{"class":286},[265,523,315],{"class":286},[265,525,526,529,531],{"class":267,"line":339},[265,527,528],{"class":293},"  sampling",[265,530,297],{"class":286},[265,532,326],{"class":286},[265,534,535,538,540],{"class":267,"line":349},[265,536,537],{"class":293},"    rates",[265,539,297],{"class":286},[265,541,326],{"class":286},[265,543,544,547,549,551],{"class":267,"line":368},[265,545,546],{"class":293},"      info",[265,548,297],{"class":286},[265,550,358],{"class":357},[265,552,315],{"class":286},[265,554,555,558,560,562],{"class":267,"line":384},[265,556,557],{"class":293},"      warn",[265,559,297],{"class":286},[265,561,376],{"class":357},[265,563,315],{"class":286},[265,565,566,569,571,573],{"class":267,"line":400},[265,567,568],{"class":293},"      debug",[265,570,297],{"class":286},[265,572,392],{"class":357},[265,574,315],{"class":286},[265,576,577,580,582,584],{"class":267,"line":416},[265,578,579],{"class":293},"      error",[265,581,297],{"class":286},[265,583,408],{"class":357},[265,585,315],{"class":286},[265,587,588],{"class":267,"line":422},[265,589,425],{"class":286},[265,591,592],{"class":267,"line":428},[265,593,431],{"class":286},[265,595,596,598],{"class":267,"line":434},[265,597,437],{"class":286},[265,599,440],{"class":282},[254,601,604],{"className":256,"code":602,"filename":603,"language":259,"meta":260,"style":260},"import { initLogger } from 'evlog'\n\ninitLogger({\n  env: { service: 'my-app' },\n  sampling: {\n    rates: {\n      info: 10,\n      warn: 50,\n      debug: 0,\n      error: 100,\n    },\n  },\n})\n","index.ts (Hono \u002F Express \u002F Fastify)",[262,605,606,626,630,639,662,670,678,688,698,708,718,722,726],{"__ignoreMap":260},[265,607,608,610,612,615,617,619,621,624],{"class":267,"line":268},[265,609,451],{"class":271},[265,611,454],{"class":286},[265,613,614],{"class":282}," initLogger",[265,616,460],{"class":286},[265,618,463],{"class":271},[265,620,466],{"class":286},[265,622,623],{"class":306},"evlog",[265,625,472],{"class":286},[265,627,628],{"class":267,"line":290},[265,629,478],{"emptyLinePlaceholder":477},[265,631,632,635,637],{"class":267,"line":318},[265,633,634],{"class":278},"initLogger",[265,636,283],{"class":282},[265,638,287],{"class":286},[265,640,641,644,646,648,651,653,655,657,659],{"class":267,"line":329},[265,642,643],{"class":293},"  env",[265,645,297],{"class":286},[265,647,454],{"class":286},[265,649,650],{"class":293}," service",[265,652,297],{"class":286},[265,654,466],{"class":286},[265,656,519],{"class":306},[265,658,303],{"class":286},[265,660,661],{"class":286}," },\n",[265,663,664,666,668],{"class":267,"line":339},[265,665,528],{"class":293},[265,667,297],{"class":286},[265,669,326],{"class":286},[265,671,672,674,676],{"class":267,"line":349},[265,673,537],{"class":293},[265,675,297],{"class":286},[265,677,326],{"class":286},[265,679,680,682,684,686],{"class":267,"line":368},[265,681,546],{"class":293},[265,683,297],{"class":286},[265,685,358],{"class":357},[265,687,315],{"class":286},[265,689,690,692,694,696],{"class":267,"line":384},[265,691,557],{"class":293},[265,693,297],{"class":286},[265,695,376],{"class":357},[265,697,315],{"class":286},[265,699,700,702,704,706],{"class":267,"line":400},[265,701,568],{"class":293},[265,703,297],{"class":286},[265,705,392],{"class":357},[265,707,315],{"class":286},[265,709,710,712,714,716],{"class":267,"line":416},[265,711,579],{"class":293},[265,713,297],{"class":286},[265,715,408],{"class":357},[265,717,315],{"class":286},[265,719,720],{"class":267,"line":422},[265,721,425],{"class":286},[265,723,724],{"class":267,"line":428},[265,725,431],{"class":286},[265,727,728,730],{"class":267,"line":434},[265,729,437],{"class":286},[265,731,440],{"class":282},[234,733,734,735,738],{},"Each level is a percentage from 0 to 100. Levels you don't configure default to 100% (keep everything). Error defaults to 100% even when other levels are configured — you have to explicitly set ",[262,736,737],{},"error: 0"," to drop errors.",[740,741,743,744,747],"callout",{"color":742,"icon":13},"info","Head sampling is random. A ",[262,745,746],{},"10%"," rate means roughly 1 in 10 info logs are kept — not exactly 1 in 10.",[238,749,751],{"id":750},"tail-sampling","Tail Sampling",[234,753,754,755,758],{},"Head sampling is blind — it doesn't know if a request was slow, failed, or hit a critical path. Tail sampling fixes this by evaluating ",[246,756,757],{},"after"," the request completes and force-keeping logs that match specific conditions.",[254,760,762],{"className":256,"code":761,"language":259,"meta":260,"style":260},"\u002F\u002F Works the same across all frameworks\nsampling: {\n  rates: { info: 10 },\n  keep: [\n    { status: 400 },              \u002F\u002F HTTP status >= 400\n    { duration: 1000 },           \u002F\u002F Request took >= 1s\n    { path: '\u002Fapi\u002Fpayments\u002F**' }, \u002F\u002F Critical path (glob)\n  ],\n}\n",[262,763,764,769,779,797,807,826,843,864,871],{"__ignoreMap":260},[265,765,766],{"class":267,"line":268},[265,767,768],{"class":364},"\u002F\u002F Works the same across all frameworks\n",[265,770,771,775,777],{"class":267,"line":290},[265,772,774],{"class":773},"sBMFI","sampling",[265,776,297],{"class":286},[265,778,326],{"class":286},[265,780,781,784,786,788,791,793,795],{"class":267,"line":318},[265,782,783],{"class":773},"  rates",[265,785,297],{"class":286},[265,787,454],{"class":286},[265,789,790],{"class":773}," info",[265,792,297],{"class":286},[265,794,358],{"class":357},[265,796,661],{"class":286},[265,798,799,802,804],{"class":267,"line":329},[265,800,801],{"class":773},"  keep",[265,803,297],{"class":286},[265,805,806],{"class":293}," [\n",[265,808,809,812,815,817,820,823],{"class":267,"line":339},[265,810,811],{"class":286},"    {",[265,813,814],{"class":293}," status",[265,816,297],{"class":286},[265,818,819],{"class":357}," 400",[265,821,822],{"class":286}," },",[265,824,825],{"class":364},"              \u002F\u002F HTTP status >= 400\n",[265,827,828,830,833,835,838,840],{"class":267,"line":349},[265,829,811],{"class":286},[265,831,832],{"class":293}," duration",[265,834,297],{"class":286},[265,836,837],{"class":357}," 1000",[265,839,822],{"class":286},[265,841,842],{"class":364},"           \u002F\u002F Request took >= 1s\n",[265,844,845,847,850,852,854,857,859,861],{"class":267,"line":368},[265,846,811],{"class":286},[265,848,849],{"class":293}," path",[265,851,297],{"class":286},[265,853,466],{"class":286},[265,855,856],{"class":306},"\u002Fapi\u002Fpayments\u002F**",[265,858,303],{"class":286},[265,860,822],{"class":286},[265,862,863],{"class":364}," \u002F\u002F Critical path (glob)\n",[265,865,866,869],{"class":267,"line":384},[265,867,868],{"class":293},"  ]",[265,870,315],{"class":286},[265,872,873],{"class":267,"line":400},[265,874,875],{"class":286},"}\n",[234,877,878,879,882,883,886,887,890,891,894,895,898],{},"Conditions use ",[246,880,881],{},">="," comparison for ",[262,884,885],{},"status"," and ",[262,888,889],{},"duration",", and glob matching for ",[262,892,893],{},"path",". If ",[246,896,897],{},"any"," condition matches, the log is kept regardless of head sampling (OR logic).",[900,901,903],"h3",{"id":902},"available-conditions","Available Conditions",[905,906,907,923],"table",{},[908,909,910],"thead",{},[911,912,913,917,920],"tr",{},[914,915,916],"th",{},"Condition",[914,918,919],{},"Type",[914,921,922],{},"Description",[924,925,926,945,958],"tbody",{},[911,927,928,933,938],{},[929,930,931],"td",{},[262,932,885],{},[929,934,935],{},[262,936,937],{},"number",[929,939,940,941,944],{},"Keep if HTTP status >= value (e.g., ",[262,942,943],{},"400"," catches all 4xx and 5xx)",[911,946,947,951,955],{},[929,948,949],{},[262,950,889],{},[929,952,953],{},[262,954,937],{},[929,956,957],{},"Keep if request duration >= value in milliseconds",[911,959,960,964,969],{},[929,961,962],{},[262,963,893],{},[929,965,966],{},[262,967,968],{},"string",[929,970,971,972,975],{},"Keep if request path matches glob pattern (e.g., ",[262,973,974],{},"'\u002Fapi\u002Fcritical\u002F**'",")",[238,977,979],{"id":978},"how-they-work-together","How They Work Together",[234,981,982],{},"The two tiers complement each other:",[984,985,986,993,1003,1009],"ol",{},[987,988,989,992],"li",{},[246,990,991],{},"Request completes"," — evlog knows the status, duration, and path",[987,994,995,998,999,1002],{},[246,996,997],{},"Tail sampling evaluates"," — if any ",[262,1000,1001],{},"keep"," condition matches, the log is force-kept",[987,1004,1005,1008],{},[246,1006,1007],{},"Head sampling applies"," — only if tail sampling didn't force-keep, the random percentage check runs",[987,1010,1011,1014],{},[246,1012,1013],{},"Log emits or drops"," — kept logs go through enrichment and draining as normal",[234,1016,1017,1018,1021,1022,1024],{},"This means a request to ",[262,1019,1020],{},"\u002Fapi\u002Fpayments\u002Fcharge"," that returns a 500 in 2 seconds will always be logged, even if ",[262,1023,742],{}," is set to 1%. The tail conditions rescue it.",[251,1026,1027,1099],{},[254,1028,1031],{"className":256,"code":1029,"filename":1030,"language":259,"meta":260,"style":260},"sampling: {\n  rates: { info: 10 },\n  keep: [\n    { status: 400 },\n    { duration: 1000 },\n  ],\n}\n","Configuration",[262,1032,1033,1041,1057,1065,1077,1089,1095],{"__ignoreMap":260},[265,1034,1035,1037,1039],{"class":267,"line":268},[265,1036,774],{"class":773},[265,1038,297],{"class":286},[265,1040,326],{"class":286},[265,1042,1043,1045,1047,1049,1051,1053,1055],{"class":267,"line":290},[265,1044,783],{"class":773},[265,1046,297],{"class":286},[265,1048,454],{"class":286},[265,1050,790],{"class":773},[265,1052,297],{"class":286},[265,1054,358],{"class":357},[265,1056,661],{"class":286},[265,1058,1059,1061,1063],{"class":267,"line":318},[265,1060,801],{"class":773},[265,1062,297],{"class":286},[265,1064,806],{"class":293},[265,1066,1067,1069,1071,1073,1075],{"class":267,"line":329},[265,1068,811],{"class":286},[265,1070,814],{"class":293},[265,1072,297],{"class":286},[265,1074,819],{"class":357},[265,1076,661],{"class":286},[265,1078,1079,1081,1083,1085,1087],{"class":267,"line":339},[265,1080,811],{"class":286},[265,1082,832],{"class":293},[265,1084,297],{"class":286},[265,1086,837],{"class":357},[265,1088,661],{"class":286},[265,1090,1091,1093],{"class":267,"line":349},[265,1092,868],{"class":293},[265,1094,315],{"class":286},[265,1096,1097],{"class":267,"line":368},[265,1098,875],{"class":286},[254,1100,1105],{"className":1101,"code":1102,"filename":1103,"language":1104,"meta":260,"style":260},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","POST \u002Fapi\u002Fusers     200  45ms   → 10% chance (head sampling)\nPOST \u002Fapi\u002Fusers     500  45ms   → always kept (status >= 400)\nGET  \u002Fapi\u002Fproducts  200  2300ms → always kept (duration >= 1000)\nPOST \u002Fapi\u002Fcheckout  200  120ms  → 10% chance (head sampling)\n","What gets logged","bash",[262,1106,1107,1137,1169,1201],{"__ignoreMap":260},[265,1108,1109,1112,1115,1118,1121,1124,1127,1130,1133,1135],{"class":267,"line":268},[265,1110,1111],{"class":773},"POST",[265,1113,1114],{"class":306}," \u002Fapi\u002Fusers",[265,1116,1117],{"class":357},"     200",[265,1119,1120],{"class":306},"  45ms",[265,1122,1123],{"class":306},"   →",[265,1125,1126],{"class":306}," 10%",[265,1128,1129],{"class":306}," chance",[265,1131,1132],{"class":282}," (head ",[265,1134,774],{"class":306},[265,1136,440],{"class":282},[265,1138,1139,1141,1143,1146,1148,1150,1153,1156,1159,1162,1165,1167],{"class":267,"line":290},[265,1140,1111],{"class":773},[265,1142,1114],{"class":306},[265,1144,1145],{"class":357},"     500",[265,1147,1120],{"class":306},[265,1149,1123],{"class":306},[265,1151,1152],{"class":306}," always",[265,1154,1155],{"class":306}," kept",[265,1157,1158],{"class":282}," (status ",[265,1160,1161],{"class":286},">",[265,1163,1164],{"class":306},"=",[265,1166,819],{"class":357},[265,1168,440],{"class":282},[265,1170,1171,1174,1177,1180,1183,1186,1188,1190,1193,1195,1197,1199],{"class":267,"line":318},[265,1172,1173],{"class":773},"GET",[265,1175,1176],{"class":306},"  \u002Fapi\u002Fproducts",[265,1178,1179],{"class":357},"  200",[265,1181,1182],{"class":306},"  2300ms",[265,1184,1185],{"class":306}," →",[265,1187,1152],{"class":306},[265,1189,1155],{"class":306},[265,1191,1192],{"class":282}," (duration ",[265,1194,1161],{"class":286},[265,1196,1164],{"class":306},[265,1198,837],{"class":357},[265,1200,440],{"class":282},[265,1202,1203,1205,1208,1210,1213,1216,1218,1220,1222,1224],{"class":267,"line":329},[265,1204,1111],{"class":773},[265,1206,1207],{"class":306}," \u002Fapi\u002Fcheckout",[265,1209,1179],{"class":357},[265,1211,1212],{"class":306},"  120ms",[265,1214,1215],{"class":306},"  →",[265,1217,1126],{"class":306},[265,1219,1129],{"class":306},[265,1221,1132],{"class":282},[265,1223,774],{"class":306},[265,1225,440],{"class":282},[238,1227,1229],{"id":1228},"custom-tail-sampling","Custom Tail Sampling",[234,1231,1232,1233,1236,1237,1239],{},"For conditions beyond status, duration, and path, use the ",[262,1234,1235],{},"evlog:emit:keep"," hook in Nuxt\u002FNitro or the ",[262,1238,1001],{}," callback in other frameworks.",[251,1241,1242,1384,1572],{},[254,1243,1246],{"className":256,"code":1244,"filename":1245,"language":259,"meta":260,"style":260},"export default defineNitroPlugin((nitroApp) => {\n  nitroApp.hooks.hook('evlog:emit:keep', (ctx) => {\n    if (ctx.context.user?.plan === 'enterprise') {\n      ctx.shouldKeep = true\n    }\n  })\n})\n","server\u002Fplugins\u002Fsampling.ts (Nuxt)",[262,1247,1248,1272,1310,1350,1366,1371,1378],{"__ignoreMap":260},[265,1249,1250,1252,1254,1257,1259,1261,1265,1267,1270],{"class":267,"line":268},[265,1251,272],{"class":271},[265,1253,275],{"class":271},[265,1255,1256],{"class":278}," defineNitroPlugin",[265,1258,283],{"class":282},[265,1260,283],{"class":286},[265,1262,1264],{"class":1263},"sHdIc","nitroApp",[265,1266,975],{"class":286},[265,1268,1269],{"class":485}," =>",[265,1271,326],{"class":286},[265,1273,1274,1277,1280,1283,1285,1288,1290,1292,1294,1296,1298,1301,1304,1306,1308],{"class":267,"line":290},[265,1275,1276],{"class":282},"  nitroApp",[265,1278,1279],{"class":286},".",[265,1281,1282],{"class":282},"hooks",[265,1284,1279],{"class":286},[265,1286,1287],{"class":278},"hook",[265,1289,283],{"class":293},[265,1291,303],{"class":286},[265,1293,1235],{"class":306},[265,1295,303],{"class":286},[265,1297,361],{"class":286},[265,1299,1300],{"class":286}," (",[265,1302,1303],{"class":1263},"ctx",[265,1305,975],{"class":286},[265,1307,1269],{"class":485},[265,1309,326],{"class":286},[265,1311,1312,1315,1317,1319,1321,1324,1326,1329,1332,1335,1338,1340,1343,1345,1348],{"class":267,"line":318},[265,1313,1314],{"class":271},"    if",[265,1316,1300],{"class":293},[265,1318,1303],{"class":282},[265,1320,1279],{"class":286},[265,1322,1323],{"class":282},"context",[265,1325,1279],{"class":286},[265,1327,1328],{"class":282},"user",[265,1330,1331],{"class":286},"?.",[265,1333,1334],{"class":282},"plan",[265,1336,1337],{"class":286}," ===",[265,1339,466],{"class":286},[265,1341,1342],{"class":306},"enterprise",[265,1344,303],{"class":286},[265,1346,1347],{"class":293},") ",[265,1349,287],{"class":286},[265,1351,1352,1355,1357,1360,1362],{"class":267,"line":329},[265,1353,1354],{"class":282},"      ctx",[265,1356,1279],{"class":286},[265,1358,1359],{"class":282},"shouldKeep",[265,1361,501],{"class":286},[265,1363,1365],{"class":1364},"sfNiH"," true\n",[265,1367,1368],{"class":267,"line":339},[265,1369,1370],{"class":286},"    }\n",[265,1372,1373,1376],{"class":267,"line":349},[265,1374,1375],{"class":286},"  }",[265,1377,440],{"class":293},[265,1379,1380,1382],{"class":267,"line":368},[265,1381,437],{"class":286},[265,1383,440],{"class":282},[254,1385,1387],{"className":256,"code":1386,"filename":444,"language":259,"meta":260,"style":260},"import { createEvlog } from 'evlog\u002Fnext'\n\nexport const { withEvlog, useLogger } = createEvlog({\n  service: 'my-app',\n  sampling: {\n    rates: { info: 10 },\n    keep: [{ status: 400 }],\n  },\n  keep(ctx) {\n    if (ctx.context.user?.plan === 'enterprise') {\n      ctx.shouldKeep = true\n    }\n  },\n})\n",[262,1388,1389,1407,1411,1435,1449,1457,1473,1497,1501,1513,1545,1557,1561,1565],{"__ignoreMap":260},[265,1390,1391,1393,1395,1397,1399,1401,1403,1405],{"class":267,"line":268},[265,1392,451],{"class":271},[265,1394,454],{"class":286},[265,1396,457],{"class":282},[265,1398,460],{"class":286},[265,1400,463],{"class":271},[265,1402,466],{"class":286},[265,1404,469],{"class":306},[265,1406,472],{"class":286},[265,1408,1409],{"class":267,"line":290},[265,1410,478],{"emptyLinePlaceholder":477},[265,1412,1413,1415,1417,1419,1421,1423,1425,1427,1429,1431,1433],{"class":267,"line":318},[265,1414,272],{"class":271},[265,1416,486],{"class":485},[265,1418,454],{"class":286},[265,1420,491],{"class":282},[265,1422,361],{"class":286},[265,1424,496],{"class":282},[265,1426,437],{"class":286},[265,1428,501],{"class":286},[265,1430,457],{"class":278},[265,1432,283],{"class":282},[265,1434,287],{"class":286},[265,1436,1437,1439,1441,1443,1445,1447],{"class":267,"line":329},[265,1438,512],{"class":293},[265,1440,297],{"class":286},[265,1442,466],{"class":286},[265,1444,519],{"class":306},[265,1446,303],{"class":286},[265,1448,315],{"class":286},[265,1450,1451,1453,1455],{"class":267,"line":339},[265,1452,528],{"class":293},[265,1454,297],{"class":286},[265,1456,326],{"class":286},[265,1458,1459,1461,1463,1465,1467,1469,1471],{"class":267,"line":349},[265,1460,537],{"class":293},[265,1462,297],{"class":286},[265,1464,454],{"class":286},[265,1466,790],{"class":293},[265,1468,297],{"class":286},[265,1470,358],{"class":357},[265,1472,661],{"class":286},[265,1474,1475,1478,1480,1482,1485,1487,1489,1491,1493,1495],{"class":267,"line":368},[265,1476,1477],{"class":293},"    keep",[265,1479,297],{"class":286},[265,1481,300],{"class":282},[265,1483,1484],{"class":286},"{",[265,1486,814],{"class":293},[265,1488,297],{"class":286},[265,1490,819],{"class":357},[265,1492,460],{"class":286},[265,1494,312],{"class":282},[265,1496,315],{"class":286},[265,1498,1499],{"class":267,"line":384},[265,1500,431],{"class":286},[265,1502,1503,1505,1507,1509,1511],{"class":267,"line":400},[265,1504,801],{"class":293},[265,1506,283],{"class":286},[265,1508,1303],{"class":1263},[265,1510,975],{"class":286},[265,1512,326],{"class":286},[265,1514,1515,1517,1519,1521,1523,1525,1527,1529,1531,1533,1535,1537,1539,1541,1543],{"class":267,"line":416},[265,1516,1314],{"class":271},[265,1518,1300],{"class":293},[265,1520,1303],{"class":282},[265,1522,1279],{"class":286},[265,1524,1323],{"class":282},[265,1526,1279],{"class":286},[265,1528,1328],{"class":282},[265,1530,1331],{"class":286},[265,1532,1334],{"class":282},[265,1534,1337],{"class":286},[265,1536,466],{"class":286},[265,1538,1342],{"class":306},[265,1540,303],{"class":286},[265,1542,1347],{"class":293},[265,1544,287],{"class":286},[265,1546,1547,1549,1551,1553,1555],{"class":267,"line":422},[265,1548,1354],{"class":282},[265,1550,1279],{"class":286},[265,1552,1359],{"class":282},[265,1554,501],{"class":286},[265,1556,1365],{"class":1364},[265,1558,1559],{"class":267,"line":428},[265,1560,1370],{"class":286},[265,1562,1563],{"class":267,"line":434},[265,1564,431],{"class":286},[265,1566,1568,1570],{"class":267,"line":1567},14,[265,1569,437],{"class":286},[265,1571,440],{"class":282},[254,1573,1576],{"className":256,"code":1574,"filename":1575,"language":259,"meta":260,"style":260},"import { evlog } from 'evlog\u002Fhono'\n\napp.use(evlog({\n  keep(ctx) {\n    if (ctx.context.user?.plan === 'enterprise') {\n      ctx.shouldKeep = true\n    }\n  },\n}))\n","index.ts (Hono)",[262,1577,1578,1598,1602,1620,1632,1664,1676,1680,1684],{"__ignoreMap":260},[265,1579,1580,1582,1584,1587,1589,1591,1593,1596],{"class":267,"line":268},[265,1581,451],{"class":271},[265,1583,454],{"class":286},[265,1585,1586],{"class":282}," evlog",[265,1588,460],{"class":286},[265,1590,463],{"class":271},[265,1592,466],{"class":286},[265,1594,1595],{"class":306},"evlog\u002Fhono",[265,1597,472],{"class":286},[265,1599,1600],{"class":267,"line":290},[265,1601,478],{"emptyLinePlaceholder":477},[265,1603,1604,1607,1609,1612,1614,1616,1618],{"class":267,"line":318},[265,1605,1606],{"class":282},"app",[265,1608,1279],{"class":286},[265,1610,1611],{"class":278},"use",[265,1613,283],{"class":282},[265,1615,623],{"class":278},[265,1617,283],{"class":282},[265,1619,287],{"class":286},[265,1621,1622,1624,1626,1628,1630],{"class":267,"line":329},[265,1623,801],{"class":293},[265,1625,283],{"class":286},[265,1627,1303],{"class":1263},[265,1629,975],{"class":286},[265,1631,326],{"class":286},[265,1633,1634,1636,1638,1640,1642,1644,1646,1648,1650,1652,1654,1656,1658,1660,1662],{"class":267,"line":339},[265,1635,1314],{"class":271},[265,1637,1300],{"class":293},[265,1639,1303],{"class":282},[265,1641,1279],{"class":286},[265,1643,1323],{"class":282},[265,1645,1279],{"class":286},[265,1647,1328],{"class":282},[265,1649,1331],{"class":286},[265,1651,1334],{"class":282},[265,1653,1337],{"class":286},[265,1655,466],{"class":286},[265,1657,1342],{"class":306},[265,1659,303],{"class":286},[265,1661,1347],{"class":293},[265,1663,287],{"class":286},[265,1665,1666,1668,1670,1672,1674],{"class":267,"line":349},[265,1667,1354],{"class":282},[265,1669,1279],{"class":286},[265,1671,1359],{"class":282},[265,1673,501],{"class":286},[265,1675,1365],{"class":1364},[265,1677,1678],{"class":267,"line":368},[265,1679,1370],{"class":286},[265,1681,1682],{"class":267,"line":384},[265,1683,431],{"class":286},[265,1685,1686,1688],{"class":267,"line":400},[265,1687,437],{"class":286},[265,1689,1690],{"class":282},"))\n",[234,1692,1693,1694,1696],{},"The ",[262,1695,1303],{}," object contains:",[905,1698,1699,1710],{},[908,1700,1701],{},[911,1702,1703,1706,1708],{},[914,1704,1705],{},"Field",[914,1707,919],{},[914,1709,922],{},[924,1711,1712,1726,1739,1753,1767,1784],{},[911,1713,1714,1718,1723],{},[929,1715,1716],{},[262,1717,885],{},[929,1719,1720],{},[262,1721,1722],{},"number | undefined",[929,1724,1725],{},"HTTP response status",[911,1727,1728,1732,1736],{},[929,1729,1730],{},[262,1731,889],{},[929,1733,1734],{},[262,1735,1722],{},[929,1737,1738],{},"Request duration in ms",[911,1740,1741,1745,1750],{},[929,1742,1743],{},[262,1744,893],{},[929,1746,1747],{},[262,1748,1749],{},"string | undefined",[929,1751,1752],{},"Request path",[911,1754,1755,1760,1764],{},[929,1756,1757],{},[262,1758,1759],{},"method",[929,1761,1762],{},[262,1763,1749],{},[929,1765,1766],{},"HTTP method",[911,1768,1769,1773,1778],{},[929,1770,1771],{},[262,1772,1323],{},[929,1774,1775],{},[262,1776,1777],{},"Record\u003Cstring, unknown>",[929,1779,1780,1781],{},"All fields set via ",[262,1782,1783],{},"log.set()",[911,1785,1786,1790,1795],{},[929,1787,1788],{},[262,1789,1359],{},[929,1791,1792],{},[262,1793,1794],{},"boolean",[929,1796,1797,1798,1801],{},"Set to ",[262,1799,1800],{},"true"," to force-keep",[238,1803,1805],{"id":1804},"production-example","Production Example",[234,1807,1808],{},"A typical production configuration that balances cost and visibility:",[251,1810,1811,2066,2273],{},[254,1812,1814],{"className":256,"code":1813,"filename":258,"language":259,"meta":260,"style":260},"export default defineNuxtConfig({\n  modules: ['evlog\u002Fnuxt'],\n  evlog: {\n    env: { service: 'my-app' },\n  },\n  $production: {\n    evlog: {\n      sampling: {\n        rates: {\n          info: 10,\n          warn: 50,\n          debug: 0,\n          error: 100,\n        },\n        keep: [\n          { status: 400 },\n          { duration: 1000 },\n          { path: '\u002Fapi\u002Fpayments\u002F**' },\n          { path: '\u002Fapi\u002Fauth\u002F**' },\n        ],\n      },\n    },\n  },\n})\n",[262,1815,1816,1828,1846,1854,1875,1879,1888,1897,1906,1915,1926,1937,1948,1959,1964,1974,1988,2001,2018,2036,2044,2049,2054,2059],{"__ignoreMap":260},[265,1817,1818,1820,1822,1824,1826],{"class":267,"line":268},[265,1819,272],{"class":271},[265,1821,275],{"class":271},[265,1823,279],{"class":278},[265,1825,283],{"class":282},[265,1827,287],{"class":286},[265,1829,1830,1832,1834,1836,1838,1840,1842,1844],{"class":267,"line":290},[265,1831,294],{"class":293},[265,1833,297],{"class":286},[265,1835,300],{"class":282},[265,1837,303],{"class":286},[265,1839,307],{"class":306},[265,1841,303],{"class":286},[265,1843,312],{"class":282},[265,1845,315],{"class":286},[265,1847,1848,1850,1852],{"class":267,"line":318},[265,1849,321],{"class":293},[265,1851,297],{"class":286},[265,1853,326],{"class":286},[265,1855,1856,1859,1861,1863,1865,1867,1869,1871,1873],{"class":267,"line":329},[265,1857,1858],{"class":293},"    env",[265,1860,297],{"class":286},[265,1862,454],{"class":286},[265,1864,650],{"class":293},[265,1866,297],{"class":286},[265,1868,466],{"class":286},[265,1870,519],{"class":306},[265,1872,303],{"class":286},[265,1874,661],{"class":286},[265,1876,1877],{"class":267,"line":339},[265,1878,431],{"class":286},[265,1880,1881,1884,1886],{"class":267,"line":349},[265,1882,1883],{"class":293},"  $production",[265,1885,297],{"class":286},[265,1887,326],{"class":286},[265,1889,1890,1893,1895],{"class":267,"line":368},[265,1891,1892],{"class":293},"    evlog",[265,1894,297],{"class":286},[265,1896,326],{"class":286},[265,1898,1899,1902,1904],{"class":267,"line":384},[265,1900,1901],{"class":293},"      sampling",[265,1903,297],{"class":286},[265,1905,326],{"class":286},[265,1907,1908,1911,1913],{"class":267,"line":400},[265,1909,1910],{"class":293},"        rates",[265,1912,297],{"class":286},[265,1914,326],{"class":286},[265,1916,1917,1920,1922,1924],{"class":267,"line":416},[265,1918,1919],{"class":293},"          info",[265,1921,297],{"class":286},[265,1923,358],{"class":357},[265,1925,315],{"class":286},[265,1927,1928,1931,1933,1935],{"class":267,"line":422},[265,1929,1930],{"class":293},"          warn",[265,1932,297],{"class":286},[265,1934,376],{"class":357},[265,1936,315],{"class":286},[265,1938,1939,1942,1944,1946],{"class":267,"line":428},[265,1940,1941],{"class":293},"          debug",[265,1943,297],{"class":286},[265,1945,392],{"class":357},[265,1947,315],{"class":286},[265,1949,1950,1953,1955,1957],{"class":267,"line":434},[265,1951,1952],{"class":293},"          error",[265,1954,297],{"class":286},[265,1956,408],{"class":357},[265,1958,315],{"class":286},[265,1960,1961],{"class":267,"line":1567},[265,1962,1963],{"class":286},"        },\n",[265,1965,1967,1970,1972],{"class":267,"line":1966},15,[265,1968,1969],{"class":293},"        keep",[265,1971,297],{"class":286},[265,1973,806],{"class":282},[265,1975,1977,1980,1982,1984,1986],{"class":267,"line":1976},16,[265,1978,1979],{"class":286},"          {",[265,1981,814],{"class":293},[265,1983,297],{"class":286},[265,1985,819],{"class":357},[265,1987,661],{"class":286},[265,1989,1991,1993,1995,1997,1999],{"class":267,"line":1990},17,[265,1992,1979],{"class":286},[265,1994,832],{"class":293},[265,1996,297],{"class":286},[265,1998,837],{"class":357},[265,2000,661],{"class":286},[265,2002,2004,2006,2008,2010,2012,2014,2016],{"class":267,"line":2003},18,[265,2005,1979],{"class":286},[265,2007,849],{"class":293},[265,2009,297],{"class":286},[265,2011,466],{"class":286},[265,2013,856],{"class":306},[265,2015,303],{"class":286},[265,2017,661],{"class":286},[265,2019,2021,2023,2025,2027,2029,2032,2034],{"class":267,"line":2020},19,[265,2022,1979],{"class":286},[265,2024,849],{"class":293},[265,2026,297],{"class":286},[265,2028,466],{"class":286},[265,2030,2031],{"class":306},"\u002Fapi\u002Fauth\u002F**",[265,2033,303],{"class":286},[265,2035,661],{"class":286},[265,2037,2039,2042],{"class":267,"line":2038},20,[265,2040,2041],{"class":282},"        ]",[265,2043,315],{"class":286},[265,2045,2047],{"class":267,"line":2046},21,[265,2048,419],{"class":286},[265,2050,2052],{"class":267,"line":2051},22,[265,2053,425],{"class":286},[265,2055,2057],{"class":267,"line":2056},23,[265,2058,431],{"class":286},[265,2060,2062,2064],{"class":267,"line":2061},24,[265,2063,437],{"class":286},[265,2065,440],{"class":282},[254,2067,2069],{"className":256,"code":2068,"filename":444,"language":259,"meta":260,"style":260},"import { createEvlog } from 'evlog\u002Fnext'\n\nexport const { withEvlog, useLogger } = createEvlog({\n  service: 'my-app',\n  sampling: {\n    rates: {\n      info: 10,\n      warn: 50,\n      debug: 0,\n      error: 100,\n    },\n    keep: [\n      { status: 400 },\n      { duration: 1000 },\n      { path: '\u002Fapi\u002Fpayments\u002F**' },\n      { path: '\u002Fapi\u002Fauth\u002F**' },\n    ],\n  },\n})\n",[262,2070,2071,2089,2093,2117,2131,2139,2147,2157,2167,2177,2187,2191,2199,2212,2224,2240,2256,2263,2267],{"__ignoreMap":260},[265,2072,2073,2075,2077,2079,2081,2083,2085,2087],{"class":267,"line":268},[265,2074,451],{"class":271},[265,2076,454],{"class":286},[265,2078,457],{"class":282},[265,2080,460],{"class":286},[265,2082,463],{"class":271},[265,2084,466],{"class":286},[265,2086,469],{"class":306},[265,2088,472],{"class":286},[265,2090,2091],{"class":267,"line":290},[265,2092,478],{"emptyLinePlaceholder":477},[265,2094,2095,2097,2099,2101,2103,2105,2107,2109,2111,2113,2115],{"class":267,"line":318},[265,2096,272],{"class":271},[265,2098,486],{"class":485},[265,2100,454],{"class":286},[265,2102,491],{"class":282},[265,2104,361],{"class":286},[265,2106,496],{"class":282},[265,2108,437],{"class":286},[265,2110,501],{"class":286},[265,2112,457],{"class":278},[265,2114,283],{"class":282},[265,2116,287],{"class":286},[265,2118,2119,2121,2123,2125,2127,2129],{"class":267,"line":329},[265,2120,512],{"class":293},[265,2122,297],{"class":286},[265,2124,466],{"class":286},[265,2126,519],{"class":306},[265,2128,303],{"class":286},[265,2130,315],{"class":286},[265,2132,2133,2135,2137],{"class":267,"line":339},[265,2134,528],{"class":293},[265,2136,297],{"class":286},[265,2138,326],{"class":286},[265,2140,2141,2143,2145],{"class":267,"line":349},[265,2142,537],{"class":293},[265,2144,297],{"class":286},[265,2146,326],{"class":286},[265,2148,2149,2151,2153,2155],{"class":267,"line":368},[265,2150,546],{"class":293},[265,2152,297],{"class":286},[265,2154,358],{"class":357},[265,2156,315],{"class":286},[265,2158,2159,2161,2163,2165],{"class":267,"line":384},[265,2160,557],{"class":293},[265,2162,297],{"class":286},[265,2164,376],{"class":357},[265,2166,315],{"class":286},[265,2168,2169,2171,2173,2175],{"class":267,"line":400},[265,2170,568],{"class":293},[265,2172,297],{"class":286},[265,2174,392],{"class":357},[265,2176,315],{"class":286},[265,2178,2179,2181,2183,2185],{"class":267,"line":416},[265,2180,579],{"class":293},[265,2182,297],{"class":286},[265,2184,408],{"class":357},[265,2186,315],{"class":286},[265,2188,2189],{"class":267,"line":422},[265,2190,425],{"class":286},[265,2192,2193,2195,2197],{"class":267,"line":428},[265,2194,1477],{"class":293},[265,2196,297],{"class":286},[265,2198,806],{"class":282},[265,2200,2201,2204,2206,2208,2210],{"class":267,"line":434},[265,2202,2203],{"class":286},"      {",[265,2205,814],{"class":293},[265,2207,297],{"class":286},[265,2209,819],{"class":357},[265,2211,661],{"class":286},[265,2213,2214,2216,2218,2220,2222],{"class":267,"line":1567},[265,2215,2203],{"class":286},[265,2217,832],{"class":293},[265,2219,297],{"class":286},[265,2221,837],{"class":357},[265,2223,661],{"class":286},[265,2225,2226,2228,2230,2232,2234,2236,2238],{"class":267,"line":1966},[265,2227,2203],{"class":286},[265,2229,849],{"class":293},[265,2231,297],{"class":286},[265,2233,466],{"class":286},[265,2235,856],{"class":306},[265,2237,303],{"class":286},[265,2239,661],{"class":286},[265,2241,2242,2244,2246,2248,2250,2252,2254],{"class":267,"line":1976},[265,2243,2203],{"class":286},[265,2245,849],{"class":293},[265,2247,297],{"class":286},[265,2249,466],{"class":286},[265,2251,2031],{"class":306},[265,2253,303],{"class":286},[265,2255,661],{"class":286},[265,2257,2258,2261],{"class":267,"line":1990},[265,2259,2260],{"class":282},"    ]",[265,2262,315],{"class":286},[265,2264,2265],{"class":267,"line":2003},[265,2266,431],{"class":286},[265,2268,2269,2271],{"class":267,"line":2020},[265,2270,437],{"class":286},[265,2272,440],{"class":282},[254,2274,2276],{"className":256,"code":2275,"filename":603,"language":259,"meta":260,"style":260},"import { initLogger } from 'evlog'\n\ninitLogger({\n  env: { service: 'my-app' },\n  sampling: {\n    rates: {\n      info: 10,\n      warn: 50,\n      debug: 0,\n      error: 100,\n    },\n    keep: [\n      { status: 400 },\n      { duration: 1000 },\n      { path: '\u002Fapi\u002Fpayments\u002F**' },\n      { path: '\u002Fapi\u002Fauth\u002F**' },\n    ],\n  },\n})\n",[262,2277,2278,2296,2300,2308,2328,2336,2344,2354,2364,2374,2384,2388,2396,2408,2420,2436,2452,2458,2462],{"__ignoreMap":260},[265,2279,2280,2282,2284,2286,2288,2290,2292,2294],{"class":267,"line":268},[265,2281,451],{"class":271},[265,2283,454],{"class":286},[265,2285,614],{"class":282},[265,2287,460],{"class":286},[265,2289,463],{"class":271},[265,2291,466],{"class":286},[265,2293,623],{"class":306},[265,2295,472],{"class":286},[265,2297,2298],{"class":267,"line":290},[265,2299,478],{"emptyLinePlaceholder":477},[265,2301,2302,2304,2306],{"class":267,"line":318},[265,2303,634],{"class":278},[265,2305,283],{"class":282},[265,2307,287],{"class":286},[265,2309,2310,2312,2314,2316,2318,2320,2322,2324,2326],{"class":267,"line":329},[265,2311,643],{"class":293},[265,2313,297],{"class":286},[265,2315,454],{"class":286},[265,2317,650],{"class":293},[265,2319,297],{"class":286},[265,2321,466],{"class":286},[265,2323,519],{"class":306},[265,2325,303],{"class":286},[265,2327,661],{"class":286},[265,2329,2330,2332,2334],{"class":267,"line":339},[265,2331,528],{"class":293},[265,2333,297],{"class":286},[265,2335,326],{"class":286},[265,2337,2338,2340,2342],{"class":267,"line":349},[265,2339,537],{"class":293},[265,2341,297],{"class":286},[265,2343,326],{"class":286},[265,2345,2346,2348,2350,2352],{"class":267,"line":368},[265,2347,546],{"class":293},[265,2349,297],{"class":286},[265,2351,358],{"class":357},[265,2353,315],{"class":286},[265,2355,2356,2358,2360,2362],{"class":267,"line":384},[265,2357,557],{"class":293},[265,2359,297],{"class":286},[265,2361,376],{"class":357},[265,2363,315],{"class":286},[265,2365,2366,2368,2370,2372],{"class":267,"line":400},[265,2367,568],{"class":293},[265,2369,297],{"class":286},[265,2371,392],{"class":357},[265,2373,315],{"class":286},[265,2375,2376,2378,2380,2382],{"class":267,"line":416},[265,2377,579],{"class":293},[265,2379,297],{"class":286},[265,2381,408],{"class":357},[265,2383,315],{"class":286},[265,2385,2386],{"class":267,"line":422},[265,2387,425],{"class":286},[265,2389,2390,2392,2394],{"class":267,"line":428},[265,2391,1477],{"class":293},[265,2393,297],{"class":286},[265,2395,806],{"class":282},[265,2397,2398,2400,2402,2404,2406],{"class":267,"line":434},[265,2399,2203],{"class":286},[265,2401,814],{"class":293},[265,2403,297],{"class":286},[265,2405,819],{"class":357},[265,2407,661],{"class":286},[265,2409,2410,2412,2414,2416,2418],{"class":267,"line":1567},[265,2411,2203],{"class":286},[265,2413,832],{"class":293},[265,2415,297],{"class":286},[265,2417,837],{"class":357},[265,2419,661],{"class":286},[265,2421,2422,2424,2426,2428,2430,2432,2434],{"class":267,"line":1966},[265,2423,2203],{"class":286},[265,2425,849],{"class":293},[265,2427,297],{"class":286},[265,2429,466],{"class":286},[265,2431,856],{"class":306},[265,2433,303],{"class":286},[265,2435,661],{"class":286},[265,2437,2438,2440,2442,2444,2446,2448,2450],{"class":267,"line":1976},[265,2439,2203],{"class":286},[265,2441,849],{"class":293},[265,2443,297],{"class":286},[265,2445,466],{"class":286},[265,2447,2031],{"class":306},[265,2449,303],{"class":286},[265,2451,661],{"class":286},[265,2453,2454,2456],{"class":267,"line":1990},[265,2455,2260],{"class":282},[265,2457,315],{"class":286},[265,2459,2460],{"class":267,"line":2003},[265,2461,431],{"class":286},[265,2463,2464,2466],{"class":267,"line":2020},[265,2465,437],{"class":286},[265,2467,440],{"class":282},[740,2469,2472,2473,2476],{"color":2470,"icon":2471},"warning","i-lucide-lightbulb","In Nuxt, use the ",[262,2474,2475],{},"$production"," override to keep full logging in development while sampling in production. In other frameworks, use your own environment check or config system.",[238,2478,2480],{"id":2479},"next-steps","Next Steps",[2482,2483,2484,2490],"ul",{},[987,2485,2486,2489],{},[2487,2488,131],"a",{"href":132}," — Security and production checklist",[987,2491,2492,2494],{},[2487,2493,121],{"href":122}," — Design effective wide events",[2496,2497,2498],"style",{},"html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}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 .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 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}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 .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}",{"title":260,"searchDepth":290,"depth":290,"links":2500},[2501,2502,2505,2506,2507,2508],{"id":240,"depth":290,"text":241},{"id":750,"depth":290,"text":751,"children":2503},[2504],{"id":902,"depth":318,"text":903},{"id":978,"depth":290,"text":979},{"id":1228,"depth":290,"text":1229},{"id":1804,"depth":290,"text":1805},{"id":2479,"depth":290,"text":2480},"Control log volume with two-tier sampling. Head sampling drops noise by level, tail sampling rescues critical events based on outcome. Never miss errors, slow requests, or critical paths.","md",[2512,2515],{"label":131,"icon":134,"to":132,"color":2513,"variant":2514},"neutral","subtle",{"label":121,"icon":124,"to":122,"color":2513,"variant":2514},{},{"icon":143},{"title":140,"description":2509},"w1AkrJKA1iAMqwWVkgws2LjXd4Mb5JJlWg45Od_AiU0",[2521,2523],{"title":136,"path":137,"stem":138,"description":2522,"icon":99,"children":-1},"Add compile-time type safety to your wide events with TypeScript module augmentation. Prevent typos and ensure consistent field names across your codebase.",{"title":145,"path":146,"stem":147,"description":2524,"icon":148,"children":-1},"Capture browser events with structured logging. Same API as the server, with automatic console styling, user identity context, and optional server transport.",1773428024925]