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