[{"data":1,"prerenderedAt":3670},["ShallowReactive",2],{"navigation_docs":3,"-frameworks-nuxt":407,"-frameworks-nuxt-surround":3665},[4,35,159,201,289,304,391],{"title":5,"path":6,"stem":7,"children":8,"page":34},"Getting Started","\u002Fgetting-started","1.getting-started",[9,14,19,24,29],{"title":10,"path":11,"stem":12,"icon":13},"Introduction","\u002Fgetting-started\u002Fintroduction","1.getting-started\u002F1.introduction","i-lucide-info",{"title":15,"path":16,"stem":17,"icon":18},"Installation","\u002Fgetting-started\u002Finstallation","1.getting-started\u002F2.installation","i-lucide-download",{"title":20,"path":21,"stem":22,"icon":23},"Quick Start","\u002Fgetting-started\u002Fquick-start","1.getting-started\u002F3.quick-start","i-lucide-zap",{"title":25,"path":26,"stem":27,"icon":28},"Agent Skills","\u002Fgetting-started\u002Fagent-skills","1.getting-started\u002F4.agent-skills","i-lucide-sparkles",{"title":30,"path":31,"stem":32,"icon":33},"vs Other Loggers","\u002Fgetting-started\u002Fvs-other-loggers","1.getting-started\u002F5.vs-other-loggers","i-lucide-scale",false,{"title":36,"path":37,"stem":38,"children":39,"page":34},"Logging","\u002Flogging","2.logging",[40,45,50,55,60,65,70,99,127],{"title":41,"path":42,"stem":43,"icon":44},"Overview","\u002Flogging\u002Foverview","2.logging\u002F0.overview","i-lucide-list",{"title":46,"path":47,"stem":48,"icon":49},"Simple Logging","\u002Flogging\u002Fsimple-logging","2.logging\u002F1.simple-logging","i-lucide-terminal",{"title":51,"path":52,"stem":53,"icon":54},"Wide Events","\u002Flogging\u002Fwide-events","2.logging\u002F2.wide-events","i-lucide-layers",{"title":56,"path":57,"stem":58,"icon":59},"Structured Errors","\u002Flogging\u002Fstructured-errors","2.logging\u002F3.structured-errors","i-lucide-shield-alert",{"title":61,"path":62,"stem":63,"icon":64},"Catalogs","\u002Flogging\u002Fcatalogs","2.logging\u002F4.catalogs","i-lucide-book-open",{"title":66,"path":67,"stem":68,"icon":69},"Client Logging","\u002Flogging\u002Fclient-logging","2.logging\u002F5.client-logging","i-lucide-monitor",{"title":71,"icon":72,"path":73,"stem":74,"children":75,"page":34},"AI SDK","i-simple-icons-vercel","\u002Flogging\u002Fai-sdk","2.logging\u002F6.ai-sdk",[76,79,84,89,94],{"title":41,"path":77,"stem":78,"icon":44},"\u002Flogging\u002Fai-sdk\u002Foverview","2.logging\u002F6.ai-sdk\u002F01.overview",{"title":80,"path":81,"stem":82,"icon":83},"Usage","\u002Flogging\u002Fai-sdk\u002Fusage","2.logging\u002F6.ai-sdk\u002F02.usage","i-lucide-code",{"title":85,"path":86,"stem":87,"icon":88},"Options","\u002Flogging\u002Fai-sdk\u002Foptions","2.logging\u002F6.ai-sdk\u002F03.options","i-lucide-sliders",{"title":90,"path":91,"stem":92,"icon":93},"Metadata","\u002Flogging\u002Fai-sdk\u002Fmetadata","2.logging\u002F6.ai-sdk\u002F04.metadata","i-lucide-database",{"title":95,"path":96,"stem":97,"icon":98},"Telemetry","\u002Flogging\u002Fai-sdk\u002Ftelemetry","2.logging\u002F6.ai-sdk\u002F05.telemetry","i-lucide-activity",{"title":100,"icon":101,"path":102,"stem":103,"children":104,"page":34},"Better Auth","i-simple-icons-betterauth","\u002Flogging\u002Fbetter-auth","2.logging\u002F7.better-auth",[105,108,113,118,122],{"title":41,"path":106,"stem":107,"icon":44},"\u002Flogging\u002Fbetter-auth\u002Foverview","2.logging\u002F7.better-auth\u002F01.overview",{"title":109,"path":110,"stem":111,"icon":112},"Identify User","\u002Flogging\u002Fbetter-auth\u002Fidentify-user","2.logging\u002F7.better-auth\u002F02.identify-user","i-lucide-user-check",{"title":114,"path":115,"stem":116,"icon":117},"Middleware","\u002Flogging\u002Fbetter-auth\u002Fmiddleware","2.logging\u002F7.better-auth\u002F03.middleware","i-lucide-shield",{"title":119,"path":120,"stem":121,"icon":69},"Client Sync","\u002Flogging\u002Fbetter-auth\u002Fclient-sync","2.logging\u002F7.better-auth\u002F04.client-sync",{"title":123,"path":124,"stem":125,"icon":126},"Performance","\u002Flogging\u002Fbetter-auth\u002Fperformance","2.logging\u002F7.better-auth\u002F05.performance","i-lucide-gauge",{"title":128,"icon":129,"path":130,"stem":131,"children":132,"page":34},"Audit Logs","i-lucide-shield-check","\u002Flogging\u002Faudit","2.logging\u002F8.audit",[133,136,141,146,151,155],{"title":41,"path":134,"stem":135,"icon":44},"\u002Flogging\u002Faudit\u002Foverview","2.logging\u002F8.audit\u002F01.overview",{"title":137,"path":138,"stem":139,"icon":140},"Schema","\u002Flogging\u002Faudit\u002Fschema","2.logging\u002F8.audit\u002F02.schema","i-lucide-file-text",{"title":142,"path":143,"stem":144,"icon":145},"Recording","\u002Flogging\u002Faudit\u002Frecording","2.logging\u002F8.audit\u002F03.recording","i-lucide-pen-line",{"title":147,"path":148,"stem":149,"icon":150},"Drains","\u002Flogging\u002Faudit\u002Fpipeline","2.logging\u002F8.audit\u002F04.pipeline","i-lucide-link",{"title":152,"path":153,"stem":154,"icon":129},"Compliance","\u002Flogging\u002Faudit\u002Fcompliance","2.logging\u002F8.audit\u002F05.compliance",{"title":156,"path":157,"stem":158,"icon":64},"Recipes","\u002Flogging\u002Faudit\u002Frecipes","2.logging\u002F8.audit\u002F06.recipes",{"title":160,"path":161,"stem":162,"children":163,"page":34},"Core Concepts","\u002Fcore-concepts","3.core-concepts",[164,169,174,179,184,188,191,196],{"title":165,"path":166,"stem":167,"icon":168},"Lifecycle","\u002Fcore-concepts\u002Flifecycle","3.core-concepts\u002F0.lifecycle","i-lucide-arrow-right-left",{"title":170,"path":171,"stem":172,"icon":173},"Configuration","\u002Fcore-concepts\u002Fconfiguration","3.core-concepts\u002F1.configuration","i-lucide-settings",{"title":175,"path":176,"stem":177,"icon":178},"Sampling","\u002Fcore-concepts\u002Fsampling","3.core-concepts\u002F2.sampling","i-lucide-filter",{"title":180,"path":181,"stem":182,"icon":183},"Typed Fields","\u002Fcore-concepts\u002Ftyped-fields","3.core-concepts\u002F3.typed-fields","i-simple-icons-typescript",{"title":185,"path":186,"stem":187,"icon":129},"Best Practices","\u002Fcore-concepts\u002Fbest-practices","3.core-concepts\u002F4.best-practices",{"title":123,"path":189,"stem":190,"icon":126},"\u002Fcore-concepts\u002Fperformance","3.core-concepts\u002F5.performance",{"title":192,"path":193,"stem":194,"icon":195},"Vite Plugin","\u002Fcore-concepts\u002Fvite-plugin","3.core-concepts\u002F6.vite-plugin","i-custom-vite",{"title":197,"path":198,"stem":199,"icon":200},"Auto-Redaction","\u002Fcore-concepts\u002Fredaction","3.core-concepts\u002F7.redaction","i-lucide-eye-off",{"title":202,"path":203,"stem":204,"children":205,"page":34},"Frameworks","\u002Fframeworks","4.frameworks",[206,210,215,220,225,230,235,240,245,250,255,260,265,270,274,279,284],{"title":41,"path":207,"stem":208,"icon":209},"\u002Fframeworks\u002Foverview","4.frameworks\u002F00.overview","i-lucide-layout-grid",{"title":211,"path":212,"stem":213,"icon":214},"Nuxt","\u002Fframeworks\u002Fnuxt","4.frameworks\u002F01.nuxt","i-simple-icons-nuxtdotjs",{"title":216,"path":217,"stem":218,"icon":219},"Next.js","\u002Fframeworks\u002Fnextjs","4.frameworks\u002F02.nextjs","i-simple-icons-nextdotjs",{"title":221,"path":222,"stem":223,"icon":224},"SvelteKit","\u002Fframeworks\u002Fsveltekit","4.frameworks\u002F03.sveltekit","i-simple-icons-svelte",{"title":226,"path":227,"stem":228,"icon":229},"Nitro","\u002Fframeworks\u002Fnitro","4.frameworks\u002F04.nitro","i-custom-nitro",{"title":231,"path":232,"stem":233,"icon":234},"TanStack Start","\u002Fframeworks\u002Ftanstack-start","4.frameworks\u002F05.tanstack-start","i-custom-tanstack",{"title":236,"path":237,"stem":238,"icon":239},"NestJS","\u002Fframeworks\u002Fnestjs","4.frameworks\u002F06.nestjs","i-simple-icons-nestjs",{"title":241,"path":242,"stem":243,"icon":244},"Express","\u002Fframeworks\u002Fexpress","4.frameworks\u002F07.express","i-simple-icons-express",{"title":246,"path":247,"stem":248,"icon":249},"Hono","\u002Fframeworks\u002Fhono","4.frameworks\u002F08.hono","i-simple-icons-hono",{"title":251,"path":252,"stem":253,"icon":254},"Fastify","\u002Fframeworks\u002Ffastify","4.frameworks\u002F09.fastify","i-simple-icons-fastify",{"title":256,"path":257,"stem":258,"icon":259},"Elysia","\u002Fframeworks\u002Felysia","4.frameworks\u002F10.elysia","i-custom-elysia",{"title":261,"path":262,"stem":263,"icon":264},"React Router","\u002Fframeworks\u002Freact-router","4.frameworks\u002F11.react-router","i-custom-reactrouter",{"title":266,"path":267,"stem":268,"icon":269},"Cloudflare Workers","\u002Fframeworks\u002Fcloudflare-workers","4.frameworks\u002F12.cloudflare-workers","i-simple-icons-cloudflare",{"title":271,"path":272,"stem":273,"icon":183},"Standalone","\u002Fframeworks\u002Fstandalone","4.frameworks\u002F13.standalone",{"title":275,"path":276,"stem":277,"icon":278},"Astro","\u002Fframeworks\u002Fastro","4.frameworks\u002F14.astro","i-simple-icons-astro",{"title":280,"path":281,"stem":282,"icon":283},"AWS Lambda","\u002Fframeworks\u002Faws-lambda","4.frameworks\u002F16.aws-lambda","i-custom-lambda",{"title":285,"path":286,"stem":287,"icon":288},"Custom Integration","\u002Fframeworks\u002Fcustom-integration","4.frameworks\u002F17.custom-integration","i-lucide-puzzle",{"title":290,"path":291,"stem":292,"children":293,"page":34},"Build on top","\u002Fbuild-on-top","5.build-on-top",[294,299],{"title":295,"path":296,"stem":297,"icon":298},"Identity headers","\u002Fbuild-on-top\u002Fidentity-headers","5.build-on-top\u002F1.identity-headers","i-lucide-fingerprint",{"title":300,"path":301,"stem":302,"icon":303},"FS reader","\u002Fbuild-on-top\u002Ffs-reader","5.build-on-top\u002F4.fs-reader","i-lucide-folder-search",{"title":305,"path":306,"stem":307,"children":308,"page":34},"Adapters","\u002Fadapters","6.adapters",[309,312,352,367],{"title":41,"path":310,"stem":311,"icon":44},"\u002Fadapters\u002Foverview","6.adapters\u002F01.overview",{"title":313,"path":314,"stem":315,"children":316,"page":34},"Cloud destinations","\u002Fadapters\u002Fcloud","6.adapters\u002F02.cloud",[317,322,327,332,337,342,347],{"title":318,"path":319,"stem":320,"icon":321},"Axiom","\u002Fadapters\u002Fcloud\u002Faxiom","6.adapters\u002F02.cloud\u002F01.axiom","i-custom-axiom",{"title":323,"path":324,"stem":325,"icon":326},"OTLP","\u002Fadapters\u002Fcloud\u002Fotlp","6.adapters\u002F02.cloud\u002F02.otlp","i-simple-icons-opentelemetry",{"title":328,"path":329,"stem":330,"icon":331},"PostHog","\u002Fadapters\u002Fcloud\u002Fposthog","6.adapters\u002F02.cloud\u002F03.posthog","i-simple-icons-posthog",{"title":333,"path":334,"stem":335,"icon":336},"Sentry","\u002Fadapters\u002Fcloud\u002Fsentry","6.adapters\u002F02.cloud\u002F04.sentry","i-simple-icons-sentry",{"title":338,"path":339,"stem":340,"icon":341},"Better Stack","\u002Fadapters\u002Fcloud\u002Fbetter-stack","6.adapters\u002F02.cloud\u002F05.better-stack","i-simple-icons-betterstack",{"title":343,"path":344,"stem":345,"icon":346},"Datadog","\u002Fadapters\u002Fcloud\u002Fdatadog","6.adapters\u002F02.cloud\u002F06.datadog","i-simple-icons-datadog",{"title":348,"path":349,"stem":350,"icon":351},"HyperDX","\u002Fadapters\u002Fcloud\u002Fhyperdx","6.adapters\u002F02.cloud\u002F07.hyperdx","i-custom-hyperdx",{"title":353,"path":354,"stem":355,"children":356,"page":34},"Self-hosted","\u002Fadapters\u002Fself-hosted","6.adapters\u002F03.self-hosted",[357,362],{"title":358,"path":359,"stem":360,"icon":361},"File System","\u002Fadapters\u002Fself-hosted\u002Ffs","6.adapters\u002F03.self-hosted\u002F01.fs","i-lucide-hard-drive",{"title":363,"path":364,"stem":365,"icon":366},"NuxtHub","\u002Fadapters\u002Fself-hosted\u002Fnuxthub","6.adapters\u002F03.self-hosted\u002F02.nuxthub","i-simple-icons-nuxt",{"title":368,"path":369,"stem":370,"children":371,"page":34},"Building blocks","\u002Fadapters\u002Fbuilding-blocks","6.adapters\u002F04.building-blocks",[372,377,382,386],{"title":373,"path":374,"stem":375,"icon":376},"Pipeline","\u002Fadapters\u002Fbuilding-blocks\u002Fpipeline","6.adapters\u002F04.building-blocks\u002F01.pipeline","i-lucide-workflow",{"title":378,"path":379,"stem":380,"icon":381},"HTTP","\u002Fadapters\u002Fbuilding-blocks\u002Fhttp","6.adapters\u002F04.building-blocks\u002F02.http","i-lucide-globe",{"title":383,"path":384,"stem":385,"icon":83},"Custom Adapters","\u002Fadapters\u002Fbuilding-blocks\u002Fcustom","6.adapters\u002F04.building-blocks\u002F03.custom",{"title":387,"path":388,"stem":389,"icon":390},"Toolkit","\u002Fadapters\u002Fbuilding-blocks\u002Ftoolkit","6.adapters\u002F04.building-blocks\u002F04.toolkit","i-lucide-blocks",{"title":392,"path":393,"stem":394,"children":395,"page":34},"Enrichers","\u002Fenrichers","7.enrichers",[396,399,403],{"title":41,"path":397,"stem":398,"icon":28},"\u002Fenrichers\u002Foverview","7.enrichers\u002F1.overview",{"title":400,"path":401,"stem":402,"icon":288},"Built-in","\u002Fenrichers\u002Fbuilt-in","7.enrichers\u002F2.built-in",{"title":404,"path":405,"stem":406,"icon":83},"Custom","\u002Fenrichers\u002Fcustom","7.enrichers\u002F3.custom",{"id":408,"title":211,"body":409,"description":3658,"extension":3659,"links":3660,"meta":3661,"navigation":3662,"path":212,"seo":3663,"stem":213,"__hash__":3664},"docs\u002F4.frameworks\u002F01.nuxt.md",{"type":410,"value":411,"toc":3630},"minimark",[412,429,476,480,485,556,560,676,686,689,696,1051,1054,1132,1136,1151,1409,1425,1428,1448,1458,1732,1736,1745,1877,1891,1895,1898,2065,2069,2072,2076,2314,2318,2525,2534,2536,2540,2543,2670,2673,2677,2680,2824,2828,2835,2988,2995,2999,3002,3095,3099,3128,3132,3138,3243,3247,3250,3383,3387,3394,3587,3591,3597,3626],[413,414,415,416,420,421,424,425,428],"p",{},"evlog provides a first-class Nuxt module with auto-imported ",[417,418,419],"code",{},"useLogger",", ",[417,422,423],{},"createError",", and ",[417,426,427],{},"parseError",". Add it to your config and start logging with zero boilerplate.",[430,431,434,437,462],"prompt",{":actions":432,"description":433,"icon":214},"[\"copy\",\"cursor\",\"windsurf\"]","Set up evlog in my Nuxt app",[413,435,436],{},"Set up evlog in my Nuxt app with wide events and structured errors.",[438,439,440,444,447,450,453,456,459],"ul",{},[441,442,443],"li",{},"Install evlog: pnpm add evlog",[441,445,446],{},"Add 'evlog\u002Fnuxt' to modules in nuxt.config.ts",[441,448,449],{},"Set evlog.env.service to my app name",[441,451,452],{},"useLogger, createError, and parseError are auto-imported",[441,454,455],{},"Create a server\u002Fapi route using useLogger(event) and log.set() to build a wide event",[441,457,458],{},"Throw errors with createError({ message, status, why, fix })",[441,460,461],{},"Wide events are auto-emitted when each request completes",[413,463,464,465,471,472],{},"Docs: ",[466,467,468],"a",{"href":468,"rel":469},"https:\u002F\u002Fwww.evlog.dev\u002Fframeworks\u002Fnuxt",[470],"nofollow","\nAdapters: ",[466,473,474],{"href":474,"rel":475},"https:\u002F\u002Fwww.evlog.dev\u002Fadapters",[470],[477,478,20],"h2",{"id":479},"quick-start",[481,482,484],"h3",{"id":483},"_1-install","1. Install",[486,487,488,513,527,541],"code-group",{},[489,490,496],"pre",{"className":491,"code":492,"filename":493,"language":494,"meta":495,"style":495},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","pnpm add evlog\n","pnpm","bash","",[417,497,498],{"__ignoreMap":495},[499,500,503,506,510],"span",{"class":501,"line":502},"line",1,[499,504,493],{"class":505},"sBMFI",[499,507,509],{"class":508},"sfazB"," add",[499,511,512],{"class":508}," evlog\n",[489,514,517],{"className":491,"code":515,"filename":516,"language":494,"meta":495,"style":495},"bun add evlog\n","bun",[417,518,519],{"__ignoreMap":495},[499,520,521,523,525],{"class":501,"line":502},[499,522,516],{"class":505},[499,524,509],{"class":508},[499,526,512],{"class":508},[489,528,531],{"className":491,"code":529,"filename":530,"language":494,"meta":495,"style":495},"yarn add evlog\n","yarn",[417,532,533],{"__ignoreMap":495},[499,534,535,537,539],{"class":501,"line":502},[499,536,530],{"class":505},[499,538,509],{"class":508},[499,540,512],{"class":508},[489,542,545],{"className":491,"code":543,"filename":544,"language":494,"meta":495,"style":495},"npm install evlog\n","npm",[417,546,547],{"__ignoreMap":495},[499,548,549,551,554],{"class":501,"line":502},[499,550,544],{"class":505},[499,552,553],{"class":508}," install",[499,555,512],{"class":508},[481,557,559],{"id":558},"_2-add-the-module","2. Add the module",[489,561,566],{"className":562,"code":563,"filename":564,"language":565,"meta":495,"style":495},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","export default defineNuxtConfig({\n  modules: ['evlog\u002Fnuxt'],\n  evlog: {\n    env: {\n      service: 'my-app',\n    },\n  },\n})\n","nuxt.config.ts","typescript",[417,567,568,589,616,627,637,655,661,667],{"__ignoreMap":495},[499,569,570,574,577,581,585],{"class":501,"line":502},[499,571,573],{"class":572},"s7zQu","export",[499,575,576],{"class":572}," default",[499,578,580],{"class":579},"s2Zo4"," defineNuxtConfig",[499,582,584],{"class":583},"sTEyZ","(",[499,586,588],{"class":587},"sMK4o","{\n",[499,590,592,596,599,602,605,608,610,613],{"class":501,"line":591},2,[499,593,595],{"class":594},"swJcz","  modules",[499,597,598],{"class":587},":",[499,600,601],{"class":583}," [",[499,603,604],{"class":587},"'",[499,606,607],{"class":508},"evlog\u002Fnuxt",[499,609,604],{"class":587},[499,611,612],{"class":583},"]",[499,614,615],{"class":587},",\n",[499,617,619,622,624],{"class":501,"line":618},3,[499,620,621],{"class":594},"  evlog",[499,623,598],{"class":587},[499,625,626],{"class":587}," {\n",[499,628,630,633,635],{"class":501,"line":629},4,[499,631,632],{"class":594},"    env",[499,634,598],{"class":587},[499,636,626],{"class":587},[499,638,640,643,645,648,651,653],{"class":501,"line":639},5,[499,641,642],{"class":594},"      service",[499,644,598],{"class":587},[499,646,647],{"class":587}," '",[499,649,650],{"class":508},"my-app",[499,652,604],{"class":587},[499,654,615],{"class":587},[499,656,658],{"class":501,"line":657},6,[499,659,660],{"class":587},"    },\n",[499,662,664],{"class":501,"line":663},7,[499,665,666],{"class":587},"  },\n",[499,668,670,673],{"class":501,"line":669},8,[499,671,672],{"class":587},"}",[499,674,675],{"class":583},")\n",[413,677,678,679,420,681,424,683,685],{},"That's it. ",[417,680,419],{},[417,682,423],{},[417,684,427],{}," are auto-imported.",[477,687,51],{"id":688},"wide-events",[413,690,691,692,695],{},"Build up context progressively throughout a request with ",[417,693,694],{},"useLogger(event)",". evlog emits a single wide event when the request completes.",[489,697,700],{"className":562,"code":698,"filename":699,"language":565,"meta":495,"style":495},"export default defineEventHandler(async (event) => {\n  const log = useLogger(event)\n  const body = await readBody(event)\n\n  log.set({ user: { id: body.userId, plan: 'enterprise' } })\n\n  const cart = await db.findCart(body.cartId)\n  log.set({ cart: { items: cart.items.length, total: cart.total } })\n\n  const payment = await processPayment(cart)\n  log.set({ payment: { method: payment.method, cardLast4: payment.last4 } })\n\n  return { success: true, orderId: payment.orderId }\n})\n","server\u002Fapi\u002Fcheckout.post.ts",[417,701,702,732,752,773,779,837,841,872,927,932,954,1005,1010,1044],{"__ignoreMap":495},[499,703,704,706,708,711,713,717,720,724,727,730],{"class":501,"line":502},[499,705,573],{"class":572},[499,707,576],{"class":572},[499,709,710],{"class":579}," defineEventHandler",[499,712,584],{"class":583},[499,714,716],{"class":715},"spNyl","async",[499,718,719],{"class":587}," (",[499,721,723],{"class":722},"sHdIc","event",[499,725,726],{"class":587},")",[499,728,729],{"class":715}," =>",[499,731,626],{"class":587},[499,733,734,737,740,743,746,748,750],{"class":501,"line":591},[499,735,736],{"class":715},"  const",[499,738,739],{"class":583}," log",[499,741,742],{"class":587}," =",[499,744,745],{"class":579}," useLogger",[499,747,584],{"class":594},[499,749,723],{"class":583},[499,751,675],{"class":594},[499,753,754,756,759,761,764,767,769,771],{"class":501,"line":618},[499,755,736],{"class":715},[499,757,758],{"class":583}," body",[499,760,742],{"class":587},[499,762,763],{"class":572}," await",[499,765,766],{"class":579}," readBody",[499,768,584],{"class":594},[499,770,723],{"class":583},[499,772,675],{"class":594},[499,774,775],{"class":501,"line":629},[499,776,778],{"emptyLinePlaceholder":777},true,"\n",[499,780,781,784,787,790,792,795,798,800,803,806,808,810,812,815,818,821,823,825,828,830,833,835],{"class":501,"line":639},[499,782,783],{"class":583},"  log",[499,785,786],{"class":587},".",[499,788,789],{"class":579},"set",[499,791,584],{"class":594},[499,793,794],{"class":587},"{",[499,796,797],{"class":594}," user",[499,799,598],{"class":587},[499,801,802],{"class":587}," {",[499,804,805],{"class":594}," id",[499,807,598],{"class":587},[499,809,758],{"class":583},[499,811,786],{"class":587},[499,813,814],{"class":583},"userId",[499,816,817],{"class":587},",",[499,819,820],{"class":594}," plan",[499,822,598],{"class":587},[499,824,647],{"class":587},[499,826,827],{"class":508},"enterprise",[499,829,604],{"class":587},[499,831,832],{"class":587}," }",[499,834,832],{"class":587},[499,836,675],{"class":594},[499,838,839],{"class":501,"line":657},[499,840,778],{"emptyLinePlaceholder":777},[499,842,843,845,848,850,852,855,857,860,862,865,867,870],{"class":501,"line":663},[499,844,736],{"class":715},[499,846,847],{"class":583}," cart",[499,849,742],{"class":587},[499,851,763],{"class":572},[499,853,854],{"class":583}," db",[499,856,786],{"class":587},[499,858,859],{"class":579},"findCart",[499,861,584],{"class":594},[499,863,864],{"class":583},"body",[499,866,786],{"class":587},[499,868,869],{"class":583},"cartId",[499,871,675],{"class":594},[499,873,874,876,878,880,882,884,886,888,890,893,895,897,899,902,904,907,909,912,914,916,918,921,923,925],{"class":501,"line":669},[499,875,783],{"class":583},[499,877,786],{"class":587},[499,879,789],{"class":579},[499,881,584],{"class":594},[499,883,794],{"class":587},[499,885,847],{"class":594},[499,887,598],{"class":587},[499,889,802],{"class":587},[499,891,892],{"class":594}," items",[499,894,598],{"class":587},[499,896,847],{"class":583},[499,898,786],{"class":587},[499,900,901],{"class":583},"items",[499,903,786],{"class":587},[499,905,906],{"class":583},"length",[499,908,817],{"class":587},[499,910,911],{"class":594}," total",[499,913,598],{"class":587},[499,915,847],{"class":583},[499,917,786],{"class":587},[499,919,920],{"class":583},"total",[499,922,832],{"class":587},[499,924,832],{"class":587},[499,926,675],{"class":594},[499,928,930],{"class":501,"line":929},9,[499,931,778],{"emptyLinePlaceholder":777},[499,933,935,937,940,942,944,947,949,952],{"class":501,"line":934},10,[499,936,736],{"class":715},[499,938,939],{"class":583}," payment",[499,941,742],{"class":587},[499,943,763],{"class":572},[499,945,946],{"class":579}," processPayment",[499,948,584],{"class":594},[499,950,951],{"class":583},"cart",[499,953,675],{"class":594},[499,955,957,959,961,963,965,967,969,971,973,976,978,980,982,985,987,990,992,994,996,999,1001,1003],{"class":501,"line":956},11,[499,958,783],{"class":583},[499,960,786],{"class":587},[499,962,789],{"class":579},[499,964,584],{"class":594},[499,966,794],{"class":587},[499,968,939],{"class":594},[499,970,598],{"class":587},[499,972,802],{"class":587},[499,974,975],{"class":594}," method",[499,977,598],{"class":587},[499,979,939],{"class":583},[499,981,786],{"class":587},[499,983,984],{"class":583},"method",[499,986,817],{"class":587},[499,988,989],{"class":594}," cardLast4",[499,991,598],{"class":587},[499,993,939],{"class":583},[499,995,786],{"class":587},[499,997,998],{"class":583},"last4",[499,1000,832],{"class":587},[499,1002,832],{"class":587},[499,1004,675],{"class":594},[499,1006,1008],{"class":501,"line":1007},12,[499,1009,778],{"emptyLinePlaceholder":777},[499,1011,1013,1016,1018,1021,1023,1027,1029,1032,1034,1036,1038,1041],{"class":501,"line":1012},13,[499,1014,1015],{"class":572},"  return",[499,1017,802],{"class":587},[499,1019,1020],{"class":594}," success",[499,1022,598],{"class":587},[499,1024,1026],{"class":1025},"sfNiH"," true",[499,1028,817],{"class":587},[499,1030,1031],{"class":594}," orderId",[499,1033,598],{"class":587},[499,1035,939],{"class":583},[499,1037,786],{"class":587},[499,1039,1040],{"class":583},"orderId",[499,1042,1043],{"class":587}," }\n",[499,1045,1047,1049],{"class":501,"line":1046},14,[499,1048,672],{"class":587},[499,1050,675],{"class":583},[413,1052,1053],{},"One request, one log line with all context:",[489,1055,1058],{"className":491,"code":1056,"filename":1057,"language":494,"meta":495,"style":495},"10:23:45 INFO [my-app] POST \u002Fapi\u002Fcheckout 200 in 145ms\n  ├─ user: id=usr_123 plan=enterprise\n  ├─ cart: items=3 total=14999\n  ├─ payment: method=card cardLast4=4242\n  └─ requestId: a1b2c3d4-...\n","Terminal output",[417,1059,1060,1071,1085,1105,1121],{"__ignoreMap":495},[499,1061,1062,1065,1068],{"class":501,"line":502},[499,1063,1064],{"class":505},"10:23:45",[499,1066,1067],{"class":508}," INFO",[499,1069,1070],{"class":583}," [my-app] POST \u002Fapi\u002Fcheckout 200 in 145ms\n",[499,1072,1073,1076,1079,1082],{"class":501,"line":591},[499,1074,1075],{"class":505},"  ├─",[499,1077,1078],{"class":508}," user:",[499,1080,1081],{"class":508}," id=usr_123",[499,1083,1084],{"class":508}," plan=enterprise\n",[499,1086,1087,1089,1092,1095,1099,1102],{"class":501,"line":618},[499,1088,1075],{"class":505},[499,1090,1091],{"class":508}," cart:",[499,1093,1094],{"class":508}," items=",[499,1096,1098],{"class":1097},"sbssI","3",[499,1100,1101],{"class":508}," total=",[499,1103,1104],{"class":1097},"14999\n",[499,1106,1107,1109,1112,1115,1118],{"class":501,"line":629},[499,1108,1075],{"class":505},[499,1110,1111],{"class":508}," payment:",[499,1113,1114],{"class":508}," method=card",[499,1116,1117],{"class":508}," cardLast4=",[499,1119,1120],{"class":1097},"4242\n",[499,1122,1123,1126,1129],{"class":501,"line":639},[499,1124,1125],{"class":505},"  └─",[499,1127,1128],{"class":508}," requestId:",[499,1130,1131],{"class":508}," a1b2c3d4-...\n",[477,1133,1135],{"id":1134},"error-handling","Error Handling",[413,1137,1138,1140,1141,420,1144,424,1147,1150],{},[417,1139,423],{}," produces structured errors with ",[417,1142,1143],{},"why",[417,1145,1146],{},"fix",[417,1148,1149],{},"link"," fields that help both humans and AI agents understand what went wrong.",[489,1152,1155],{"className":562,"code":1153,"filename":1154,"language":565,"meta":495,"style":495},"export default defineEventHandler(async (event) => {\n  const log = useLogger(event)\n  const body = await readBody(event)\n\n  log.set({ payment: { amount: body.amount } })\n\n  if (body.amount \u003C= 0) {\n    throw createError({\n      status: 400,\n      message: 'Invalid payment amount',\n      why: 'The amount must be a positive number',\n      fix: 'Pass a positive integer in cents (e.g. 4999 for $49.99)',\n      link: 'https:\u002F\u002Fdocs.example.com\u002Fapi\u002Fpayments#amount',\n    })\n  }\n\n  return { success: true }\n})\n","server\u002Fapi\u002Fpayment\u002Fprocess.post.ts",[417,1156,1157,1179,1195,1213,1217,1253,1257,1281,1293,1305,1321,1337,1353,1369,1376,1382,1387,1402],{"__ignoreMap":495},[499,1158,1159,1161,1163,1165,1167,1169,1171,1173,1175,1177],{"class":501,"line":502},[499,1160,573],{"class":572},[499,1162,576],{"class":572},[499,1164,710],{"class":579},[499,1166,584],{"class":583},[499,1168,716],{"class":715},[499,1170,719],{"class":587},[499,1172,723],{"class":722},[499,1174,726],{"class":587},[499,1176,729],{"class":715},[499,1178,626],{"class":587},[499,1180,1181,1183,1185,1187,1189,1191,1193],{"class":501,"line":591},[499,1182,736],{"class":715},[499,1184,739],{"class":583},[499,1186,742],{"class":587},[499,1188,745],{"class":579},[499,1190,584],{"class":594},[499,1192,723],{"class":583},[499,1194,675],{"class":594},[499,1196,1197,1199,1201,1203,1205,1207,1209,1211],{"class":501,"line":618},[499,1198,736],{"class":715},[499,1200,758],{"class":583},[499,1202,742],{"class":587},[499,1204,763],{"class":572},[499,1206,766],{"class":579},[499,1208,584],{"class":594},[499,1210,723],{"class":583},[499,1212,675],{"class":594},[499,1214,1215],{"class":501,"line":629},[499,1216,778],{"emptyLinePlaceholder":777},[499,1218,1219,1221,1223,1225,1227,1229,1231,1233,1235,1238,1240,1242,1244,1247,1249,1251],{"class":501,"line":639},[499,1220,783],{"class":583},[499,1222,786],{"class":587},[499,1224,789],{"class":579},[499,1226,584],{"class":594},[499,1228,794],{"class":587},[499,1230,939],{"class":594},[499,1232,598],{"class":587},[499,1234,802],{"class":587},[499,1236,1237],{"class":594}," amount",[499,1239,598],{"class":587},[499,1241,758],{"class":583},[499,1243,786],{"class":587},[499,1245,1246],{"class":583},"amount",[499,1248,832],{"class":587},[499,1250,832],{"class":587},[499,1252,675],{"class":594},[499,1254,1255],{"class":501,"line":657},[499,1256,778],{"emptyLinePlaceholder":777},[499,1258,1259,1262,1264,1266,1268,1270,1273,1276,1279],{"class":501,"line":663},[499,1260,1261],{"class":572},"  if",[499,1263,719],{"class":594},[499,1265,864],{"class":583},[499,1267,786],{"class":587},[499,1269,1246],{"class":583},[499,1271,1272],{"class":587}," \u003C=",[499,1274,1275],{"class":1097}," 0",[499,1277,1278],{"class":594},") ",[499,1280,588],{"class":587},[499,1282,1283,1286,1289,1291],{"class":501,"line":669},[499,1284,1285],{"class":572},"    throw",[499,1287,1288],{"class":579}," createError",[499,1290,584],{"class":594},[499,1292,588],{"class":587},[499,1294,1295,1298,1300,1303],{"class":501,"line":929},[499,1296,1297],{"class":594},"      status",[499,1299,598],{"class":587},[499,1301,1302],{"class":1097}," 400",[499,1304,615],{"class":587},[499,1306,1307,1310,1312,1314,1317,1319],{"class":501,"line":934},[499,1308,1309],{"class":594},"      message",[499,1311,598],{"class":587},[499,1313,647],{"class":587},[499,1315,1316],{"class":508},"Invalid payment amount",[499,1318,604],{"class":587},[499,1320,615],{"class":587},[499,1322,1323,1326,1328,1330,1333,1335],{"class":501,"line":956},[499,1324,1325],{"class":594},"      why",[499,1327,598],{"class":587},[499,1329,647],{"class":587},[499,1331,1332],{"class":508},"The amount must be a positive number",[499,1334,604],{"class":587},[499,1336,615],{"class":587},[499,1338,1339,1342,1344,1346,1349,1351],{"class":501,"line":1007},[499,1340,1341],{"class":594},"      fix",[499,1343,598],{"class":587},[499,1345,647],{"class":587},[499,1347,1348],{"class":508},"Pass a positive integer in cents (e.g. 4999 for $49.99)",[499,1350,604],{"class":587},[499,1352,615],{"class":587},[499,1354,1355,1358,1360,1362,1365,1367],{"class":501,"line":1012},[499,1356,1357],{"class":594},"      link",[499,1359,598],{"class":587},[499,1361,647],{"class":587},[499,1363,1364],{"class":508},"https:\u002F\u002Fdocs.example.com\u002Fapi\u002Fpayments#amount",[499,1366,604],{"class":587},[499,1368,615],{"class":587},[499,1370,1371,1374],{"class":501,"line":1046},[499,1372,1373],{"class":587},"    }",[499,1375,675],{"class":594},[499,1377,1379],{"class":501,"line":1378},15,[499,1380,1381],{"class":587},"  }\n",[499,1383,1385],{"class":501,"line":1384},16,[499,1386,778],{"emptyLinePlaceholder":777},[499,1388,1390,1392,1394,1396,1398,1400],{"class":501,"line":1389},17,[499,1391,1015],{"class":572},[499,1393,802],{"class":587},[499,1395,1020],{"class":594},[499,1397,598],{"class":587},[499,1399,1026],{"class":1025},[499,1401,1043],{"class":587},[499,1403,1405,1407],{"class":501,"line":1404},18,[499,1406,672],{"class":587},[499,1408,675],{"class":583},[1410,1411,1413,1414,1417,1418,420,1420,424,1422,1424],"callout",{"color":1412,"icon":13},"info","Nuxt's error handler automatically catches ",[417,1415,1416],{},"EvlogError"," and returns a structured JSON response with ",[417,1419,1143],{},[417,1421,1146],{},[417,1423,1149],{}," fields.",[477,1426,170],{"id":1427},"configuration",[1410,1429,1430,1431,1434,1435,420,1438,420,1441,420,1444,1447],{"color":1412,"icon":64},"See the ",[466,1432,1433],{"href":171},"Configuration reference"," for the full list of shared options (",[417,1436,1437],{},"enabled",[417,1439,1440],{},"pretty",[417,1442,1443],{},"silent",[417,1445,1446],{},"sampling",", middleware options, etc.).",[413,1449,1450,1451,1453,1454,1457],{},"All options are set in ",[417,1452,564],{}," under the ",[417,1455,1456],{},"evlog"," key:",[1459,1460,1461,1480],"table",{},[1462,1463,1464],"thead",{},[1465,1466,1467,1471,1474,1477],"tr",{},[1468,1469,1470],"th",{},"Option",[1468,1472,1473],{},"Type",[1468,1475,1476],{},"Default",[1468,1478,1479],{},"Description",[1481,1482,1483,1507,1525,1545,1562,1585,1603,1622,1640,1657,1676,1695,1713],"tbody",{},[1465,1484,1485,1490,1495,1500],{},[1486,1487,1488],"td",{},[417,1489,1437],{},[1486,1491,1492],{},[417,1493,1494],{},"boolean",[1486,1496,1497],{},[417,1498,1499],{},"true",[1486,1501,1502,1503,1506],{},"Globally enable\u002Fdisable all logging. When ",[417,1504,1505],{},"false",", all operations become no-ops",[1465,1508,1509,1514,1518,1522],{},[1486,1510,1511],{},[417,1512,1513],{},"console",[1486,1515,1516],{},[417,1517,1494],{},[1486,1519,1520],{},[417,1521,1499],{},[1486,1523,1524],{},"Enable\u002Fdisable browser console output",[1465,1526,1527,1532,1537,1542],{},[1486,1528,1529],{},[417,1530,1531],{},"env.service",[1486,1533,1534],{},[417,1535,1536],{},"string",[1486,1538,1539],{},[417,1540,1541],{},"'app'",[1486,1543,1544],{},"Service name shown in logs",[1465,1546,1547,1552,1556,1559],{},[1486,1548,1549],{},[417,1550,1551],{},"env.environment",[1486,1553,1554],{},[417,1555,1536],{},[1486,1557,1558],{},"Auto-detected",[1486,1560,1561],{},"Environment name",[1465,1563,1564,1569,1574,1579],{},[1486,1565,1566],{},[417,1567,1568],{},"include",[1486,1570,1571],{},[417,1572,1573],{},"string[]",[1486,1575,1576],{},[417,1577,1578],{},"undefined",[1486,1580,1581,1582,726],{},"Route patterns to log. Supports glob (",[417,1583,1584],{},"\u002Fapi\u002F**",[1465,1586,1587,1592,1596,1600],{},[1486,1588,1589],{},[417,1590,1591],{},"exclude",[1486,1593,1594],{},[417,1595,1573],{},[1486,1597,1598],{},[417,1599,1578],{},[1486,1601,1602],{},"Route patterns to exclude. Exclusions take precedence",[1465,1604,1605,1610,1615,1619],{},[1486,1606,1607],{},[417,1608,1609],{},"routes",[1486,1611,1612],{},[417,1613,1614],{},"Record\u003Cstring, RouteConfig>",[1486,1616,1617],{},[417,1618,1578],{},[1486,1620,1621],{},"Route-specific service configuration",[1465,1623,1624,1628,1632,1637],{},[1486,1625,1626],{},[417,1627,1440],{},[1486,1629,1630],{},[417,1631,1494],{},[1486,1633,1634,1636],{},[417,1635,1499],{}," in dev",[1486,1638,1639],{},"Pretty print with tree formatting",[1465,1641,1642,1646,1650,1654],{},[1486,1643,1644],{},[417,1645,1443],{},[1486,1647,1648],{},[417,1649,1494],{},[1486,1651,1652],{},[417,1653,1505],{},[1486,1655,1656],{},"Suppress console output. Events are still built, sampled, and drained. Use for stdout-based platforms",[1465,1658,1659,1664,1669,1673],{},[1486,1660,1661],{},[417,1662,1663],{},"sampling.rates",[1486,1665,1666],{},[417,1667,1668],{},"object",[1486,1670,1671],{},[417,1672,1578],{},[1486,1674,1675],{},"Head sampling rates per log level (0-100%)",[1465,1677,1678,1683,1688,1692],{},[1486,1679,1680],{},[417,1681,1682],{},"sampling.keep",[1486,1684,1685],{},[417,1686,1687],{},"array",[1486,1689,1690],{},[417,1691,1578],{},[1486,1693,1694],{},"Tail sampling conditions to force-keep logs",[1465,1696,1697,1702,1706,1710],{},[1486,1698,1699],{},[417,1700,1701],{},"transport.enabled",[1486,1703,1704],{},[417,1705,1494],{},[1486,1707,1708],{},[417,1709,1505],{},[1486,1711,1712],{},"Enable client-to-server log transport",[1465,1714,1715,1720,1724,1729],{},[1486,1716,1717],{},[417,1718,1719],{},"transport.endpoint",[1486,1721,1722],{},[417,1723,1536],{},[1486,1725,1726],{},[417,1727,1728],{},"'\u002Fapi\u002F_evlog\u002Fingest'",[1486,1730,1731],{},"Transport endpoint",[477,1733,1735],{"id":1734},"route-filtering","Route Filtering",[413,1737,1738,1739,1741,1742,1744],{},"Use ",[417,1740,1568],{}," and ",[417,1743,1591],{}," to control which routes are logged:",[489,1746,1748],{"className":562,"code":1747,"filename":564,"language":565,"meta":495,"style":495},"export default defineNuxtConfig({\n  modules: ['evlog\u002Fnuxt'],\n  evlog: {\n    include: ['\u002Fapi\u002F**', '\u002Fauth\u002F**'],\n    exclude: [\n      '\u002Fapi\u002F_nuxt_icon\u002F**',\n      '\u002Fapi\u002F_content\u002F**',\n      '\u002Fapi\u002Fhealth',\n    ],\n  },\n})\n",[417,1749,1750,1762,1780,1788,1816,1826,1838,1849,1860,1867,1871],{"__ignoreMap":495},[499,1751,1752,1754,1756,1758,1760],{"class":501,"line":502},[499,1753,573],{"class":572},[499,1755,576],{"class":572},[499,1757,580],{"class":579},[499,1759,584],{"class":583},[499,1761,588],{"class":587},[499,1763,1764,1766,1768,1770,1772,1774,1776,1778],{"class":501,"line":591},[499,1765,595],{"class":594},[499,1767,598],{"class":587},[499,1769,601],{"class":583},[499,1771,604],{"class":587},[499,1773,607],{"class":508},[499,1775,604],{"class":587},[499,1777,612],{"class":583},[499,1779,615],{"class":587},[499,1781,1782,1784,1786],{"class":501,"line":618},[499,1783,621],{"class":594},[499,1785,598],{"class":587},[499,1787,626],{"class":587},[499,1789,1790,1793,1795,1797,1799,1801,1803,1805,1807,1810,1812,1814],{"class":501,"line":629},[499,1791,1792],{"class":594},"    include",[499,1794,598],{"class":587},[499,1796,601],{"class":583},[499,1798,604],{"class":587},[499,1800,1584],{"class":508},[499,1802,604],{"class":587},[499,1804,817],{"class":587},[499,1806,647],{"class":587},[499,1808,1809],{"class":508},"\u002Fauth\u002F**",[499,1811,604],{"class":587},[499,1813,612],{"class":583},[499,1815,615],{"class":587},[499,1817,1818,1821,1823],{"class":501,"line":639},[499,1819,1820],{"class":594},"    exclude",[499,1822,598],{"class":587},[499,1824,1825],{"class":583}," [\n",[499,1827,1828,1831,1834,1836],{"class":501,"line":657},[499,1829,1830],{"class":587},"      '",[499,1832,1833],{"class":508},"\u002Fapi\u002F_nuxt_icon\u002F**",[499,1835,604],{"class":587},[499,1837,615],{"class":587},[499,1839,1840,1842,1845,1847],{"class":501,"line":663},[499,1841,1830],{"class":587},[499,1843,1844],{"class":508},"\u002Fapi\u002F_content\u002F**",[499,1846,604],{"class":587},[499,1848,615],{"class":587},[499,1850,1851,1853,1856,1858],{"class":501,"line":669},[499,1852,1830],{"class":587},[499,1854,1855],{"class":508},"\u002Fapi\u002Fhealth",[499,1857,604],{"class":587},[499,1859,615],{"class":587},[499,1861,1862,1865],{"class":501,"line":929},[499,1863,1864],{"class":583},"    ]",[499,1866,615],{"class":587},[499,1868,1869],{"class":501,"line":934},[499,1870,666],{"class":587},[499,1872,1873,1875],{"class":501,"line":956},[499,1874,672],{"class":587},[499,1876,675],{"class":583},[1410,1878,1881,1885,1886,1741,1888,1890],{"color":1879,"icon":1880},"warning","i-lucide-alert-triangle",[1882,1883,1884],"strong",{},"Exclusions take precedence."," If a path matches both ",[417,1887,1568],{},[417,1889,1591],{},", it will be excluded.",[481,1892,1894],{"id":1893},"route-based-service-names","Route-Based Service Names",[413,1896,1897],{},"Assign different service names to different route groups:",[489,1899,1901],{"className":562,"code":1900,"filename":564,"language":565,"meta":495,"style":495},"export default defineNuxtConfig({\n  modules: ['evlog\u002Fnuxt'],\n  evlog: {\n    env: { service: 'default-service' },\n    routes: {\n      '\u002Fapi\u002Fauth\u002F**': { service: 'auth-service' },\n      '\u002Fapi\u002Fpayment\u002F**': { service: 'payment-service' },\n      '\u002Fapi\u002Fbooking\u002F**': { service: 'booking-service' },\n    },\n  },\n})\n",[417,1902,1903,1915,1933,1941,1964,1973,1999,2025,2051,2055,2059],{"__ignoreMap":495},[499,1904,1905,1907,1909,1911,1913],{"class":501,"line":502},[499,1906,573],{"class":572},[499,1908,576],{"class":572},[499,1910,580],{"class":579},[499,1912,584],{"class":583},[499,1914,588],{"class":587},[499,1916,1917,1919,1921,1923,1925,1927,1929,1931],{"class":501,"line":591},[499,1918,595],{"class":594},[499,1920,598],{"class":587},[499,1922,601],{"class":583},[499,1924,604],{"class":587},[499,1926,607],{"class":508},[499,1928,604],{"class":587},[499,1930,612],{"class":583},[499,1932,615],{"class":587},[499,1934,1935,1937,1939],{"class":501,"line":618},[499,1936,621],{"class":594},[499,1938,598],{"class":587},[499,1940,626],{"class":587},[499,1942,1943,1945,1947,1949,1952,1954,1956,1959,1961],{"class":501,"line":629},[499,1944,632],{"class":594},[499,1946,598],{"class":587},[499,1948,802],{"class":587},[499,1950,1951],{"class":594}," service",[499,1953,598],{"class":587},[499,1955,647],{"class":587},[499,1957,1958],{"class":508},"default-service",[499,1960,604],{"class":587},[499,1962,1963],{"class":587}," },\n",[499,1965,1966,1969,1971],{"class":501,"line":639},[499,1967,1968],{"class":594},"    routes",[499,1970,598],{"class":587},[499,1972,626],{"class":587},[499,1974,1975,1977,1980,1982,1984,1986,1988,1990,1992,1995,1997],{"class":501,"line":657},[499,1976,1830],{"class":587},[499,1978,1979],{"class":594},"\u002Fapi\u002Fauth\u002F**",[499,1981,604],{"class":587},[499,1983,598],{"class":587},[499,1985,802],{"class":587},[499,1987,1951],{"class":594},[499,1989,598],{"class":587},[499,1991,647],{"class":587},[499,1993,1994],{"class":508},"auth-service",[499,1996,604],{"class":587},[499,1998,1963],{"class":587},[499,2000,2001,2003,2006,2008,2010,2012,2014,2016,2018,2021,2023],{"class":501,"line":663},[499,2002,1830],{"class":587},[499,2004,2005],{"class":594},"\u002Fapi\u002Fpayment\u002F**",[499,2007,604],{"class":587},[499,2009,598],{"class":587},[499,2011,802],{"class":587},[499,2013,1951],{"class":594},[499,2015,598],{"class":587},[499,2017,647],{"class":587},[499,2019,2020],{"class":508},"payment-service",[499,2022,604],{"class":587},[499,2024,1963],{"class":587},[499,2026,2027,2029,2032,2034,2036,2038,2040,2042,2044,2047,2049],{"class":501,"line":669},[499,2028,1830],{"class":587},[499,2030,2031],{"class":594},"\u002Fapi\u002Fbooking\u002F**",[499,2033,604],{"class":587},[499,2035,598],{"class":587},[499,2037,802],{"class":587},[499,2039,1951],{"class":594},[499,2041,598],{"class":587},[499,2043,647],{"class":587},[499,2045,2046],{"class":508},"booking-service",[499,2048,604],{"class":587},[499,2050,1963],{"class":587},[499,2052,2053],{"class":501,"line":929},[499,2054,660],{"class":587},[499,2056,2057],{"class":501,"line":934},[499,2058,666],{"class":587},[499,2060,2061,2063],{"class":501,"line":956},[499,2062,672],{"class":587},[499,2064,675],{"class":583},[477,2066,2068],{"id":2067},"drain-enrichers","Drain & Enrichers",[413,2070,2071],{},"Use Nitro plugin hooks to send logs to external services and enrich them with additional context.",[481,2073,2075],{"id":2074},"drain-plugin","Drain Plugin",[489,2077,2080],{"className":562,"code":2078,"filename":2079,"language":565,"meta":495,"style":495},"import type { DrainContext } from 'evlog'\nimport { createAxiomDrain } from 'evlog\u002Faxiom'\nimport { createDrainPipeline } from 'evlog\u002Fpipeline'\n\nconst pipeline = createDrainPipeline\u003CDrainContext>({\n  batch: { size: 50, intervalMs: 5000 },\n  retry: { maxAttempts: 3 },\n})\nconst drain = pipeline(createAxiomDrain())\n\nexport default defineNitroPlugin((nitroApp) => {\n  nitroApp.hooks.hook('evlog:drain', drain)\n})\n","server\u002Fplugins\u002Fevlog-drain.ts",[417,2081,2082,2107,2127,2147,2151,2177,2206,2225,2231,2251,2255,2277,2308],{"__ignoreMap":495},[499,2083,2084,2087,2090,2092,2095,2097,2100,2102,2104],{"class":501,"line":502},[499,2085,2086],{"class":572},"import",[499,2088,2089],{"class":572}," type",[499,2091,802],{"class":587},[499,2093,2094],{"class":583}," DrainContext",[499,2096,832],{"class":587},[499,2098,2099],{"class":572}," from",[499,2101,647],{"class":587},[499,2103,1456],{"class":508},[499,2105,2106],{"class":587},"'\n",[499,2108,2109,2111,2113,2116,2118,2120,2122,2125],{"class":501,"line":591},[499,2110,2086],{"class":572},[499,2112,802],{"class":587},[499,2114,2115],{"class":583}," createAxiomDrain",[499,2117,832],{"class":587},[499,2119,2099],{"class":572},[499,2121,647],{"class":587},[499,2123,2124],{"class":508},"evlog\u002Faxiom",[499,2126,2106],{"class":587},[499,2128,2129,2131,2133,2136,2138,2140,2142,2145],{"class":501,"line":618},[499,2130,2086],{"class":572},[499,2132,802],{"class":587},[499,2134,2135],{"class":583}," createDrainPipeline",[499,2137,832],{"class":587},[499,2139,2099],{"class":572},[499,2141,647],{"class":587},[499,2143,2144],{"class":508},"evlog\u002Fpipeline",[499,2146,2106],{"class":587},[499,2148,2149],{"class":501,"line":629},[499,2150,778],{"emptyLinePlaceholder":777},[499,2152,2153,2156,2159,2162,2164,2167,2170,2173,2175],{"class":501,"line":639},[499,2154,2155],{"class":715},"const",[499,2157,2158],{"class":583}," pipeline ",[499,2160,2161],{"class":587},"=",[499,2163,2135],{"class":579},[499,2165,2166],{"class":587},"\u003C",[499,2168,2169],{"class":505},"DrainContext",[499,2171,2172],{"class":587},">",[499,2174,584],{"class":583},[499,2176,588],{"class":587},[499,2178,2179,2182,2184,2186,2189,2191,2194,2196,2199,2201,2204],{"class":501,"line":657},[499,2180,2181],{"class":594},"  batch",[499,2183,598],{"class":587},[499,2185,802],{"class":587},[499,2187,2188],{"class":594}," size",[499,2190,598],{"class":587},[499,2192,2193],{"class":1097}," 50",[499,2195,817],{"class":587},[499,2197,2198],{"class":594}," intervalMs",[499,2200,598],{"class":587},[499,2202,2203],{"class":1097}," 5000",[499,2205,1963],{"class":587},[499,2207,2208,2211,2213,2215,2218,2220,2223],{"class":501,"line":663},[499,2209,2210],{"class":594},"  retry",[499,2212,598],{"class":587},[499,2214,802],{"class":587},[499,2216,2217],{"class":594}," maxAttempts",[499,2219,598],{"class":587},[499,2221,2222],{"class":1097}," 3",[499,2224,1963],{"class":587},[499,2226,2227,2229],{"class":501,"line":669},[499,2228,672],{"class":587},[499,2230,675],{"class":583},[499,2232,2233,2235,2238,2240,2243,2245,2248],{"class":501,"line":929},[499,2234,2155],{"class":715},[499,2236,2237],{"class":583}," drain ",[499,2239,2161],{"class":587},[499,2241,2242],{"class":579}," pipeline",[499,2244,584],{"class":583},[499,2246,2247],{"class":579},"createAxiomDrain",[499,2249,2250],{"class":583},"())\n",[499,2252,2253],{"class":501,"line":934},[499,2254,778],{"emptyLinePlaceholder":777},[499,2256,2257,2259,2261,2264,2266,2268,2271,2273,2275],{"class":501,"line":956},[499,2258,573],{"class":572},[499,2260,576],{"class":572},[499,2262,2263],{"class":579}," defineNitroPlugin",[499,2265,584],{"class":583},[499,2267,584],{"class":587},[499,2269,2270],{"class":722},"nitroApp",[499,2272,726],{"class":587},[499,2274,729],{"class":715},[499,2276,626],{"class":587},[499,2278,2279,2282,2284,2287,2289,2292,2294,2296,2299,2301,2303,2306],{"class":501,"line":1007},[499,2280,2281],{"class":583},"  nitroApp",[499,2283,786],{"class":587},[499,2285,2286],{"class":583},"hooks",[499,2288,786],{"class":587},[499,2290,2291],{"class":579},"hook",[499,2293,584],{"class":594},[499,2295,604],{"class":587},[499,2297,2298],{"class":508},"evlog:drain",[499,2300,604],{"class":587},[499,2302,817],{"class":587},[499,2304,2305],{"class":583}," drain",[499,2307,675],{"class":594},[499,2309,2310,2312],{"class":501,"line":1012},[499,2311,672],{"class":587},[499,2313,675],{"class":583},[481,2315,2317],{"id":2316},"enricher-plugin","Enricher Plugin",[489,2319,2322],{"className":562,"code":2320,"filename":2321,"language":565,"meta":495,"style":495},"import {\n  createUserAgentEnricher,\n  createGeoEnricher,\n  createRequestSizeEnricher,\n  createTraceContextEnricher,\n} from 'evlog\u002Fenrichers'\n\nconst enrichers = [\n  createUserAgentEnricher(),\n  createGeoEnricher(),\n  createRequestSizeEnricher(),\n  createTraceContextEnricher(),\n]\n\nexport default defineNitroPlugin((nitroApp) => {\n  nitroApp.hooks.hook('evlog:enrich', (ctx) => {\n    for (const enricher of enrichers) enricher(ctx)\n  })\n})\n","server\u002Fplugins\u002Fevlog-enrich.ts",[417,2323,2324,2330,2337,2344,2351,2358,2371,2375,2386,2395,2403,2411,2419,2424,2428,2448,2482,2511,2518],{"__ignoreMap":495},[499,2325,2326,2328],{"class":501,"line":502},[499,2327,2086],{"class":572},[499,2329,626],{"class":587},[499,2331,2332,2335],{"class":501,"line":591},[499,2333,2334],{"class":583},"  createUserAgentEnricher",[499,2336,615],{"class":587},[499,2338,2339,2342],{"class":501,"line":618},[499,2340,2341],{"class":583},"  createGeoEnricher",[499,2343,615],{"class":587},[499,2345,2346,2349],{"class":501,"line":629},[499,2347,2348],{"class":583},"  createRequestSizeEnricher",[499,2350,615],{"class":587},[499,2352,2353,2356],{"class":501,"line":639},[499,2354,2355],{"class":583},"  createTraceContextEnricher",[499,2357,615],{"class":587},[499,2359,2360,2362,2364,2366,2369],{"class":501,"line":657},[499,2361,672],{"class":587},[499,2363,2099],{"class":572},[499,2365,647],{"class":587},[499,2367,2368],{"class":508},"evlog\u002Fenrichers",[499,2370,2106],{"class":587},[499,2372,2373],{"class":501,"line":663},[499,2374,778],{"emptyLinePlaceholder":777},[499,2376,2377,2379,2382,2384],{"class":501,"line":669},[499,2378,2155],{"class":715},[499,2380,2381],{"class":583}," enrichers ",[499,2383,2161],{"class":587},[499,2385,1825],{"class":583},[499,2387,2388,2390,2393],{"class":501,"line":929},[499,2389,2334],{"class":579},[499,2391,2392],{"class":583},"()",[499,2394,615],{"class":587},[499,2396,2397,2399,2401],{"class":501,"line":934},[499,2398,2341],{"class":579},[499,2400,2392],{"class":583},[499,2402,615],{"class":587},[499,2404,2405,2407,2409],{"class":501,"line":956},[499,2406,2348],{"class":579},[499,2408,2392],{"class":583},[499,2410,615],{"class":587},[499,2412,2413,2415,2417],{"class":501,"line":1007},[499,2414,2355],{"class":579},[499,2416,2392],{"class":583},[499,2418,615],{"class":587},[499,2420,2421],{"class":501,"line":1012},[499,2422,2423],{"class":583},"]\n",[499,2425,2426],{"class":501,"line":1046},[499,2427,778],{"emptyLinePlaceholder":777},[499,2429,2430,2432,2434,2436,2438,2440,2442,2444,2446],{"class":501,"line":1378},[499,2431,573],{"class":572},[499,2433,576],{"class":572},[499,2435,2263],{"class":579},[499,2437,584],{"class":583},[499,2439,584],{"class":587},[499,2441,2270],{"class":722},[499,2443,726],{"class":587},[499,2445,729],{"class":715},[499,2447,626],{"class":587},[499,2449,2450,2452,2454,2456,2458,2460,2462,2464,2467,2469,2471,2473,2476,2478,2480],{"class":501,"line":1384},[499,2451,2281],{"class":583},[499,2453,786],{"class":587},[499,2455,2286],{"class":583},[499,2457,786],{"class":587},[499,2459,2291],{"class":579},[499,2461,584],{"class":594},[499,2463,604],{"class":587},[499,2465,2466],{"class":508},"evlog:enrich",[499,2468,604],{"class":587},[499,2470,817],{"class":587},[499,2472,719],{"class":587},[499,2474,2475],{"class":722},"ctx",[499,2477,726],{"class":587},[499,2479,729],{"class":715},[499,2481,626],{"class":587},[499,2483,2484,2487,2489,2491,2494,2497,2500,2502,2505,2507,2509],{"class":501,"line":1389},[499,2485,2486],{"class":572},"    for",[499,2488,719],{"class":594},[499,2490,2155],{"class":715},[499,2492,2493],{"class":583}," enricher",[499,2495,2496],{"class":587}," of",[499,2498,2499],{"class":583}," enrichers",[499,2501,1278],{"class":594},[499,2503,2504],{"class":579},"enricher",[499,2506,584],{"class":594},[499,2508,2475],{"class":583},[499,2510,675],{"class":594},[499,2512,2513,2516],{"class":501,"line":1404},[499,2514,2515],{"class":587},"  }",[499,2517,675],{"class":594},[499,2519,2521,2523],{"class":501,"line":2520},19,[499,2522,672],{"class":587},[499,2524,675],{"class":583},[1410,2526,1430,2529,1741,2531,2533],{"color":2527,"icon":2528},"neutral","i-lucide-arrow-right",[466,2530,305],{"href":310},[466,2532,392],{"href":397}," docs for the full list of available drains and enrichers.",[477,2535,175],{"id":1446},[481,2537,2539],{"id":2538},"head-sampling","Head Sampling",[413,2541,2542],{},"Randomly keep a percentage of logs per level. Runs before the request completes.",[489,2544,2546],{"className":562,"code":2545,"filename":564,"language":565,"meta":495,"style":495},"export default defineNuxtConfig({\n  modules: ['evlog\u002Fnuxt'],\n  evlog: {\n    sampling: {\n      rates: {\n        info: 10,\n        warn: 50,\n        debug: 5,\n        error: 100,\n      },\n    },\n  },\n})\n",[417,2547,2548,2560,2578,2586,2595,2604,2616,2627,2639,2651,2656,2660,2664],{"__ignoreMap":495},[499,2549,2550,2552,2554,2556,2558],{"class":501,"line":502},[499,2551,573],{"class":572},[499,2553,576],{"class":572},[499,2555,580],{"class":579},[499,2557,584],{"class":583},[499,2559,588],{"class":587},[499,2561,2562,2564,2566,2568,2570,2572,2574,2576],{"class":501,"line":591},[499,2563,595],{"class":594},[499,2565,598],{"class":587},[499,2567,601],{"class":583},[499,2569,604],{"class":587},[499,2571,607],{"class":508},[499,2573,604],{"class":587},[499,2575,612],{"class":583},[499,2577,615],{"class":587},[499,2579,2580,2582,2584],{"class":501,"line":618},[499,2581,621],{"class":594},[499,2583,598],{"class":587},[499,2585,626],{"class":587},[499,2587,2588,2591,2593],{"class":501,"line":629},[499,2589,2590],{"class":594},"    sampling",[499,2592,598],{"class":587},[499,2594,626],{"class":587},[499,2596,2597,2600,2602],{"class":501,"line":639},[499,2598,2599],{"class":594},"      rates",[499,2601,598],{"class":587},[499,2603,626],{"class":587},[499,2605,2606,2609,2611,2614],{"class":501,"line":657},[499,2607,2608],{"class":594},"        info",[499,2610,598],{"class":587},[499,2612,2613],{"class":1097}," 10",[499,2615,615],{"class":587},[499,2617,2618,2621,2623,2625],{"class":501,"line":663},[499,2619,2620],{"class":594},"        warn",[499,2622,598],{"class":587},[499,2624,2193],{"class":1097},[499,2626,615],{"class":587},[499,2628,2629,2632,2634,2637],{"class":501,"line":669},[499,2630,2631],{"class":594},"        debug",[499,2633,598],{"class":587},[499,2635,2636],{"class":1097}," 5",[499,2638,615],{"class":587},[499,2640,2641,2644,2646,2649],{"class":501,"line":929},[499,2642,2643],{"class":594},"        error",[499,2645,598],{"class":587},[499,2647,2648],{"class":1097}," 100",[499,2650,615],{"class":587},[499,2652,2653],{"class":501,"line":934},[499,2654,2655],{"class":587},"      },\n",[499,2657,2658],{"class":501,"line":956},[499,2659,660],{"class":587},[499,2661,2662],{"class":501,"line":1007},[499,2663,666],{"class":587},[499,2665,2666,2668],{"class":501,"line":1012},[499,2667,672],{"class":587},[499,2669,675],{"class":583},[413,2671,2672],{},"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.",[481,2674,2676],{"id":2675},"tail-sampling","Tail Sampling",[413,2678,2679],{},"Evaluate after the request completes and force-keep logs that match specific conditions, regardless of head sampling.",[489,2681,2683],{"className":562,"code":2682,"filename":564,"language":565,"meta":495,"style":495},"export default defineNuxtConfig({\n  modules: ['evlog\u002Fnuxt'],\n  evlog: {\n    sampling: {\n      rates: { info: 10 },\n      keep: [\n        { duration: 1000 },\n        { status: 400 },\n        { path: '\u002Fapi\u002Fcritical\u002F**' },\n      ],\n    },\n  },\n})\n",[417,2684,2685,2697,2715,2723,2731,2748,2757,2772,2785,2803,2810,2814,2818],{"__ignoreMap":495},[499,2686,2687,2689,2691,2693,2695],{"class":501,"line":502},[499,2688,573],{"class":572},[499,2690,576],{"class":572},[499,2692,580],{"class":579},[499,2694,584],{"class":583},[499,2696,588],{"class":587},[499,2698,2699,2701,2703,2705,2707,2709,2711,2713],{"class":501,"line":591},[499,2700,595],{"class":594},[499,2702,598],{"class":587},[499,2704,601],{"class":583},[499,2706,604],{"class":587},[499,2708,607],{"class":508},[499,2710,604],{"class":587},[499,2712,612],{"class":583},[499,2714,615],{"class":587},[499,2716,2717,2719,2721],{"class":501,"line":618},[499,2718,621],{"class":594},[499,2720,598],{"class":587},[499,2722,626],{"class":587},[499,2724,2725,2727,2729],{"class":501,"line":629},[499,2726,2590],{"class":594},[499,2728,598],{"class":587},[499,2730,626],{"class":587},[499,2732,2733,2735,2737,2739,2742,2744,2746],{"class":501,"line":639},[499,2734,2599],{"class":594},[499,2736,598],{"class":587},[499,2738,802],{"class":587},[499,2740,2741],{"class":594}," info",[499,2743,598],{"class":587},[499,2745,2613],{"class":1097},[499,2747,1963],{"class":587},[499,2749,2750,2753,2755],{"class":501,"line":657},[499,2751,2752],{"class":594},"      keep",[499,2754,598],{"class":587},[499,2756,1825],{"class":583},[499,2758,2759,2762,2765,2767,2770],{"class":501,"line":663},[499,2760,2761],{"class":587},"        {",[499,2763,2764],{"class":594}," duration",[499,2766,598],{"class":587},[499,2768,2769],{"class":1097}," 1000",[499,2771,1963],{"class":587},[499,2773,2774,2776,2779,2781,2783],{"class":501,"line":669},[499,2775,2761],{"class":587},[499,2777,2778],{"class":594}," status",[499,2780,598],{"class":587},[499,2782,1302],{"class":1097},[499,2784,1963],{"class":587},[499,2786,2787,2789,2792,2794,2796,2799,2801],{"class":501,"line":929},[499,2788,2761],{"class":587},[499,2790,2791],{"class":594}," path",[499,2793,598],{"class":587},[499,2795,647],{"class":587},[499,2797,2798],{"class":508},"\u002Fapi\u002Fcritical\u002F**",[499,2800,604],{"class":587},[499,2802,1963],{"class":587},[499,2804,2805,2808],{"class":501,"line":934},[499,2806,2807],{"class":583},"      ]",[499,2809,615],{"class":587},[499,2811,2812],{"class":501,"line":956},[499,2813,660],{"class":587},[499,2815,2816],{"class":501,"line":1007},[499,2817,666],{"class":587},[499,2819,2820,2822],{"class":501,"line":1012},[499,2821,672],{"class":587},[499,2823,675],{"class":583},[481,2825,2827],{"id":2826},"custom-tail-sampling","Custom Tail Sampling",[413,2829,2830,2831,2834],{},"For conditions beyond status, duration, and path, use the ",[417,2832,2833],{},"evlog:emit:keep"," hook:",[489,2836,2839],{"className":562,"code":2837,"filename":2838,"language":565,"meta":495,"style":495},"export default defineNitroPlugin((nitroApp) => {\n  nitroApp.hooks.hook('evlog:emit:keep', (ctx) => {\n    const user = ctx.context.user as { premium?: boolean } | undefined\n    if (user?.premium) {\n      ctx.shouldKeep = true\n    }\n  })\n})\n","server\u002Fplugins\u002Fevlog-sampling.ts",[417,2840,2841,2861,2893,2937,2956,2971,2976,2982],{"__ignoreMap":495},[499,2842,2843,2845,2847,2849,2851,2853,2855,2857,2859],{"class":501,"line":502},[499,2844,573],{"class":572},[499,2846,576],{"class":572},[499,2848,2263],{"class":579},[499,2850,584],{"class":583},[499,2852,584],{"class":587},[499,2854,2270],{"class":722},[499,2856,726],{"class":587},[499,2858,729],{"class":715},[499,2860,626],{"class":587},[499,2862,2863,2865,2867,2869,2871,2873,2875,2877,2879,2881,2883,2885,2887,2889,2891],{"class":501,"line":591},[499,2864,2281],{"class":583},[499,2866,786],{"class":587},[499,2868,2286],{"class":583},[499,2870,786],{"class":587},[499,2872,2291],{"class":579},[499,2874,584],{"class":594},[499,2876,604],{"class":587},[499,2878,2833],{"class":508},[499,2880,604],{"class":587},[499,2882,817],{"class":587},[499,2884,719],{"class":587},[499,2886,2475],{"class":722},[499,2888,726],{"class":587},[499,2890,729],{"class":715},[499,2892,626],{"class":587},[499,2894,2895,2898,2900,2902,2905,2907,2910,2912,2915,2918,2920,2923,2926,2929,2931,2934],{"class":501,"line":618},[499,2896,2897],{"class":715},"    const",[499,2899,797],{"class":583},[499,2901,742],{"class":587},[499,2903,2904],{"class":583}," ctx",[499,2906,786],{"class":587},[499,2908,2909],{"class":583},"context",[499,2911,786],{"class":587},[499,2913,2914],{"class":583},"user",[499,2916,2917],{"class":572}," as",[499,2919,802],{"class":587},[499,2921,2922],{"class":594}," premium",[499,2924,2925],{"class":587},"?:",[499,2927,2928],{"class":505}," boolean",[499,2930,832],{"class":587},[499,2932,2933],{"class":587}," |",[499,2935,2936],{"class":505}," undefined\n",[499,2938,2939,2942,2944,2946,2949,2952,2954],{"class":501,"line":629},[499,2940,2941],{"class":572},"    if",[499,2943,719],{"class":594},[499,2945,2914],{"class":583},[499,2947,2948],{"class":587},"?.",[499,2950,2951],{"class":583},"premium",[499,2953,1278],{"class":594},[499,2955,588],{"class":587},[499,2957,2958,2961,2963,2966,2968],{"class":501,"line":639},[499,2959,2960],{"class":583},"      ctx",[499,2962,786],{"class":587},[499,2964,2965],{"class":583},"shouldKeep",[499,2967,742],{"class":587},[499,2969,2970],{"class":1025}," true\n",[499,2972,2973],{"class":501,"line":657},[499,2974,2975],{"class":587},"    }\n",[499,2977,2978,2980],{"class":501,"line":663},[499,2979,2515],{"class":587},[499,2981,675],{"class":594},[499,2983,2984,2986],{"class":501,"line":669},[499,2985,672],{"class":587},[499,2987,675],{"class":583},[1410,2989,2990,2991,2994],{"color":1412,"icon":13},"Errors are always kept by default. You have to explicitly set ",[417,2992,2993],{},"error: 0"," to drop them.",[477,2996,2998],{"id":2997},"client-transport","Client Transport",[413,3000,3001],{},"Send browser logs to your server for processing and draining alongside server-side events.",[489,3003,3005],{"className":562,"code":3004,"filename":564,"language":565,"meta":495,"style":495},"export default defineNuxtConfig({\n  modules: ['evlog\u002Fnuxt'],\n  evlog: {\n    transport: {\n      enabled: true,\n      endpoint: '\u002Fapi\u002F_evlog\u002Fingest',\n    },\n  },\n})\n",[417,3006,3007,3019,3037,3045,3054,3065,3081,3085,3089],{"__ignoreMap":495},[499,3008,3009,3011,3013,3015,3017],{"class":501,"line":502},[499,3010,573],{"class":572},[499,3012,576],{"class":572},[499,3014,580],{"class":579},[499,3016,584],{"class":583},[499,3018,588],{"class":587},[499,3020,3021,3023,3025,3027,3029,3031,3033,3035],{"class":501,"line":591},[499,3022,595],{"class":594},[499,3024,598],{"class":587},[499,3026,601],{"class":583},[499,3028,604],{"class":587},[499,3030,607],{"class":508},[499,3032,604],{"class":587},[499,3034,612],{"class":583},[499,3036,615],{"class":587},[499,3038,3039,3041,3043],{"class":501,"line":618},[499,3040,621],{"class":594},[499,3042,598],{"class":587},[499,3044,626],{"class":587},[499,3046,3047,3050,3052],{"class":501,"line":629},[499,3048,3049],{"class":594},"    transport",[499,3051,598],{"class":587},[499,3053,626],{"class":587},[499,3055,3056,3059,3061,3063],{"class":501,"line":639},[499,3057,3058],{"class":594},"      enabled",[499,3060,598],{"class":587},[499,3062,1026],{"class":1025},[499,3064,615],{"class":587},[499,3066,3067,3070,3072,3074,3077,3079],{"class":501,"line":657},[499,3068,3069],{"class":594},"      endpoint",[499,3071,598],{"class":587},[499,3073,647],{"class":587},[499,3075,3076],{"class":508},"\u002Fapi\u002F_evlog\u002Fingest",[499,3078,604],{"class":587},[499,3080,615],{"class":587},[499,3082,3083],{"class":501,"line":663},[499,3084,660],{"class":587},[499,3086,3087],{"class":501,"line":669},[499,3088,666],{"class":587},[499,3090,3091,3093],{"class":501,"line":929},[499,3092,672],{"class":587},[499,3094,675],{"class":583},[481,3096,3098],{"id":3097},"how-it-works","How It Works",[3100,3101,3102,3108,3114,3117,3125],"ol",{},[441,3103,3104,3105],{},"Client calls ",[417,3106,3107],{},"log.info({ action: 'click', button: 'submit' })",[441,3109,3110,3111,3113],{},"Log is sent to ",[417,3112,3076],{}," via POST",[441,3115,3116],{},"Server enriches with environment context",[441,3118,3119,3121,3122],{},[417,3120,2298],{}," hook is called with ",[417,3123,3124],{},"source: 'client'",[441,3126,3127],{},"External services receive the log",[481,3129,3131],{"id":3130},"client-identity","Client Identity",[413,3133,3134,3135,598],{},"Attach user context to every client log with ",[417,3136,3137],{},"setIdentity",[489,3139,3142],{"className":562,"code":3140,"filename":3141,"language":565,"meta":495,"style":495},"\u002F\u002F After login\nsetIdentity({ userId: 'usr_123', orgId: 'org_456' })\n\nlog.info({ action: 'checkout' })\n\u002F\u002F -> { userId: 'usr_123', orgId: 'org_456', action: 'checkout', ... }\n\n\u002F\u002F After logout\nclearIdentity()\n","Nuxt (auto-imported)",[417,3143,3144,3150,3188,3192,3221,3226,3230,3235],{"__ignoreMap":495},[499,3145,3146],{"class":501,"line":502},[499,3147,3149],{"class":3148},"sHwdD","\u002F\u002F After login\n",[499,3151,3152,3154,3156,3158,3161,3163,3165,3168,3170,3172,3175,3177,3179,3182,3184,3186],{"class":501,"line":591},[499,3153,3137],{"class":579},[499,3155,584],{"class":583},[499,3157,794],{"class":587},[499,3159,3160],{"class":594}," userId",[499,3162,598],{"class":587},[499,3164,647],{"class":587},[499,3166,3167],{"class":508},"usr_123",[499,3169,604],{"class":587},[499,3171,817],{"class":587},[499,3173,3174],{"class":594}," orgId",[499,3176,598],{"class":587},[499,3178,647],{"class":587},[499,3180,3181],{"class":508},"org_456",[499,3183,604],{"class":587},[499,3185,832],{"class":587},[499,3187,675],{"class":583},[499,3189,3190],{"class":501,"line":618},[499,3191,778],{"emptyLinePlaceholder":777},[499,3193,3194,3197,3199,3201,3203,3205,3208,3210,3212,3215,3217,3219],{"class":501,"line":629},[499,3195,3196],{"class":583},"log",[499,3198,786],{"class":587},[499,3200,1412],{"class":579},[499,3202,584],{"class":583},[499,3204,794],{"class":587},[499,3206,3207],{"class":594}," action",[499,3209,598],{"class":587},[499,3211,647],{"class":587},[499,3213,3214],{"class":508},"checkout",[499,3216,604],{"class":587},[499,3218,832],{"class":587},[499,3220,675],{"class":583},[499,3222,3223],{"class":501,"line":639},[499,3224,3225],{"class":3148},"\u002F\u002F -> { userId: 'usr_123', orgId: 'org_456', action: 'checkout', ... }\n",[499,3227,3228],{"class":501,"line":657},[499,3229,778],{"emptyLinePlaceholder":777},[499,3231,3232],{"class":501,"line":663},[499,3233,3234],{"class":3148},"\u002F\u002F After logout\n",[499,3236,3237,3240],{"class":501,"line":669},[499,3238,3239],{"class":579},"clearIdentity",[499,3241,3242],{"class":583},"()\n",[481,3244,3246],{"id":3245},"syncing-identity-with-auth","Syncing Identity with Auth",[413,3248,3249],{},"Use a route middleware to keep identity in sync with your auth state:",[489,3251,3254],{"className":562,"code":3252,"filename":3253,"language":565,"meta":495,"style":495},"export default defineNuxtRouteMiddleware(() => {\n  const { user } = useAuth()\n\n  if (user.value) {\n    setIdentity({ userId: user.value.id, email: user.value.email })\n  } else {\n    clearIdentity()\n  }\n})\n","middleware\u002Fidentity.global.ts",[417,3255,3256,3273,3290,3294,3311,3357,3366,3373,3377],{"__ignoreMap":495},[499,3257,3258,3260,3262,3265,3267,3269,3271],{"class":501,"line":502},[499,3259,573],{"class":572},[499,3261,576],{"class":572},[499,3263,3264],{"class":579}," defineNuxtRouteMiddleware",[499,3266,584],{"class":583},[499,3268,2392],{"class":587},[499,3270,729],{"class":715},[499,3272,626],{"class":587},[499,3274,3275,3277,3279,3281,3283,3285,3288],{"class":501,"line":591},[499,3276,736],{"class":715},[499,3278,802],{"class":587},[499,3280,797],{"class":583},[499,3282,832],{"class":587},[499,3284,742],{"class":587},[499,3286,3287],{"class":579}," useAuth",[499,3289,3242],{"class":594},[499,3291,3292],{"class":501,"line":618},[499,3293,778],{"emptyLinePlaceholder":777},[499,3295,3296,3298,3300,3302,3304,3307,3309],{"class":501,"line":629},[499,3297,1261],{"class":572},[499,3299,719],{"class":594},[499,3301,2914],{"class":583},[499,3303,786],{"class":587},[499,3305,3306],{"class":583},"value",[499,3308,1278],{"class":594},[499,3310,588],{"class":587},[499,3312,3313,3316,3318,3320,3322,3324,3326,3328,3330,3332,3335,3337,3340,3342,3344,3346,3348,3350,3353,3355],{"class":501,"line":639},[499,3314,3315],{"class":579},"    setIdentity",[499,3317,584],{"class":594},[499,3319,794],{"class":587},[499,3321,3160],{"class":594},[499,3323,598],{"class":587},[499,3325,797],{"class":583},[499,3327,786],{"class":587},[499,3329,3306],{"class":583},[499,3331,786],{"class":587},[499,3333,3334],{"class":583},"id",[499,3336,817],{"class":587},[499,3338,3339],{"class":594}," email",[499,3341,598],{"class":587},[499,3343,797],{"class":583},[499,3345,786],{"class":587},[499,3347,3306],{"class":583},[499,3349,786],{"class":587},[499,3351,3352],{"class":583},"email",[499,3354,832],{"class":587},[499,3356,675],{"class":594},[499,3358,3359,3361,3364],{"class":501,"line":657},[499,3360,2515],{"class":587},[499,3362,3363],{"class":572}," else",[499,3365,626],{"class":587},[499,3367,3368,3371],{"class":501,"line":663},[499,3369,3370],{"class":579},"    clearIdentity",[499,3372,3242],{"class":594},[499,3374,3375],{"class":501,"line":669},[499,3376,1381],{"class":587},[499,3378,3379,3381],{"class":501,"line":929},[499,3380,672],{"class":587},[499,3382,675],{"class":583},[477,3384,3386],{"id":3385},"production-tips","Production Tips",[413,3388,3389,3390,3393],{},"Use Nuxt's ",[417,3391,3392],{},"$production"," override to keep full logging in development while sampling and disabling console output in production:",[489,3395,3397],{"className":562,"code":3396,"filename":564,"language":565,"meta":495,"style":495},"export default defineNuxtConfig({\n  modules: ['evlog\u002Fnuxt'],\n  evlog: {\n    env: { service: 'my-app' },\n  },\n  $production: {\n    evlog: {\n      console: false,\n      sampling: {\n        rates: { info: 10, warn: 50, debug: 0 },\n        keep: [{ duration: 1000 }, { status: 400 }],\n      },\n    },\n  },\n})\n",[417,3398,3399,3411,3429,3437,3457,3461,3470,3479,3491,3500,3535,3569,3573,3577,3581],{"__ignoreMap":495},[499,3400,3401,3403,3405,3407,3409],{"class":501,"line":502},[499,3402,573],{"class":572},[499,3404,576],{"class":572},[499,3406,580],{"class":579},[499,3408,584],{"class":583},[499,3410,588],{"class":587},[499,3412,3413,3415,3417,3419,3421,3423,3425,3427],{"class":501,"line":591},[499,3414,595],{"class":594},[499,3416,598],{"class":587},[499,3418,601],{"class":583},[499,3420,604],{"class":587},[499,3422,607],{"class":508},[499,3424,604],{"class":587},[499,3426,612],{"class":583},[499,3428,615],{"class":587},[499,3430,3431,3433,3435],{"class":501,"line":618},[499,3432,621],{"class":594},[499,3434,598],{"class":587},[499,3436,626],{"class":587},[499,3438,3439,3441,3443,3445,3447,3449,3451,3453,3455],{"class":501,"line":629},[499,3440,632],{"class":594},[499,3442,598],{"class":587},[499,3444,802],{"class":587},[499,3446,1951],{"class":594},[499,3448,598],{"class":587},[499,3450,647],{"class":587},[499,3452,650],{"class":508},[499,3454,604],{"class":587},[499,3456,1963],{"class":587},[499,3458,3459],{"class":501,"line":639},[499,3460,666],{"class":587},[499,3462,3463,3466,3468],{"class":501,"line":657},[499,3464,3465],{"class":594},"  $production",[499,3467,598],{"class":587},[499,3469,626],{"class":587},[499,3471,3472,3475,3477],{"class":501,"line":663},[499,3473,3474],{"class":594},"    evlog",[499,3476,598],{"class":587},[499,3478,626],{"class":587},[499,3480,3481,3484,3486,3489],{"class":501,"line":669},[499,3482,3483],{"class":594},"      console",[499,3485,598],{"class":587},[499,3487,3488],{"class":1025}," false",[499,3490,615],{"class":587},[499,3492,3493,3496,3498],{"class":501,"line":929},[499,3494,3495],{"class":594},"      sampling",[499,3497,598],{"class":587},[499,3499,626],{"class":587},[499,3501,3502,3505,3507,3509,3511,3513,3515,3517,3520,3522,3524,3526,3529,3531,3533],{"class":501,"line":934},[499,3503,3504],{"class":594},"        rates",[499,3506,598],{"class":587},[499,3508,802],{"class":587},[499,3510,2741],{"class":594},[499,3512,598],{"class":587},[499,3514,2613],{"class":1097},[499,3516,817],{"class":587},[499,3518,3519],{"class":594}," warn",[499,3521,598],{"class":587},[499,3523,2193],{"class":1097},[499,3525,817],{"class":587},[499,3527,3528],{"class":594}," debug",[499,3530,598],{"class":587},[499,3532,1275],{"class":1097},[499,3534,1963],{"class":587},[499,3536,3537,3540,3542,3544,3546,3548,3550,3552,3555,3557,3559,3561,3563,3565,3567],{"class":501,"line":956},[499,3538,3539],{"class":594},"        keep",[499,3541,598],{"class":587},[499,3543,601],{"class":583},[499,3545,794],{"class":587},[499,3547,2764],{"class":594},[499,3549,598],{"class":587},[499,3551,2769],{"class":1097},[499,3553,3554],{"class":587}," },",[499,3556,802],{"class":587},[499,3558,2778],{"class":594},[499,3560,598],{"class":587},[499,3562,1302],{"class":1097},[499,3564,832],{"class":587},[499,3566,612],{"class":583},[499,3568,615],{"class":587},[499,3570,3571],{"class":501,"line":1007},[499,3572,2655],{"class":587},[499,3574,3575],{"class":501,"line":1012},[499,3576,660],{"class":587},[499,3578,3579],{"class":501,"line":1046},[499,3580,666],{"class":587},[499,3582,3583,3585],{"class":501,"line":1378},[499,3584,672],{"class":587},[499,3586,675],{"class":583},[477,3588,3590],{"id":3589},"next-steps","Next Steps",[413,3592,3593,3594,3596],{},"Deepen your ",[1882,3595,211],{}," integration:",[438,3598,3599,3604,3609,3614],{},[441,3600,3601,3603],{},[466,3602,51],{"href":52},": Design comprehensive events with context layering",[441,3605,3606,3608],{},[466,3607,305],{"href":310},": Send logs to Axiom, Sentry, PostHog, and more",[441,3610,3611,3613],{},[466,3612,175],{"href":176},": Control log volume with head and tail sampling",[441,3615,3616,3618,3619,420,3621,424,3623,3625],{},[466,3617,56],{"href":57},": Throw errors with ",[417,3620,1143],{},[417,3622,1146],{},[417,3624,1149],{}," fields",[3627,3628,3629],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}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 .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 .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}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}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}",{"title":495,"searchDepth":591,"depth":591,"links":3631},[3632,3636,3637,3638,3639,3642,3646,3651,3656,3657],{"id":479,"depth":591,"text":20,"children":3633},[3634,3635],{"id":483,"depth":618,"text":484},{"id":558,"depth":618,"text":559},{"id":688,"depth":591,"text":51},{"id":1134,"depth":591,"text":1135},{"id":1427,"depth":591,"text":170},{"id":1734,"depth":591,"text":1735,"children":3640},[3641],{"id":1893,"depth":618,"text":1894},{"id":2067,"depth":591,"text":2068,"children":3643},[3644,3645],{"id":2074,"depth":618,"text":2075},{"id":2316,"depth":618,"text":2317},{"id":1446,"depth":591,"text":175,"children":3647},[3648,3649,3650],{"id":2538,"depth":618,"text":2539},{"id":2675,"depth":618,"text":2676},{"id":2826,"depth":618,"text":2827},{"id":2997,"depth":591,"text":2998,"children":3652},[3653,3654,3655],{"id":3097,"depth":618,"text":3098},{"id":3130,"depth":618,"text":3131},{"id":3245,"depth":618,"text":3246},{"id":3385,"depth":591,"text":3386},{"id":3589,"depth":591,"text":3590},"Automatic wide events, structured errors, drain adapters, enrichers, tail sampling, and client transport in Nuxt applications.","md",null,{},{"title":211,"icon":214},{"title":211,"description":3658},"xTvtny2mSuTNf0_nZJ9RsMN0P5v118Y76YhCv3DF1Kg",[3666,3668],{"title":41,"path":207,"stem":208,"description":3667,"icon":209,"children":-1},"evlog supports every major TypeScript framework. Choose your stack and get started in minutes.",{"title":216,"path":217,"stem":218,"description":3669,"icon":219,"children":-1},"Wide events, structured errors, drain pipeline, tail sampling, route-based services, error handling, and client-side logging in Next.js applications.",1778327131744]