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