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