[{"data":1,"prerenderedAt":2048},["ShallowReactive",2],{"navigation_docs":3,"-core-concepts-configuration":292,"-core-concepts-configuration-surround":2043},[4,30,65,110,198,262,278],{"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,105],{"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,"icon":109},"Auto-Redaction","\u002Fcore-concepts\u002Fredaction","3.core-concepts\u002F7.redaction","i-lucide-eye-off",{"title":111,"path":112,"stem":113,"children":114,"page":29},"Frameworks","\u002Fframeworks","4.frameworks",[115,119,124,129,134,139,144,149,154,159,164,169,174,179,183,188,193],{"title":36,"path":116,"stem":117,"icon":118},"\u002Fframeworks\u002Foverview","4.frameworks\u002F00.overview","i-lucide-layout-grid",{"title":120,"path":121,"stem":122,"icon":123},"Nuxt","\u002Fframeworks\u002Fnuxt","4.frameworks\u002F01.nuxt","i-simple-icons-nuxtdotjs",{"title":125,"path":126,"stem":127,"icon":128},"Next.js","\u002Fframeworks\u002Fnextjs","4.frameworks\u002F02.nextjs","i-simple-icons-nextdotjs",{"title":130,"path":131,"stem":132,"icon":133},"SvelteKit","\u002Fframeworks\u002Fsveltekit","4.frameworks\u002F03.sveltekit","i-simple-icons-svelte",{"title":135,"path":136,"stem":137,"icon":138},"Nitro","\u002Fframeworks\u002Fnitro","4.frameworks\u002F04.nitro","i-custom-nitro",{"title":140,"path":141,"stem":142,"icon":143},"TanStack Start","\u002Fframeworks\u002Ftanstack-start","4.frameworks\u002F05.tanstack-start","i-custom-tanstack",{"title":145,"path":146,"stem":147,"icon":148},"NestJS","\u002Fframeworks\u002Fnestjs","4.frameworks\u002F06.nestjs","i-simple-icons-nestjs",{"title":150,"path":151,"stem":152,"icon":153},"Express","\u002Fframeworks\u002Fexpress","4.frameworks\u002F07.express","i-simple-icons-express",{"title":155,"path":156,"stem":157,"icon":158},"Hono","\u002Fframeworks\u002Fhono","4.frameworks\u002F08.hono","i-simple-icons-hono",{"title":160,"path":161,"stem":162,"icon":163},"Fastify","\u002Fframeworks\u002Ffastify","4.frameworks\u002F09.fastify","i-simple-icons-fastify",{"title":165,"path":166,"stem":167,"icon":168},"Elysia","\u002Fframeworks\u002Felysia","4.frameworks\u002F10.elysia","i-custom-elysia",{"title":170,"path":171,"stem":172,"icon":173},"React Router","\u002Fframeworks\u002Freact-router","4.frameworks\u002F11.react-router","i-custom-reactrouter",{"title":175,"path":176,"stem":177,"icon":178},"Cloudflare Workers","\u002Fframeworks\u002Fcloudflare-workers","4.frameworks\u002F12.cloudflare-workers","i-simple-icons-cloudflare",{"title":180,"path":181,"stem":182,"icon":89},"Standalone","\u002Fframeworks\u002Fstandalone","4.frameworks\u002F13.standalone",{"title":184,"path":185,"stem":186,"icon":187},"Astro","\u002Fframeworks\u002Fastro","4.frameworks\u002F14.astro","i-simple-icons-astro",{"title":189,"path":190,"stem":191,"icon":192},"Custom Integration","\u002Fframeworks\u002Fcustom-integration","4.frameworks\u002F15.custom-integration","i-lucide-puzzle",{"title":194,"path":195,"stem":196,"icon":197},"AWS Lambda","\u002Fframeworks\u002Faws-lambda","4.frameworks\u002F16.aws-lambda","i-custom-lambda",{"title":199,"path":200,"stem":201,"children":202,"page":29},"Adapters","\u002Fadapters","5.adapters",[203,207,212,217,222,227,232,237,242,247,252,257],{"title":36,"path":204,"stem":205,"icon":206},"\u002Fadapters\u002Foverview","5.adapters\u002F1.overview","i-custom-plug",{"title":208,"path":209,"stem":210,"icon":211},"Custom Adapters","\u002Fadapters\u002Fcustom","5.adapters\u002F10.custom","i-lucide-code",{"title":213,"path":214,"stem":215,"icon":216},"Pipeline","\u002Fadapters\u002Fpipeline","5.adapters\u002F11.pipeline","i-lucide-workflow",{"title":218,"path":219,"stem":220,"icon":221},"HTTP","\u002Fadapters\u002Fhttp","5.adapters\u002F12.http","i-lucide-globe",{"title":223,"path":224,"stem":225,"icon":226},"Axiom","\u002Fadapters\u002Faxiom","5.adapters\u002F2.axiom","i-custom-axiom",{"title":228,"path":229,"stem":230,"icon":231},"OTLP","\u002Fadapters\u002Fotlp","5.adapters\u002F3.otlp","i-simple-icons-opentelemetry",{"title":233,"path":234,"stem":235,"icon":236},"PostHog","\u002Fadapters\u002Fposthog","5.adapters\u002F4.posthog","i-simple-icons-posthog",{"title":238,"path":239,"stem":240,"icon":241},"Sentry","\u002Fadapters\u002Fsentry","5.adapters\u002F5.sentry","i-simple-icons-sentry",{"title":243,"path":244,"stem":245,"icon":246},"Better Stack","\u002Fadapters\u002Fbetter-stack","5.adapters\u002F6.better-stack","i-simple-icons-betterstack",{"title":248,"path":249,"stem":250,"icon":251},"File System","\u002Fadapters\u002Ffs","5.adapters\u002F7.fs","i-lucide-hard-drive",{"title":253,"path":254,"stem":255,"icon":256},"Datadog","\u002Fadapters\u002Fdatadog","5.adapters\u002F8.datadog","i-simple-icons-datadog",{"title":258,"path":259,"stem":260,"icon":261},"HyperDX","\u002Fadapters\u002Fhyperdx","5.adapters\u002F9.hyperdx","i-custom-hyperdx",{"title":263,"path":264,"stem":265,"children":266,"page":29},"Enrichers","\u002Fenrichers","6.enrichers",[267,270,274],{"title":36,"path":268,"stem":269,"icon":28},"\u002Fenrichers\u002Foverview","6.enrichers\u002F1.overview",{"title":271,"path":272,"stem":273,"icon":192},"Built-in","\u002Fenrichers\u002Fbuilt-in","6.enrichers\u002F2.built-in",{"title":275,"path":276,"stem":277,"icon":211},"Custom","\u002Fenrichers\u002Fcustom","6.enrichers\u002F3.custom",{"title":279,"path":280,"stem":281,"children":282,"page":29},"NuxtHub","\u002Fnuxthub","7.nuxthub",[283,287],{"title":36,"path":284,"stem":285,"icon":286},"\u002Fnuxthub\u002Foverview","7.nuxthub\u002F1.overview","i-lucide-database",{"title":288,"path":289,"stem":290,"icon":291},"Retention","\u002Fnuxthub\u002Fretention","7.nuxthub\u002F2.retention","i-lucide-clock",{"id":293,"title":76,"body":294,"description":2031,"extension":2032,"links":2033,"meta":2039,"navigation":2040,"path":77,"seo":2041,"stem":78,"__hash__":2042},"docs\u002F3.core-concepts\u002F1.configuration.md",{"type":295,"value":296,"toc":2015},"minimark",[297,310,320,327,602,829,836,893,909,913,923,1062,1066,1072,1172,1181,1185,1188,1567,1693,1715,1719,1728,1854,1858,1861,1864,1874,1969,1976,1979,2004,2011],[298,299,300,301,305,306,309],"p",{},"evlog has two configuration surfaces: ",[302,303,304],"strong",{},"global options"," set once at startup, and ",[302,307,308],{},"middleware options"," set per-framework integration. This page documents both.",[311,312,314,315,319],"h2",{"id":313},"global-options-initlogger","Global Options (",[316,317,318],"code",{},"initLogger",")",[298,321,322,323,326],{},"These options apply to all frameworks. Call ",[316,324,325],{},"initLogger()"," once at application startup for standalone frameworks (Hono, Express, Fastify, Elysia, NestJS, SvelteKit, Cloudflare Workers). For Nuxt and Nitro, these are set via module config and passed through automatically.",[328,329,335],"pre",{"className":330,"code":331,"filename":332,"language":333,"meta":334,"style":334},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { initLogger } from 'evlog'\nimport { createAxiomDrain } from 'evlog\u002Faxiom'\n\ninitLogger({\n  enabled: true,\n  env: { service: 'my-api', environment: 'production' },\n  pretty: false,\n  silent: false,\n  stringify: true,\n  minLevel: 'info',\n  sampling: { rates: { info: 10 }, keep: [{ status: 400 }] },\n  drain: createAxiomDrain(),\n})\n","src\u002Findex.ts","typescript","",[316,336,337,370,391,398,410,427,468,481,493,505,522,578,593],{"__ignoreMap":334},[338,339,342,346,350,354,357,360,363,367],"span",{"class":340,"line":341},"line",1,[338,343,345],{"class":344},"s7zQu","import",[338,347,349],{"class":348},"sMK4o"," {",[338,351,353],{"class":352},"sTEyZ"," initLogger",[338,355,356],{"class":348}," }",[338,358,359],{"class":344}," from",[338,361,362],{"class":348}," '",[338,364,366],{"class":365},"sfazB","evlog",[338,368,369],{"class":348},"'\n",[338,371,373,375,377,380,382,384,386,389],{"class":340,"line":372},2,[338,374,345],{"class":344},[338,376,349],{"class":348},[338,378,379],{"class":352}," createAxiomDrain",[338,381,356],{"class":348},[338,383,359],{"class":344},[338,385,362],{"class":348},[338,387,388],{"class":365},"evlog\u002Faxiom",[338,390,369],{"class":348},[338,392,394],{"class":340,"line":393},3,[338,395,397],{"emptyLinePlaceholder":396},true,"\n",[338,399,401,404,407],{"class":340,"line":400},4,[338,402,318],{"class":403},"s2Zo4",[338,405,406],{"class":352},"(",[338,408,409],{"class":348},"{\n",[338,411,413,417,420,424],{"class":340,"line":412},5,[338,414,416],{"class":415},"swJcz","  enabled",[338,418,419],{"class":348},":",[338,421,423],{"class":422},"sfNiH"," true",[338,425,426],{"class":348},",\n",[338,428,430,433,435,437,440,442,444,447,450,453,456,458,460,463,465],{"class":340,"line":429},6,[338,431,432],{"class":415},"  env",[338,434,419],{"class":348},[338,436,349],{"class":348},[338,438,439],{"class":415}," service",[338,441,419],{"class":348},[338,443,362],{"class":348},[338,445,446],{"class":365},"my-api",[338,448,449],{"class":348},"'",[338,451,452],{"class":348},",",[338,454,455],{"class":415}," environment",[338,457,419],{"class":348},[338,459,362],{"class":348},[338,461,462],{"class":365},"production",[338,464,449],{"class":348},[338,466,467],{"class":348}," },\n",[338,469,471,474,476,479],{"class":340,"line":470},7,[338,472,473],{"class":415},"  pretty",[338,475,419],{"class":348},[338,477,478],{"class":422}," false",[338,480,426],{"class":348},[338,482,484,487,489,491],{"class":340,"line":483},8,[338,485,486],{"class":415},"  silent",[338,488,419],{"class":348},[338,490,478],{"class":422},[338,492,426],{"class":348},[338,494,496,499,501,503],{"class":340,"line":495},9,[338,497,498],{"class":415},"  stringify",[338,500,419],{"class":348},[338,502,423],{"class":422},[338,504,426],{"class":348},[338,506,508,511,513,515,518,520],{"class":340,"line":507},10,[338,509,510],{"class":415},"  minLevel",[338,512,419],{"class":348},[338,514,362],{"class":348},[338,516,517],{"class":365},"info",[338,519,449],{"class":348},[338,521,426],{"class":348},[338,523,525,528,530,532,535,537,539,542,544,548,551,554,556,559,562,565,567,570,572,575],{"class":340,"line":524},11,[338,526,527],{"class":415},"  sampling",[338,529,419],{"class":348},[338,531,349],{"class":348},[338,533,534],{"class":415}," rates",[338,536,419],{"class":348},[338,538,349],{"class":348},[338,540,541],{"class":415}," info",[338,543,419],{"class":348},[338,545,547],{"class":546},"sbssI"," 10",[338,549,550],{"class":348}," },",[338,552,553],{"class":415}," keep",[338,555,419],{"class":348},[338,557,558],{"class":352}," [",[338,560,561],{"class":348},"{",[338,563,564],{"class":415}," status",[338,566,419],{"class":348},[338,568,569],{"class":546}," 400",[338,571,356],{"class":348},[338,573,574],{"class":352},"] ",[338,576,577],{"class":348},"},\n",[338,579,581,584,586,588,591],{"class":340,"line":580},12,[338,582,583],{"class":415},"  drain",[338,585,419],{"class":348},[338,587,379],{"class":403},[338,589,590],{"class":352},"()",[338,592,426],{"class":348},[338,594,596,599],{"class":340,"line":595},13,[338,597,598],{"class":348},"}",[338,600,601],{"class":352},")\n",[603,604,605,624],"table",{},[606,607,608],"thead",{},[609,610,611,615,618,621],"tr",{},[612,613,614],"th",{},"Option",[612,616,617],{},"Type",[612,619,620],{},"Default",[612,622,623],{},"Description",[625,626,627,652,670,692,710,734,762,785,810],"tbody",{},[609,628,629,635,640,645],{},[630,631,632],"td",{},[316,633,634],{},"enabled",[630,636,637],{},[316,638,639],{},"boolean",[630,641,642],{},[316,643,644],{},"true",[630,646,647,648,651],{},"Enable\u002Fdisable all logging globally. When ",[316,649,650],{},"false",", all operations become no-ops",[609,653,654,659,664,667],{},[630,655,656],{},[316,657,658],{},"env",[630,660,661],{},[316,662,663],{},"Partial\u003CEnvironmentContext>",[630,665,666],{},"Auto-detected",[630,668,669],{},"Environment context overrides (see below)",[609,671,672,677,681,686],{},[630,673,674],{},[316,675,676],{},"pretty",[630,678,679],{},[316,680,639],{},[630,682,683,685],{},[316,684,644],{}," in dev",[630,687,688,689],{},"Pretty print with tree formatting. Auto-detected based on ",[316,690,691],{},"NODE_ENV",[609,693,694,699,703,707],{},[630,695,696],{},[316,697,698],{},"silent",[630,700,701],{},[316,702,639],{},[630,704,705],{},[316,706,650],{},[630,708,709],{},"Suppress console output. Events are still built, sampled, and passed to drains",[609,711,712,717,721,725],{},[630,713,714],{},[316,715,716],{},"stringify",[630,718,719],{},[316,720,639],{},[630,722,723],{},[316,724,644],{},[630,726,727,728,730,731,733],{},"Emit JSON strings when ",[316,729,676],{}," is disabled. Set to ",[316,732,650],{}," for Cloudflare Workers",[609,735,736,741,746,751],{},[630,737,738],{},[316,739,740],{},"minLevel",[630,742,743],{},[316,744,745],{},"'debug' | 'info' | 'warn' | 'error'",[630,747,748],{},[316,749,750],{},"'debug'",[630,752,753,754,757,758,761],{},"Minimum severity for the global ",[316,755,756],{},"log"," API only (not ",[316,759,760],{},"createLogger"," \u002F request wide events). Order: debug \u003C info \u003C warn \u003C error",[609,763,764,769,774,779],{},[630,765,766],{},[316,767,768],{},"sampling",[630,770,771],{},[316,772,773],{},"SamplingConfig",[630,775,776],{},[316,777,778],{},"undefined",[630,780,781,782],{},"Head and tail sampling configuration. See ",[783,784,81],"a",{"href":82},[609,786,787,792,797,802],{},[630,788,789],{},[316,790,791],{},"redact",[630,793,794],{},[316,795,796],{},"boolean | RedactConfig",[630,798,799,801],{},[316,800,644],{}," in production",[630,803,804,805,807,808],{},"Enabled by default in production. ",[316,806,650],{}," to disable. Object for fine-grained control. See ",[783,809,106],{"href":107},[609,811,812,817,822,826],{},[630,813,814],{},[316,815,816],{},"drain",[630,818,819],{},[316,820,821],{},"(ctx: DrainContext) => void",[630,823,824],{},[316,825,778],{},[630,827,828],{},"Drain callback for sending events to external services",[830,831,833,835],"h3",{"id":832},"minlevel-vs-sampling",[316,834,740],{}," vs sampling",[837,838,839,877],"ul",{},[840,841,842,846,847,850,851,854,855,858,859,862,863,866,867,872,873,876],"li",{},[302,843,844],{},[316,845,740],{}," is a ",[302,848,849],{},"hard threshold"," on the simple ",[316,852,853],{},"log.*"," API: levels below the threshold are never emitted. It does ",[302,856,857],{},"not"," apply to wide events from ",[316,860,861],{},"useLogger"," \u002F ",[316,864,865],{},"createLogger().emit()"," — use ",[302,868,869],{},[316,870,871],{},"sampling.rates"," (and tail ",[316,874,875],{},"keep",") for request volume.",[840,878,879,882,883,885,886,889,890,892],{},[302,880,881],{},"Head sampling"," (",[316,884,871],{},") is ",[302,887,888],{},"probabilistic"," on what is already allowed by ",[316,891,740],{}," for simple logs.",[298,894,895,896,862,899,902,903,905,906,908],{},"Evaluation order for ",[316,897,898],{},"log.info",[316,900,901],{},"log.debug"," \u002F etc.: ",[316,904,634],{}," → ",[316,907,740],{}," → head sampling → output.",[830,910,912],{"id":911},"environment-context","Environment Context",[298,914,915,916,918,919,922],{},"The ",[316,917,658],{}," option controls the fields included in every log event. Most values are auto-detected from environment variables and ",[316,920,921],{},"package.json",".",[603,924,925,939],{},[606,926,927],{},[609,928,929,932,934,936],{},[612,930,931],{},"Field",[612,933,617],{},[612,935,620],{},[612,937,938],{},"Auto-detected from",[625,940,941,967,987,1010,1036],{},[609,942,943,948,953,958],{},[630,944,945],{},[316,946,947],{},"service",[630,949,950],{},[316,951,952],{},"string",[630,954,955],{},[316,956,957],{},"'app'",[630,959,960,963,964,966],{},[316,961,962],{},"SERVICE_NAME",", ",[316,965,921],{}," name",[609,968,969,974,978,983],{},[630,970,971],{},[316,972,973],{},"environment",[630,975,976],{},[316,977,952],{},[630,979,980],{},[316,981,982],{},"'development'",[630,984,985],{},[316,986,691],{},[609,988,989,994,998,1002],{},[630,990,991],{},[316,992,993],{},"version",[630,995,996],{},[316,997,952],{},[630,999,1000],{},[316,1001,778],{},[630,1003,1004,963,1007,1009],{},[316,1005,1006],{},"APP_VERSION",[316,1008,921],{}," version",[609,1011,1012,1017,1021,1025],{},[630,1013,1014],{},[316,1015,1016],{},"commitHash",[630,1018,1019],{},[316,1020,952],{},[630,1022,1023],{},[316,1024,778],{},[630,1026,1027,963,1030,963,1033],{},[316,1028,1029],{},"COMMIT_SHA",[316,1031,1032],{},"GIT_COMMIT",[316,1034,1035],{},"VERCEL_GIT_COMMIT_SHA",[609,1037,1038,1043,1047,1051],{},[630,1039,1040],{},[316,1041,1042],{},"region",[630,1044,1045],{},[316,1046,952],{},[630,1048,1049],{},[316,1050,778],{},[630,1052,1053,963,1056,963,1059],{},[316,1054,1055],{},"FLY_REGION",[316,1057,1058],{},"AWS_REGION",[316,1060,1061],{},"VERCEL_REGION",[830,1063,1065],{"id":1064},"silent-mode","Silent Mode",[298,1067,1068,1069,1071],{},"Use ",[316,1070,698],{}," when your deployment platform captures stdout as its primary log ingestion (GCP Cloud Run, AWS Lambda, Fly.io, Railway, etc.) and you want a drain adapter to control the output format.",[328,1073,1075],{"className":330,"code":1074,"filename":332,"language":333,"meta":334,"style":334},"import { initLogger } from 'evlog'\nimport { createAxiomDrain } from 'evlog\u002Faxiom'\n\ninitLogger({\n  silent: process.env.NODE_ENV === 'production',\n  drain: createAxiomDrain(),\n})\n",[316,1076,1077,1095,1113,1117,1125,1154,1166],{"__ignoreMap":334},[338,1078,1079,1081,1083,1085,1087,1089,1091,1093],{"class":340,"line":341},[338,1080,345],{"class":344},[338,1082,349],{"class":348},[338,1084,353],{"class":352},[338,1086,356],{"class":348},[338,1088,359],{"class":344},[338,1090,362],{"class":348},[338,1092,366],{"class":365},[338,1094,369],{"class":348},[338,1096,1097,1099,1101,1103,1105,1107,1109,1111],{"class":340,"line":372},[338,1098,345],{"class":344},[338,1100,349],{"class":348},[338,1102,379],{"class":352},[338,1104,356],{"class":348},[338,1106,359],{"class":344},[338,1108,362],{"class":348},[338,1110,388],{"class":365},[338,1112,369],{"class":348},[338,1114,1115],{"class":340,"line":393},[338,1116,397],{"emptyLinePlaceholder":396},[338,1118,1119,1121,1123],{"class":340,"line":400},[338,1120,318],{"class":403},[338,1122,406],{"class":352},[338,1124,409],{"class":348},[338,1126,1127,1129,1131,1134,1136,1138,1140,1143,1146,1148,1150,1152],{"class":340,"line":412},[338,1128,486],{"class":415},[338,1130,419],{"class":348},[338,1132,1133],{"class":352}," process",[338,1135,922],{"class":348},[338,1137,658],{"class":352},[338,1139,922],{"class":348},[338,1141,1142],{"class":352},"NODE_ENV ",[338,1144,1145],{"class":348},"===",[338,1147,362],{"class":348},[338,1149,462],{"class":365},[338,1151,449],{"class":348},[338,1153,426],{"class":348},[338,1155,1156,1158,1160,1162,1164],{"class":340,"line":429},[338,1157,583],{"class":415},[338,1159,419],{"class":348},[338,1161,379],{"class":403},[338,1163,590],{"class":352},[338,1165,426],{"class":348},[338,1167,1168,1170],{"class":340,"line":470},[338,1169,598],{"class":348},[338,1171,601],{"class":352},[1173,1174,1177,1178,1180],"callout",{"color":1175,"icon":1176},"warning","i-lucide-alert-triangle","If ",[316,1179,698],{}," is enabled without a drain, events are built and sampled but never output anywhere. evlog will warn you about this at startup.",[311,1182,1184],{"id":1183},"middleware-options","Middleware Options",[298,1186,1187],{},"These options are passed to the framework middleware\u002Fplugin. They control per-request behavior: which routes to log, how to drain and enrich events, and custom tail sampling logic.",[1189,1190,1191,1408,1505],"code-group",{},[328,1192,1194],{"className":330,"code":1193,"filename":155,"language":333,"meta":334,"style":334},"app.use(evlog({\n  include: ['\u002Fapi\u002F**'],\n  exclude: ['\u002Fapi\u002Fhealth'],\n  routes: { '\u002Fapi\u002Fauth\u002F**': { service: 'auth' } },\n  drain: createAxiomDrain(),\n  enrich: (ctx) => { ctx.event.region = process.env.FLY_REGION },\n  keep: (ctx) => { if (ctx.duration > 2000) ctx.shouldKeep = true },\n}))\n",[316,1195,1196,1214,1235,1255,1290,1302,1350,1401],{"__ignoreMap":334},[338,1197,1198,1201,1203,1206,1208,1210,1212],{"class":340,"line":341},[338,1199,1200],{"class":352},"app",[338,1202,922],{"class":348},[338,1204,1205],{"class":403},"use",[338,1207,406],{"class":352},[338,1209,366],{"class":403},[338,1211,406],{"class":352},[338,1213,409],{"class":348},[338,1215,1216,1219,1221,1223,1225,1228,1230,1233],{"class":340,"line":372},[338,1217,1218],{"class":415},"  include",[338,1220,419],{"class":348},[338,1222,558],{"class":352},[338,1224,449],{"class":348},[338,1226,1227],{"class":365},"\u002Fapi\u002F**",[338,1229,449],{"class":348},[338,1231,1232],{"class":352},"]",[338,1234,426],{"class":348},[338,1236,1237,1240,1242,1244,1246,1249,1251,1253],{"class":340,"line":393},[338,1238,1239],{"class":415},"  exclude",[338,1241,419],{"class":348},[338,1243,558],{"class":352},[338,1245,449],{"class":348},[338,1247,1248],{"class":365},"\u002Fapi\u002Fhealth",[338,1250,449],{"class":348},[338,1252,1232],{"class":352},[338,1254,426],{"class":348},[338,1256,1257,1260,1262,1264,1266,1269,1271,1273,1275,1277,1279,1281,1284,1286,1288],{"class":340,"line":400},[338,1258,1259],{"class":415},"  routes",[338,1261,419],{"class":348},[338,1263,349],{"class":348},[338,1265,362],{"class":348},[338,1267,1268],{"class":415},"\u002Fapi\u002Fauth\u002F**",[338,1270,449],{"class":348},[338,1272,419],{"class":348},[338,1274,349],{"class":348},[338,1276,439],{"class":415},[338,1278,419],{"class":348},[338,1280,362],{"class":348},[338,1282,1283],{"class":365},"auth",[338,1285,449],{"class":348},[338,1287,356],{"class":348},[338,1289,467],{"class":348},[338,1291,1292,1294,1296,1298,1300],{"class":340,"line":412},[338,1293,583],{"class":415},[338,1295,419],{"class":348},[338,1297,379],{"class":403},[338,1299,590],{"class":352},[338,1301,426],{"class":348},[338,1303,1304,1307,1309,1311,1315,1317,1321,1323,1326,1328,1331,1333,1335,1338,1340,1342,1344,1346,1348],{"class":340,"line":429},[338,1305,1306],{"class":403},"  enrich",[338,1308,419],{"class":348},[338,1310,882],{"class":348},[338,1312,1314],{"class":1313},"sHdIc","ctx",[338,1316,319],{"class":348},[338,1318,1320],{"class":1319},"spNyl"," =>",[338,1322,349],{"class":348},[338,1324,1325],{"class":352}," ctx",[338,1327,922],{"class":348},[338,1329,1330],{"class":352},"event",[338,1332,922],{"class":348},[338,1334,1042],{"class":352},[338,1336,1337],{"class":348}," =",[338,1339,1133],{"class":352},[338,1341,922],{"class":348},[338,1343,658],{"class":352},[338,1345,922],{"class":348},[338,1347,1055],{"class":352},[338,1349,467],{"class":348},[338,1351,1352,1355,1357,1359,1361,1363,1365,1367,1370,1372,1374,1376,1379,1382,1385,1388,1390,1392,1395,1397,1399],{"class":340,"line":470},[338,1353,1354],{"class":403},"  keep",[338,1356,419],{"class":348},[338,1358,882],{"class":348},[338,1360,1314],{"class":1313},[338,1362,319],{"class":348},[338,1364,1320],{"class":1319},[338,1366,349],{"class":348},[338,1368,1369],{"class":344}," if",[338,1371,882],{"class":415},[338,1373,1314],{"class":352},[338,1375,922],{"class":348},[338,1377,1378],{"class":352},"duration",[338,1380,1381],{"class":348}," >",[338,1383,1384],{"class":546}," 2000",[338,1386,1387],{"class":415},") ",[338,1389,1314],{"class":352},[338,1391,922],{"class":348},[338,1393,1394],{"class":352},"shouldKeep",[338,1396,1337],{"class":348},[338,1398,423],{"class":422},[338,1400,467],{"class":348},[338,1402,1403,1405],{"class":340,"line":483},[338,1404,598],{"class":348},[338,1406,1407],{"class":352},"))\n",[328,1409,1411],{"className":330,"code":1410,"filename":150,"language":333,"meta":334,"style":334},"app.use(evlog({\n  include: ['\u002Fapi\u002F**'],\n  drain: createAxiomDrain(),\n  enrich: (ctx) => { ctx.event.region = process.env.FLY_REGION },\n}))\n",[316,1412,1413,1429,1447,1459,1499],{"__ignoreMap":334},[338,1414,1415,1417,1419,1421,1423,1425,1427],{"class":340,"line":341},[338,1416,1200],{"class":352},[338,1418,922],{"class":348},[338,1420,1205],{"class":403},[338,1422,406],{"class":352},[338,1424,366],{"class":403},[338,1426,406],{"class":352},[338,1428,409],{"class":348},[338,1430,1431,1433,1435,1437,1439,1441,1443,1445],{"class":340,"line":372},[338,1432,1218],{"class":415},[338,1434,419],{"class":348},[338,1436,558],{"class":352},[338,1438,449],{"class":348},[338,1440,1227],{"class":365},[338,1442,449],{"class":348},[338,1444,1232],{"class":352},[338,1446,426],{"class":348},[338,1448,1449,1451,1453,1455,1457],{"class":340,"line":393},[338,1450,583],{"class":415},[338,1452,419],{"class":348},[338,1454,379],{"class":403},[338,1456,590],{"class":352},[338,1458,426],{"class":348},[338,1460,1461,1463,1465,1467,1469,1471,1473,1475,1477,1479,1481,1483,1485,1487,1489,1491,1493,1495,1497],{"class":340,"line":400},[338,1462,1306],{"class":403},[338,1464,419],{"class":348},[338,1466,882],{"class":348},[338,1468,1314],{"class":1313},[338,1470,319],{"class":348},[338,1472,1320],{"class":1319},[338,1474,349],{"class":348},[338,1476,1325],{"class":352},[338,1478,922],{"class":348},[338,1480,1330],{"class":352},[338,1482,922],{"class":348},[338,1484,1042],{"class":352},[338,1486,1337],{"class":348},[338,1488,1133],{"class":352},[338,1490,922],{"class":348},[338,1492,658],{"class":352},[338,1494,922],{"class":348},[338,1496,1055],{"class":352},[338,1498,467],{"class":348},[338,1500,1501,1503],{"class":340,"line":412},[338,1502,598],{"class":348},[338,1504,1407],{"class":352},[328,1506,1508],{"className":330,"code":1507,"filename":160,"language":333,"meta":334,"style":334},"await app.register(evlog, {\n  include: ['\u002Fapi\u002F**'],\n  drain: createAxiomDrain(),\n})\n",[316,1509,1510,1531,1549,1561],{"__ignoreMap":334},[338,1511,1512,1515,1518,1520,1523,1526,1528],{"class":340,"line":341},[338,1513,1514],{"class":344},"await",[338,1516,1517],{"class":352}," app",[338,1519,922],{"class":348},[338,1521,1522],{"class":403},"register",[338,1524,1525],{"class":352},"(evlog",[338,1527,452],{"class":348},[338,1529,1530],{"class":348}," {\n",[338,1532,1533,1535,1537,1539,1541,1543,1545,1547],{"class":340,"line":372},[338,1534,1218],{"class":415},[338,1536,419],{"class":348},[338,1538,558],{"class":352},[338,1540,449],{"class":348},[338,1542,1227],{"class":365},[338,1544,449],{"class":348},[338,1546,1232],{"class":352},[338,1548,426],{"class":348},[338,1550,1551,1553,1555,1557,1559],{"class":340,"line":393},[338,1552,583],{"class":415},[338,1554,419],{"class":348},[338,1556,379],{"class":403},[338,1558,590],{"class":352},[338,1560,426],{"class":348},[338,1562,1563,1565],{"class":340,"line":400},[338,1564,598],{"class":348},[338,1566,601],{"class":352},[603,1568,1569,1581],{},[606,1570,1571],{},[609,1572,1573,1575,1577,1579],{},[612,1574,614],{},[612,1576,617],{},[612,1578,620],{},[612,1580,623],{},[625,1582,1583,1602,1620,1639,1656,1675],{},[609,1584,1585,1590,1595,1599],{},[630,1586,1587],{},[316,1588,1589],{},"include",[630,1591,1592],{},[316,1593,1594],{},"string[]",[630,1596,1597],{},[316,1598,778],{},[630,1600,1601],{},"Route glob patterns to log. If not set, all routes are logged",[609,1603,1604,1609,1613,1617],{},[630,1605,1606],{},[316,1607,1608],{},"exclude",[630,1610,1611],{},[316,1612,1594],{},[630,1614,1615],{},[316,1616,778],{},[630,1618,1619],{},"Route patterns to exclude. Exclusions take precedence over inclusions",[609,1621,1622,1627,1632,1636],{},[630,1623,1624],{},[316,1625,1626],{},"routes",[630,1628,1629],{},[316,1630,1631],{},"Record\u003Cstring, { service: string }>",[630,1633,1634],{},[316,1635,778],{},[630,1637,1638],{},"Route-specific service name overrides",[609,1640,1641,1645,1649,1653],{},[630,1642,1643],{},[316,1644,816],{},[630,1646,1647],{},[316,1648,821],{},[630,1650,1651],{},[316,1652,778],{},[630,1654,1655],{},"Drain callback called with every emitted event",[609,1657,1658,1663,1668,1672],{},[630,1659,1660],{},[316,1661,1662],{},"enrich",[630,1664,1665],{},[316,1666,1667],{},"(ctx: EnrichContext) => void",[630,1669,1670],{},[316,1671,778],{},[630,1673,1674],{},"Enrich callback called after emit, before drain",[609,1676,1677,1681,1686,1690],{},[630,1678,1679],{},[316,1680,875],{},[630,1682,1683],{},[316,1684,1685],{},"(ctx: TailSamplingContext) => void",[630,1687,1688],{},[316,1689,778],{},[630,1691,1692],{},"Custom tail sampling callback",[1173,1694,1695,1698,1699,963,1702,963,1705,1708,1709,1711,1712,1714],{"color":517,"icon":13},[302,1696,1697],{},"Nuxt and Nitro"," use module config and Nitro hooks (",[316,1700,1701],{},"evlog:drain",[316,1703,1704],{},"evlog:enrich",[316,1706,1707],{},"evlog:emit:keep",") instead of middleware options. See the ",[783,1710,120],{"href":121}," and ",[783,1713,135],{"href":136}," pages.",[830,1716,1718],{"id":1717},"middleware-drain-vs-global-drain","Middleware drain vs global drain",[298,1720,1721,1722,1724,1725,1727],{},"When a middleware ",[316,1723,816],{}," is set, it takes precedence over the global drain from ",[316,1726,325],{},". If no middleware drain is set, the global drain is used as fallback, with the benefit of receiving the full enriched event with request context (method, path, headers).",[328,1729,1731],{"className":330,"code":1730,"filename":332,"language":333,"meta":334,"style":334},"import { initLogger } from 'evlog'\nimport { createAxiomDrain } from 'evlog\u002Faxiom'\n\ninitLogger({\n  env: { service: 'my-api' },\n  drain: createAxiomDrain(), \u002F\u002F fallback: used by singleton log API AND middleware (if no middleware drain)\n})\n\napp.use(evlog({\n  \u002F\u002F no drain here - falls back to globalDrain from initLogger, with full request context\n}))\n",[316,1732,1733,1751,1769,1773,1781,1801,1817,1823,1827,1843,1848],{"__ignoreMap":334},[338,1734,1735,1737,1739,1741,1743,1745,1747,1749],{"class":340,"line":341},[338,1736,345],{"class":344},[338,1738,349],{"class":348},[338,1740,353],{"class":352},[338,1742,356],{"class":348},[338,1744,359],{"class":344},[338,1746,362],{"class":348},[338,1748,366],{"class":365},[338,1750,369],{"class":348},[338,1752,1753,1755,1757,1759,1761,1763,1765,1767],{"class":340,"line":372},[338,1754,345],{"class":344},[338,1756,349],{"class":348},[338,1758,379],{"class":352},[338,1760,356],{"class":348},[338,1762,359],{"class":344},[338,1764,362],{"class":348},[338,1766,388],{"class":365},[338,1768,369],{"class":348},[338,1770,1771],{"class":340,"line":393},[338,1772,397],{"emptyLinePlaceholder":396},[338,1774,1775,1777,1779],{"class":340,"line":400},[338,1776,318],{"class":403},[338,1778,406],{"class":352},[338,1780,409],{"class":348},[338,1782,1783,1785,1787,1789,1791,1793,1795,1797,1799],{"class":340,"line":412},[338,1784,432],{"class":415},[338,1786,419],{"class":348},[338,1788,349],{"class":348},[338,1790,439],{"class":415},[338,1792,419],{"class":348},[338,1794,362],{"class":348},[338,1796,446],{"class":365},[338,1798,449],{"class":348},[338,1800,467],{"class":348},[338,1802,1803,1805,1807,1809,1811,1813],{"class":340,"line":429},[338,1804,583],{"class":415},[338,1806,419],{"class":348},[338,1808,379],{"class":403},[338,1810,590],{"class":352},[338,1812,452],{"class":348},[338,1814,1816],{"class":1815},"sHwdD"," \u002F\u002F fallback: used by singleton log API AND middleware (if no middleware drain)\n",[338,1818,1819,1821],{"class":340,"line":470},[338,1820,598],{"class":348},[338,1822,601],{"class":352},[338,1824,1825],{"class":340,"line":483},[338,1826,397],{"emptyLinePlaceholder":396},[338,1828,1829,1831,1833,1835,1837,1839,1841],{"class":340,"line":495},[338,1830,1200],{"class":352},[338,1832,922],{"class":348},[338,1834,1205],{"class":403},[338,1836,406],{"class":352},[338,1838,366],{"class":403},[338,1840,406],{"class":352},[338,1842,409],{"class":348},[338,1844,1845],{"class":340,"line":507},[338,1846,1847],{"class":1815},"  \u002F\u002F no drain here - falls back to globalDrain from initLogger, with full request context\n",[338,1849,1850,1852],{"class":340,"line":524},[338,1851,598],{"class":348},[338,1853,1407],{"class":352},[311,1855,1857],{"id":1856},"framework-specific-options","Framework-Specific Options",[298,1859,1860],{},"Some frameworks have additional options beyond the shared config:",[830,1862,120],{"id":1863},"nuxt",[298,1865,1866,1867,1870,1871,1873],{},"The Nuxt module accepts all global options and middleware options in ",[316,1868,1869],{},"nuxt.config.ts"," under the ",[316,1872,366],{}," key, plus:",[603,1875,1876,1888],{},[606,1877,1878],{},[609,1879,1880,1882,1884,1886],{},[612,1881,614],{},[612,1883,617],{},[612,1885,620],{},[612,1887,623],{},[625,1889,1890,1908,1926,1945],{},[609,1891,1892,1897,1901,1905],{},[630,1893,1894],{},[316,1895,1896],{},"console",[630,1898,1899],{},[316,1900,639],{},[630,1902,1903],{},[316,1904,644],{},[630,1906,1907],{},"Enable\u002Fdisable browser console output (client-side only)",[609,1909,1910,1915,1919,1923],{},[630,1911,1912],{},[316,1913,1914],{},"transport.enabled",[630,1916,1917],{},[316,1918,639],{},[630,1920,1921],{},[316,1922,650],{},[630,1924,1925],{},"Send client logs to the server via API endpoint",[609,1927,1928,1933,1937,1942],{},[630,1929,1930],{},[316,1931,1932],{},"transport.endpoint",[630,1934,1935],{},[316,1936,952],{},[630,1938,1939],{},[316,1940,1941],{},"'\u002Fapi\u002F_evlog\u002Fingest'",[630,1943,1944],{},"Custom transport endpoint",[609,1946,1947,1952,1957,1962],{},[630,1948,1949],{},[316,1950,1951],{},"transport.credentials",[630,1953,1954],{},[316,1955,1956],{},"RequestCredentials",[630,1958,1959],{},[316,1960,1961],{},"'same-origin'",[630,1963,1964,1965,1968],{},"Fetch credentials mode (",[316,1966,1967],{},"'include'"," for cross-origin endpoints)",[298,1970,1971,1972,922],{},"See the full ",[783,1973,1975],{"href":1974},"\u002Fframeworks\u002Fnuxt#configuration","Nuxt configuration",[830,1977,135],{"id":1978},"nitro",[298,1980,1981,1982,963,1984,963,1986,963,1988,963,1990,963,1992,963,1994,1996,1997,1999,2000,2003],{},"The Nitro module accepts ",[316,1983,634],{},[316,1985,658],{},[316,1987,676],{},[316,1989,698],{},[316,1991,768],{},[316,1993,1589],{},[316,1995,1608],{},", and ",[316,1998,1626],{}," in ",[316,2001,2002],{},"nitro.config.ts",". Drain and enrichment are done via Nitro hooks.",[298,2005,2006,2007,922],{},"See ",[783,2008,2010],{"href":2009},"\u002Fframeworks\u002Fnitro#drain--enrichers","Nitro drain & enrichers",[2012,2013,2014],"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 .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}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 .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 .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}",{"title":334,"searchDepth":372,"depth":372,"links":2016},[2017,2024,2027],{"id":313,"depth":372,"text":2018,"children":2019},"Global Options (initLogger)",[2020,2022,2023],{"id":832,"depth":393,"text":2021},"minLevel vs sampling",{"id":911,"depth":393,"text":912},{"id":1064,"depth":393,"text":1065},{"id":1183,"depth":372,"text":1184,"children":2025},[2026],{"id":1717,"depth":393,"text":1718},{"id":1856,"depth":372,"text":1857,"children":2028},[2029,2030],{"id":1863,"depth":393,"text":120},{"id":1978,"depth":393,"text":135},"Complete reference for all evlog configuration options including global logger settings, middleware options, environment context, and framework-specific overrides.","md",[2034,2037],{"label":81,"icon":84,"to":82,"color":2035,"variant":2036},"neutral","subtle",{"label":2038,"icon":286,"to":204,"color":2035,"variant":2036},"Drain Adapters",{},{"icon":79},{"title":76,"description":2031},"MY1ROxKRzLoZyqk5RrW9lF08hU98Sh_4hCk2REV9ybc",[2044,2046],{"title":71,"path":72,"stem":73,"description":2045,"icon":74,"children":-1},"Understand the full lifecycle of an evlog event, from creation to drain. Covers all three modes (simple logging, wide events, request logging), sampling, enrichment, and delivery.",{"title":81,"path":82,"stem":83,"description":2047,"icon":84,"children":-1},"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.",1776042672989]