[{"data":1,"prerenderedAt":6069},["ShallowReactive",2],{"navigation_docs":3,"-frameworks-nextjs":429,"-frameworks-nextjs-surround":6064},[4,35,159,201,289,326,413],{"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,297,302,307,312,317,321],{"title":41,"path":295,"stem":296,"icon":54},"\u002Fbuild-on-top\u002Foverview","5.build-on-top\u002F0.overview",{"title":298,"path":299,"stem":300,"icon":301},"Stream API","\u002Fbuild-on-top\u002Fstream-api","5.build-on-top\u002F1.stream-api","i-lucide-radio-tower",{"title":303,"path":304,"stem":305,"icon":306},"Stream server","\u002Fbuild-on-top\u002Fstream-server","5.build-on-top\u002F2.stream-server","i-lucide-radio",{"title":308,"path":309,"stem":310,"icon":311},"FS reader","\u002Fbuild-on-top\u002Ffs-reader","5.build-on-top\u002F3.fs-reader","i-lucide-folder-search",{"title":313,"path":314,"stem":315,"icon":316},"Identity headers","\u002Fbuild-on-top\u002Fidentity-headers","5.build-on-top\u002F4.identity-headers","i-lucide-fingerprint",{"title":156,"path":318,"stem":319,"icon":320},"\u002Fbuild-on-top\u002Frecipes","5.build-on-top\u002F5.recipes","i-lucide-chef-hat",{"title":322,"path":323,"stem":324,"icon":325},"Catalogs as packages","\u002Fbuild-on-top\u002Fcatalogs-as-packages","5.build-on-top\u002F6.catalogs-as-packages","i-lucide-package",{"title":327,"path":328,"stem":329,"children":330,"page":34},"Adapters","\u002Fadapters","6.adapters",[331,334,374,389],{"title":41,"path":332,"stem":333,"icon":44},"\u002Fadapters\u002Foverview","6.adapters\u002F01.overview",{"title":335,"path":336,"stem":337,"children":338,"page":34},"Cloud destinations","\u002Fadapters\u002Fcloud","6.adapters\u002F02.cloud",[339,344,349,354,359,364,369],{"title":340,"path":341,"stem":342,"icon":343},"Axiom","\u002Fadapters\u002Fcloud\u002Faxiom","6.adapters\u002F02.cloud\u002F01.axiom","i-custom-axiom",{"title":345,"path":346,"stem":347,"icon":348},"OTLP","\u002Fadapters\u002Fcloud\u002Fotlp","6.adapters\u002F02.cloud\u002F02.otlp","i-simple-icons-opentelemetry",{"title":350,"path":351,"stem":352,"icon":353},"PostHog","\u002Fadapters\u002Fcloud\u002Fposthog","6.adapters\u002F02.cloud\u002F03.posthog","i-simple-icons-posthog",{"title":355,"path":356,"stem":357,"icon":358},"Sentry","\u002Fadapters\u002Fcloud\u002Fsentry","6.adapters\u002F02.cloud\u002F04.sentry","i-simple-icons-sentry",{"title":360,"path":361,"stem":362,"icon":363},"Better Stack","\u002Fadapters\u002Fcloud\u002Fbetter-stack","6.adapters\u002F02.cloud\u002F05.better-stack","i-simple-icons-betterstack",{"title":365,"path":366,"stem":367,"icon":368},"Datadog","\u002Fadapters\u002Fcloud\u002Fdatadog","6.adapters\u002F02.cloud\u002F06.datadog","i-simple-icons-datadog",{"title":370,"path":371,"stem":372,"icon":373},"HyperDX","\u002Fadapters\u002Fcloud\u002Fhyperdx","6.adapters\u002F02.cloud\u002F07.hyperdx","i-custom-hyperdx",{"title":375,"path":376,"stem":377,"children":378,"page":34},"Self-hosted","\u002Fadapters\u002Fself-hosted","6.adapters\u002F03.self-hosted",[379,384],{"title":380,"path":381,"stem":382,"icon":383},"File System","\u002Fadapters\u002Fself-hosted\u002Ffs","6.adapters\u002F03.self-hosted\u002F01.fs","i-lucide-hard-drive",{"title":385,"path":386,"stem":387,"icon":388},"NuxtHub","\u002Fadapters\u002Fself-hosted\u002Fnuxthub","6.adapters\u002F03.self-hosted\u002F02.nuxthub","i-simple-icons-nuxt",{"title":390,"path":391,"stem":392,"children":393,"page":34},"Building blocks","\u002Fadapters\u002Fbuilding-blocks","6.adapters\u002F04.building-blocks",[394,399,404,408],{"title":395,"path":396,"stem":397,"icon":398},"Pipeline","\u002Fadapters\u002Fbuilding-blocks\u002Fpipeline","6.adapters\u002F04.building-blocks\u002F01.pipeline","i-lucide-workflow",{"title":400,"path":401,"stem":402,"icon":403},"HTTP","\u002Fadapters\u002Fbuilding-blocks\u002Fhttp","6.adapters\u002F04.building-blocks\u002F02.http","i-lucide-globe",{"title":405,"path":406,"stem":407,"icon":83},"Custom Adapters","\u002Fadapters\u002Fbuilding-blocks\u002Fcustom","6.adapters\u002F04.building-blocks\u002F03.custom",{"title":409,"path":410,"stem":411,"icon":412},"Toolkit","\u002Fadapters\u002Fbuilding-blocks\u002Ftoolkit","6.adapters\u002F04.building-blocks\u002F04.toolkit","i-lucide-blocks",{"title":414,"path":415,"stem":416,"children":417,"page":34},"Enrichers","\u002Fenrichers","7.enrichers",[418,421,425],{"title":41,"path":419,"stem":420,"icon":28},"\u002Fenrichers\u002Foverview","7.enrichers\u002F1.overview",{"title":422,"path":423,"stem":424,"icon":288},"Built-in","\u002Fenrichers\u002Fbuilt-in","7.enrichers\u002F2.built-in",{"title":426,"path":427,"stem":428,"icon":83},"Custom","\u002Fenrichers\u002Fcustom","7.enrichers\u002F3.custom",{"id":430,"title":216,"body":431,"description":6054,"extension":6055,"links":6056,"meta":6060,"navigation":6061,"path":217,"seo":6062,"stem":218,"__hash__":6063},"docs\u002F4.frameworks\u002F02.nextjs.md",{"type":432,"value":433,"toc":6025},"minimark",[434,451,498,502,507,578,582,701,705,853,857,872,918,922,1045,1049,1062,1079,1148,1161,1510,1520,1524,1558,1841,1856,1859,1896,1918,1921,1950,1995,1999,2005,2818,2821,2824,3201,3204,3284,3291,3310,3485,3489,3507,3973,3982,4107,4110,4177,4181,4194,4494,4507,4510,4526,4531,4733,4737,4740,4965,4970,4973,4986,5072,5085,5089,5094,5241,5245,5252,5440,5443,5449,5690,5694,5700,5831,5834,5918,5922,5964,5972,5982,5986,5992,6021],[435,436,437,438,442,443,446,447,450],"p",{},"evlog integrates with Next.js App Router via a ",[439,440,441],"code",{},"createEvlog()"," factory that provides ",[439,444,445],{},"withEvlog()"," handler wrapper, ",[439,448,449],{},"useLogger()",", and typed exports. One file, zero global state.",[452,453,456,459,484],"prompt",{":actions":454,"description":455,"icon":219},"[\"copy\",\"cursor\",\"windsurf\"]","Set up evlog in my Next.js app",[435,457,458],{},"Set up evlog in my Next.js app with wide events and structured errors.",[460,461,462,466,469,472,475,478,481],"ul",{},[463,464,465],"li",{},"Install evlog: pnpm add evlog",[463,467,468],{},"Create lib\u002Fevlog.ts with createEvlog() to export withEvlog, useLogger, createError",[463,470,471],{},"Set service name and optional sampling\u002Fdrain config",[463,473,474],{},"Wrap API route handlers with withEvlog()",[463,476,477],{},"Use useLogger() inside handlers to build wide events with log.set()",[463,479,480],{},"Throw errors with createError({ message, status, why, fix })",[463,482,483],{},"Wide events are auto-emitted when each request completes",[435,485,486,487,493,494],{},"Docs: ",[488,489,490],"a",{"href":490,"rel":491},"https:\u002F\u002Fwww.evlog.dev\u002Fframeworks\u002Fnextjs",[492],"nofollow","\nAdapters: ",[488,495,496],{"href":496,"rel":497},"https:\u002F\u002Fwww.evlog.dev\u002Fadapters",[492],[499,500,20],"h2",{"id":501},"quick-start",[503,504,506],"h3",{"id":505},"_1-install","1. Install",[508,509,510,535,549,563],"code-group",{},[511,512,518],"pre",{"className":513,"code":514,"filename":515,"language":516,"meta":517,"style":517},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","pnpm add evlog\n","pnpm","bash","",[439,519,520],{"__ignoreMap":517},[521,522,525,528,532],"span",{"class":523,"line":524},"line",1,[521,526,515],{"class":527},"sBMFI",[521,529,531],{"class":530},"sfazB"," add",[521,533,534],{"class":530}," evlog\n",[511,536,539],{"className":513,"code":537,"filename":538,"language":516,"meta":517,"style":517},"bun add evlog\n","bun",[439,540,541],{"__ignoreMap":517},[521,542,543,545,547],{"class":523,"line":524},[521,544,538],{"class":527},[521,546,531],{"class":530},[521,548,534],{"class":530},[511,550,553],{"className":513,"code":551,"filename":552,"language":516,"meta":517,"style":517},"yarn add evlog\n","yarn",[439,554,555],{"__ignoreMap":517},[521,556,557,559,561],{"class":523,"line":524},[521,558,552],{"class":527},[521,560,531],{"class":530},[521,562,534],{"class":530},[511,564,567],{"className":513,"code":565,"filename":566,"language":516,"meta":517,"style":517},"npm install evlog\n","npm",[439,568,569],{"__ignoreMap":517},[521,570,571,573,576],{"class":523,"line":524},[521,572,566],{"class":527},[521,574,575],{"class":530}," install",[521,577,534],{"class":530},[503,579,581],{"id":580},"_2-create-your-evlog-instance","2. Create your evlog instance",[511,583,588],{"className":584,"code":585,"filename":586,"language":587,"meta":517,"style":517},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { createEvlog } from 'evlog\u002Fnext'\n\nexport const { withEvlog, useLogger, log, createError } = createEvlog({\n  service: 'my-app',\n})\n","lib\u002Fevlog.ts","typescript",[439,589,590,619,626,672,693],{"__ignoreMap":517},[521,591,592,596,600,604,607,610,613,616],{"class":523,"line":524},[521,593,595],{"class":594},"s7zQu","import",[521,597,599],{"class":598},"sMK4o"," {",[521,601,603],{"class":602},"sTEyZ"," createEvlog",[521,605,606],{"class":598}," }",[521,608,609],{"class":594}," from",[521,611,612],{"class":598}," '",[521,614,615],{"class":530},"evlog\u002Fnext",[521,617,618],{"class":598},"'\n",[521,620,622],{"class":523,"line":621},2,[521,623,625],{"emptyLinePlaceholder":624},true,"\n",[521,627,629,632,636,638,641,644,647,649,652,654,657,660,663,666,669],{"class":523,"line":628},3,[521,630,631],{"class":594},"export",[521,633,635],{"class":634},"spNyl"," const",[521,637,599],{"class":598},[521,639,640],{"class":602}," withEvlog",[521,642,643],{"class":598},",",[521,645,646],{"class":602}," useLogger",[521,648,643],{"class":598},[521,650,651],{"class":602}," log",[521,653,643],{"class":598},[521,655,656],{"class":602}," createError ",[521,658,659],{"class":598},"}",[521,661,662],{"class":598}," =",[521,664,603],{"class":665},"s2Zo4",[521,667,668],{"class":602},"(",[521,670,671],{"class":598},"{\n",[521,673,675,679,682,684,687,690],{"class":523,"line":674},4,[521,676,678],{"class":677},"swJcz","  service",[521,680,681],{"class":598},":",[521,683,612],{"class":598},[521,685,686],{"class":530},"my-app",[521,688,689],{"class":598},"'",[521,691,692],{"class":598},",\n",[521,694,696,698],{"class":523,"line":695},5,[521,697,659],{"class":598},[521,699,700],{"class":602},")\n",[503,702,704],{"id":703},"_3-wrap-a-route-handler","3. Wrap a route handler",[511,706,709],{"className":584,"code":707,"filename":708,"language":587,"meta":517,"style":517},"import { withEvlog, useLogger } from '@\u002Flib\u002Fevlog'\n\nexport const GET = withEvlog(async () => {\n  const log = useLogger()\n  log.set({ action: 'hello' })\n  return Response.json({ message: 'Hello!' })\n})\n","app\u002Fapi\u002Fhello\u002Froute.ts",[439,710,711,734,738,766,780,812,846],{"__ignoreMap":517},[521,712,713,715,717,719,721,723,725,727,729,732],{"class":523,"line":524},[521,714,595],{"class":594},[521,716,599],{"class":598},[521,718,640],{"class":602},[521,720,643],{"class":598},[521,722,646],{"class":602},[521,724,606],{"class":598},[521,726,609],{"class":594},[521,728,612],{"class":598},[521,730,731],{"class":530},"@\u002Flib\u002Fevlog",[521,733,618],{"class":598},[521,735,736],{"class":523,"line":621},[521,737,625],{"emptyLinePlaceholder":624},[521,739,740,742,744,747,750,752,754,757,760,763],{"class":523,"line":628},[521,741,631],{"class":594},[521,743,635],{"class":634},[521,745,746],{"class":602}," GET ",[521,748,749],{"class":598},"=",[521,751,640],{"class":665},[521,753,668],{"class":602},[521,755,756],{"class":634},"async",[521,758,759],{"class":598}," ()",[521,761,762],{"class":634}," =>",[521,764,765],{"class":598}," {\n",[521,767,768,771,773,775,777],{"class":523,"line":674},[521,769,770],{"class":634},"  const",[521,772,651],{"class":602},[521,774,662],{"class":598},[521,776,646],{"class":665},[521,778,779],{"class":677},"()\n",[521,781,782,785,788,791,793,796,799,801,803,806,808,810],{"class":523,"line":695},[521,783,784],{"class":602},"  log",[521,786,787],{"class":598},".",[521,789,790],{"class":665},"set",[521,792,668],{"class":677},[521,794,795],{"class":598},"{",[521,797,798],{"class":677}," action",[521,800,681],{"class":598},[521,802,612],{"class":598},[521,804,805],{"class":530},"hello",[521,807,689],{"class":598},[521,809,606],{"class":598},[521,811,700],{"class":677},[521,813,815,818,821,823,826,828,830,833,835,837,840,842,844],{"class":523,"line":814},6,[521,816,817],{"class":594},"  return",[521,819,820],{"class":602}," Response",[521,822,787],{"class":598},[521,824,825],{"class":665},"json",[521,827,668],{"class":677},[521,829,795],{"class":598},[521,831,832],{"class":677}," message",[521,834,681],{"class":598},[521,836,612],{"class":598},[521,838,839],{"class":530},"Hello!",[521,841,689],{"class":598},[521,843,606],{"class":598},[521,845,700],{"class":677},[521,847,849,851],{"class":523,"line":848},7,[521,850,659],{"class":598},[521,852,700],{"class":602},[499,854,856],{"id":855},"instrumentation","Instrumentation",[435,858,859,860,867,868,871],{},"Next.js supports an ",[488,861,864],{"href":862,"rel":863},"https:\u002F\u002Fnextjs.org\u002Fdocs\u002Fapp\u002Fguides\u002Finstrumentation",[492],[439,865,866],{},"instrumentation.ts"," file at the project root for server startup hooks and error reporting. evlog provides ",[439,869,870],{},"createInstrumentation()"," to integrate with this pattern.",[873,874,876,879],"callout",{"color":875,"icon":13},"info",[435,877,878],{},"These two APIs serve different purposes and can be used independently or together:",[460,880,881,891,906],{},[463,882,883,888,889],{},[884,885,886],"strong",{},[439,887,441],{},": per-request wide events via ",[439,890,445],{},[463,892,893,897,898,901,902,905],{},[884,894,895],{},[439,896,870],{},": server startup (",[439,899,900],{},"register()",") + unhandled error reporting (",[439,903,904],{},"onRequestError()",") across all routes, including SSR and RSC",[463,907,908,909,911,912,914,915,787],{},"Both can coexist: ",[439,910,900],{}," initializes and locks the logger first, so ",[439,913,441],{}," respects it. Each can have its own ",[439,916,917],{},"drain",[503,919,921],{"id":920},"_1-add-instrumentation-exports-to-your-evlog-instance","1. Add instrumentation exports to your evlog instance",[511,923,925],{"className":584,"code":924,"filename":586,"language":587,"meta":517,"style":517},"import { createInstrumentation } from 'evlog\u002Fnext\u002Finstrumentation'\nimport { createFsDrain } from 'evlog\u002Ffs'\n\nexport const { register, onRequestError } = createInstrumentation({\n  service: 'my-app',\n  drain: createFsDrain(),\n  captureOutput: true,\n})\n",[439,926,927,947,967,971,997,1011,1025,1038],{"__ignoreMap":517},[521,928,929,931,933,936,938,940,942,945],{"class":523,"line":524},[521,930,595],{"class":594},[521,932,599],{"class":598},[521,934,935],{"class":602}," createInstrumentation",[521,937,606],{"class":598},[521,939,609],{"class":594},[521,941,612],{"class":598},[521,943,944],{"class":530},"evlog\u002Fnext\u002Finstrumentation",[521,946,618],{"class":598},[521,948,949,951,953,956,958,960,962,965],{"class":523,"line":621},[521,950,595],{"class":594},[521,952,599],{"class":598},[521,954,955],{"class":602}," createFsDrain",[521,957,606],{"class":598},[521,959,609],{"class":594},[521,961,612],{"class":598},[521,963,964],{"class":530},"evlog\u002Ffs",[521,966,618],{"class":598},[521,968,969],{"class":523,"line":628},[521,970,625],{"emptyLinePlaceholder":624},[521,972,973,975,977,979,982,984,987,989,991,993,995],{"class":523,"line":674},[521,974,631],{"class":594},[521,976,635],{"class":634},[521,978,599],{"class":598},[521,980,981],{"class":602}," register",[521,983,643],{"class":598},[521,985,986],{"class":602}," onRequestError ",[521,988,659],{"class":598},[521,990,662],{"class":598},[521,992,935],{"class":665},[521,994,668],{"class":602},[521,996,671],{"class":598},[521,998,999,1001,1003,1005,1007,1009],{"class":523,"line":695},[521,1000,678],{"class":677},[521,1002,681],{"class":598},[521,1004,612],{"class":598},[521,1006,686],{"class":530},[521,1008,689],{"class":598},[521,1010,692],{"class":598},[521,1012,1013,1016,1018,1020,1023],{"class":523,"line":814},[521,1014,1015],{"class":677},"  drain",[521,1017,681],{"class":598},[521,1019,955],{"class":665},[521,1021,1022],{"class":602},"()",[521,1024,692],{"class":598},[521,1026,1027,1030,1032,1036],{"class":523,"line":848},[521,1028,1029],{"class":677},"  captureOutput",[521,1031,681],{"class":598},[521,1033,1035],{"class":1034},"sfNiH"," true",[521,1037,692],{"class":598},[521,1039,1041,1043],{"class":523,"line":1040},8,[521,1042,659],{"class":598},[521,1044,700],{"class":602},[503,1046,1048],{"id":1047},"_2-wire-up-instrumentationts","2. Wire up instrumentation.ts",[435,1050,1051,1052,1054,1055,1057,1058,1061],{},"Next.js evaluates ",[439,1053,866],{}," in both Node.js and Edge runtimes. Load your real ",[439,1056,586],{}," only when ",[439,1059,1060],{},"NEXT_RUNTIME === 'nodejs'"," so Edge bundles never pull Node-only drains (fs, adapters, etc.).",[435,1063,1064,1067,1068,1071,1072,1075,1076,681],{},[884,1065,1066],{},"Recommended",": ",[439,1069,1070],{},"defineNodeInstrumentation"," gates the Node runtime, dynamic-imports your module once (cached), and forwards ",[439,1073,1074],{},"register"," \u002F ",[439,1077,1078],{},"onRequestError",[511,1080,1082],{"className":584,"code":1081,"filename":866,"language":587,"meta":517,"style":517},"import { defineNodeInstrumentation } from 'evlog\u002Fnext\u002Finstrumentation'\n\nexport const { register, onRequestError } = defineNodeInstrumentation(() => import('.\u002Flib\u002Fevlog'))\n",[439,1083,1084,1103,1107],{"__ignoreMap":517},[521,1085,1086,1088,1090,1093,1095,1097,1099,1101],{"class":523,"line":524},[521,1087,595],{"class":594},[521,1089,599],{"class":598},[521,1091,1092],{"class":602}," defineNodeInstrumentation",[521,1094,606],{"class":598},[521,1096,609],{"class":594},[521,1098,612],{"class":598},[521,1100,944],{"class":530},[521,1102,618],{"class":598},[521,1104,1105],{"class":523,"line":621},[521,1106,625],{"emptyLinePlaceholder":624},[521,1108,1109,1111,1113,1115,1117,1119,1121,1123,1125,1127,1129,1131,1133,1136,1138,1140,1143,1145],{"class":523,"line":628},[521,1110,631],{"class":594},[521,1112,635],{"class":634},[521,1114,599],{"class":598},[521,1116,981],{"class":602},[521,1118,643],{"class":598},[521,1120,986],{"class":602},[521,1122,659],{"class":598},[521,1124,662],{"class":598},[521,1126,1092],{"class":665},[521,1128,668],{"class":602},[521,1130,1022],{"class":598},[521,1132,762],{"class":634},[521,1134,1135],{"class":598}," import",[521,1137,668],{"class":602},[521,1139,689],{"class":598},[521,1141,1142],{"class":530},".\u002Flib\u002Fevlog",[521,1144,689],{"class":598},[521,1146,1147],{"class":602},"))\n",[435,1149,1150,1153,1154,1156,1157,1160],{},[884,1151,1152],{},"Manual",": same behavior with explicit handlers; use this if you want full control in the root file (extra branches, per-error logic, or a different import strategy). Without a shared helper, each ",[439,1155,1078],{}," typically re-runs ",[439,1158,1159],{},"import('.\u002Flib\u002Fevlog')"," unless you add your own cache.",[511,1162,1164],{"className":584,"code":1163,"filename":866,"language":587,"meta":517,"style":517},"export async function register() {\n  if (process.env.NEXT_RUNTIME === 'nodejs') {\n    const { register } = await import('.\u002Flib\u002Fevlog')\n    await register()\n  }\n}\n\nexport async function onRequestError(\n  error: { digest?: string } & Error,\n  request: { path: string; method: string; headers: Record\u003Cstring, string> },\n  context: { routerKind: string; routePath: string; routeType: string; renderSource: string },\n) {\n  if (process.env.NEXT_RUNTIME === 'nodejs') {\n    const { onRequestError } = await import('.\u002Flib\u002Fevlog')\n    await onRequestError(error, request, context)\n  }\n}\n",[439,1165,1166,1182,1218,1246,1255,1260,1265,1269,1283,1313,1366,1412,1420,1449,1476,1500,1505],{"__ignoreMap":517},[521,1167,1168,1170,1173,1176,1178,1180],{"class":523,"line":524},[521,1169,631],{"class":594},[521,1171,1172],{"class":634}," async",[521,1174,1175],{"class":634}," function",[521,1177,981],{"class":665},[521,1179,1022],{"class":598},[521,1181,765],{"class":598},[521,1183,1184,1187,1190,1193,1195,1198,1200,1203,1206,1208,1211,1213,1216],{"class":523,"line":621},[521,1185,1186],{"class":594},"  if",[521,1188,1189],{"class":677}," (",[521,1191,1192],{"class":602},"process",[521,1194,787],{"class":598},[521,1196,1197],{"class":602},"env",[521,1199,787],{"class":598},[521,1201,1202],{"class":602},"NEXT_RUNTIME",[521,1204,1205],{"class":598}," ===",[521,1207,612],{"class":598},[521,1209,1210],{"class":530},"nodejs",[521,1212,689],{"class":598},[521,1214,1215],{"class":677},") ",[521,1217,671],{"class":598},[521,1219,1220,1223,1225,1227,1229,1231,1234,1236,1238,1240,1242,1244],{"class":523,"line":628},[521,1221,1222],{"class":634},"    const",[521,1224,599],{"class":598},[521,1226,981],{"class":602},[521,1228,606],{"class":598},[521,1230,662],{"class":598},[521,1232,1233],{"class":594}," await",[521,1235,1135],{"class":598},[521,1237,668],{"class":677},[521,1239,689],{"class":598},[521,1241,1142],{"class":530},[521,1243,689],{"class":598},[521,1245,700],{"class":677},[521,1247,1248,1251,1253],{"class":523,"line":674},[521,1249,1250],{"class":594},"    await",[521,1252,981],{"class":665},[521,1254,779],{"class":677},[521,1256,1257],{"class":523,"line":695},[521,1258,1259],{"class":598},"  }\n",[521,1261,1262],{"class":523,"line":814},[521,1263,1264],{"class":598},"}\n",[521,1266,1267],{"class":523,"line":848},[521,1268,625],{"emptyLinePlaceholder":624},[521,1270,1271,1273,1275,1277,1280],{"class":523,"line":1040},[521,1272,631],{"class":594},[521,1274,1172],{"class":634},[521,1276,1175],{"class":634},[521,1278,1279],{"class":665}," onRequestError",[521,1281,1282],{"class":598},"(\n",[521,1284,1286,1290,1292,1294,1297,1300,1303,1305,1308,1311],{"class":523,"line":1285},9,[521,1287,1289],{"class":1288},"sHdIc","  error",[521,1291,681],{"class":598},[521,1293,599],{"class":598},[521,1295,1296],{"class":677}," digest",[521,1298,1299],{"class":598},"?:",[521,1301,1302],{"class":527}," string",[521,1304,606],{"class":598},[521,1306,1307],{"class":598}," &",[521,1309,1310],{"class":527}," Error",[521,1312,692],{"class":598},[521,1314,1316,1319,1321,1323,1326,1328,1330,1333,1336,1338,1340,1342,1345,1347,1350,1353,1356,1358,1360,1363],{"class":523,"line":1315},10,[521,1317,1318],{"class":1288},"  request",[521,1320,681],{"class":598},[521,1322,599],{"class":598},[521,1324,1325],{"class":677}," path",[521,1327,681],{"class":598},[521,1329,1302],{"class":527},[521,1331,1332],{"class":598},";",[521,1334,1335],{"class":677}," method",[521,1337,681],{"class":598},[521,1339,1302],{"class":527},[521,1341,1332],{"class":598},[521,1343,1344],{"class":677}," headers",[521,1346,681],{"class":598},[521,1348,1349],{"class":527}," Record",[521,1351,1352],{"class":598},"\u003C",[521,1354,1355],{"class":527},"string",[521,1357,643],{"class":598},[521,1359,1302],{"class":527},[521,1361,1362],{"class":598},">",[521,1364,1365],{"class":598}," },\n",[521,1367,1369,1372,1374,1376,1379,1381,1383,1385,1388,1390,1392,1394,1397,1399,1401,1403,1406,1408,1410],{"class":523,"line":1368},11,[521,1370,1371],{"class":1288},"  context",[521,1373,681],{"class":598},[521,1375,599],{"class":598},[521,1377,1378],{"class":677}," routerKind",[521,1380,681],{"class":598},[521,1382,1302],{"class":527},[521,1384,1332],{"class":598},[521,1386,1387],{"class":677}," routePath",[521,1389,681],{"class":598},[521,1391,1302],{"class":527},[521,1393,1332],{"class":598},[521,1395,1396],{"class":677}," routeType",[521,1398,681],{"class":598},[521,1400,1302],{"class":527},[521,1402,1332],{"class":598},[521,1404,1405],{"class":677}," renderSource",[521,1407,681],{"class":598},[521,1409,1302],{"class":527},[521,1411,1365],{"class":598},[521,1413,1415,1418],{"class":523,"line":1414},12,[521,1416,1417],{"class":598},")",[521,1419,765],{"class":598},[521,1421,1423,1425,1427,1429,1431,1433,1435,1437,1439,1441,1443,1445,1447],{"class":523,"line":1422},13,[521,1424,1186],{"class":594},[521,1426,1189],{"class":677},[521,1428,1192],{"class":602},[521,1430,787],{"class":598},[521,1432,1197],{"class":602},[521,1434,787],{"class":598},[521,1436,1202],{"class":602},[521,1438,1205],{"class":598},[521,1440,612],{"class":598},[521,1442,1210],{"class":530},[521,1444,689],{"class":598},[521,1446,1215],{"class":677},[521,1448,671],{"class":598},[521,1450,1452,1454,1456,1458,1460,1462,1464,1466,1468,1470,1472,1474],{"class":523,"line":1451},14,[521,1453,1222],{"class":634},[521,1455,599],{"class":598},[521,1457,1279],{"class":602},[521,1459,606],{"class":598},[521,1461,662],{"class":598},[521,1463,1233],{"class":594},[521,1465,1135],{"class":598},[521,1467,668],{"class":677},[521,1469,689],{"class":598},[521,1471,1142],{"class":530},[521,1473,689],{"class":598},[521,1475,700],{"class":677},[521,1477,1479,1481,1483,1485,1488,1490,1493,1495,1498],{"class":523,"line":1478},15,[521,1480,1250],{"class":594},[521,1482,1279],{"class":665},[521,1484,668],{"class":677},[521,1486,1487],{"class":602},"error",[521,1489,643],{"class":598},[521,1491,1492],{"class":602}," request",[521,1494,643],{"class":598},[521,1496,1497],{"class":602}," context",[521,1499,700],{"class":677},[521,1501,1503],{"class":523,"line":1502},16,[521,1504,1259],{"class":598},[521,1506,1508],{"class":523,"line":1507},17,[521,1509,1264],{"class":598},[435,1511,1512,1513,1515,1516,1519],{},"Both styles are supported: the helper is optional sugar, not a takeover. ",[439,1514,1070],{}," only forwards Next’s two hooks to whatever you export from ",[439,1517,1518],{},"lib\u002Fevlog",". It does not prevent other work in your app.",[503,1521,1523],{"id":1522},"custom-behavior-evlog-your-code","Custom behavior (evlog + your code)",[460,1525,1526,1550],{},[463,1527,1528,1533,1534,1536,1537,1539,1540,1543,1544,1547,1548,787],{},[884,1529,1530,1531],{},"Root ",[439,1532,866],{},": Next’s stable surface here is ",[439,1535,1074],{}," and ",[439,1538,1078],{},". The evlog helper exports exactly those; it does not reserve the whole file. If you need ",[884,1541,1542],{},"additional"," top-level exports later (when Next documents them), use the ",[884,1545,1546],{},"manual"," wiring and compose by hand, or keep evlog’s hooks minimal and put everything else in ",[439,1549,586],{},[463,1551,1552,1557],{},[884,1553,1554,1556],{},[439,1555,586],{}," (recommended for composition)",": wrap evlog’s handlers so you stay free to add startup work, metrics, or extra logging without fighting the helper:",[511,1559,1561],{"className":584,"code":1560,"filename":586,"language":587,"meta":517,"style":517},"import { createInstrumentation } from 'evlog\u002Fnext\u002Finstrumentation'\n\nconst { register: evlogRegister, onRequestError: evlogOnRequestError } = createInstrumentation({\n  service: 'my-app',\n  drain: myDrain,\n})\n\nexport async function register() {\n  await evlogRegister()\n  \u002F\u002F e.g. OpenTelemetry, feature flags, custom one-off init\n}\n\nexport function onRequestError(\n  error: { digest?: string } & Error,\n  request: { path: string; method: string; headers: Record\u003Cstring, string> },\n  context: { routerKind: string; routePath: string; routeType: string; renderSource: string },\n) {\n  evlogOnRequestError(error, request, context)\n  \u002F\u002F optional: your own side effects (metrics, etc.)\n}\n",[439,1562,1563,1581,1585,1618,1632,1643,1649,1653,1667,1676,1682,1686,1690,1700,1722,1764,1804,1810,1830,1836],{"__ignoreMap":517},[521,1564,1565,1567,1569,1571,1573,1575,1577,1579],{"class":523,"line":524},[521,1566,595],{"class":594},[521,1568,599],{"class":598},[521,1570,935],{"class":602},[521,1572,606],{"class":598},[521,1574,609],{"class":594},[521,1576,612],{"class":598},[521,1578,944],{"class":530},[521,1580,618],{"class":598},[521,1582,1583],{"class":523,"line":621},[521,1584,625],{"emptyLinePlaceholder":624},[521,1586,1587,1590,1592,1594,1596,1599,1601,1603,1605,1608,1610,1612,1614,1616],{"class":523,"line":628},[521,1588,1589],{"class":634},"const",[521,1591,599],{"class":598},[521,1593,981],{"class":677},[521,1595,681],{"class":598},[521,1597,1598],{"class":602}," evlogRegister",[521,1600,643],{"class":598},[521,1602,1279],{"class":677},[521,1604,681],{"class":598},[521,1606,1607],{"class":602}," evlogOnRequestError ",[521,1609,659],{"class":598},[521,1611,662],{"class":598},[521,1613,935],{"class":665},[521,1615,668],{"class":602},[521,1617,671],{"class":598},[521,1619,1620,1622,1624,1626,1628,1630],{"class":523,"line":674},[521,1621,678],{"class":677},[521,1623,681],{"class":598},[521,1625,612],{"class":598},[521,1627,686],{"class":530},[521,1629,689],{"class":598},[521,1631,692],{"class":598},[521,1633,1634,1636,1638,1641],{"class":523,"line":695},[521,1635,1015],{"class":677},[521,1637,681],{"class":598},[521,1639,1640],{"class":602}," myDrain",[521,1642,692],{"class":598},[521,1644,1645,1647],{"class":523,"line":814},[521,1646,659],{"class":598},[521,1648,700],{"class":602},[521,1650,1651],{"class":523,"line":848},[521,1652,625],{"emptyLinePlaceholder":624},[521,1654,1655,1657,1659,1661,1663,1665],{"class":523,"line":1040},[521,1656,631],{"class":594},[521,1658,1172],{"class":634},[521,1660,1175],{"class":634},[521,1662,981],{"class":665},[521,1664,1022],{"class":598},[521,1666,765],{"class":598},[521,1668,1669,1672,1674],{"class":523,"line":1285},[521,1670,1671],{"class":594},"  await",[521,1673,1598],{"class":665},[521,1675,779],{"class":677},[521,1677,1678],{"class":523,"line":1315},[521,1679,1681],{"class":1680},"sHwdD","  \u002F\u002F e.g. OpenTelemetry, feature flags, custom one-off init\n",[521,1683,1684],{"class":523,"line":1368},[521,1685,1264],{"class":598},[521,1687,1688],{"class":523,"line":1414},[521,1689,625],{"emptyLinePlaceholder":624},[521,1691,1692,1694,1696,1698],{"class":523,"line":1422},[521,1693,631],{"class":594},[521,1695,1175],{"class":634},[521,1697,1279],{"class":665},[521,1699,1282],{"class":598},[521,1701,1702,1704,1706,1708,1710,1712,1714,1716,1718,1720],{"class":523,"line":1451},[521,1703,1289],{"class":1288},[521,1705,681],{"class":598},[521,1707,599],{"class":598},[521,1709,1296],{"class":677},[521,1711,1299],{"class":598},[521,1713,1302],{"class":527},[521,1715,606],{"class":598},[521,1717,1307],{"class":598},[521,1719,1310],{"class":527},[521,1721,692],{"class":598},[521,1723,1724,1726,1728,1730,1732,1734,1736,1738,1740,1742,1744,1746,1748,1750,1752,1754,1756,1758,1760,1762],{"class":523,"line":1478},[521,1725,1318],{"class":1288},[521,1727,681],{"class":598},[521,1729,599],{"class":598},[521,1731,1325],{"class":677},[521,1733,681],{"class":598},[521,1735,1302],{"class":527},[521,1737,1332],{"class":598},[521,1739,1335],{"class":677},[521,1741,681],{"class":598},[521,1743,1302],{"class":527},[521,1745,1332],{"class":598},[521,1747,1344],{"class":677},[521,1749,681],{"class":598},[521,1751,1349],{"class":527},[521,1753,1352],{"class":598},[521,1755,1355],{"class":527},[521,1757,643],{"class":598},[521,1759,1302],{"class":527},[521,1761,1362],{"class":598},[521,1763,1365],{"class":598},[521,1765,1766,1768,1770,1772,1774,1776,1778,1780,1782,1784,1786,1788,1790,1792,1794,1796,1798,1800,1802],{"class":523,"line":1502},[521,1767,1371],{"class":1288},[521,1769,681],{"class":598},[521,1771,599],{"class":598},[521,1773,1378],{"class":677},[521,1775,681],{"class":598},[521,1777,1302],{"class":527},[521,1779,1332],{"class":598},[521,1781,1387],{"class":677},[521,1783,681],{"class":598},[521,1785,1302],{"class":527},[521,1787,1332],{"class":598},[521,1789,1396],{"class":677},[521,1791,681],{"class":598},[521,1793,1302],{"class":527},[521,1795,1332],{"class":598},[521,1797,1405],{"class":677},[521,1799,681],{"class":598},[521,1801,1302],{"class":527},[521,1803,1365],{"class":598},[521,1805,1806,1808],{"class":523,"line":1507},[521,1807,1417],{"class":598},[521,1809,765],{"class":598},[521,1811,1813,1816,1818,1820,1822,1824,1826,1828],{"class":523,"line":1812},18,[521,1814,1815],{"class":665},"  evlogOnRequestError",[521,1817,668],{"class":677},[521,1819,1487],{"class":602},[521,1821,643],{"class":598},[521,1823,1492],{"class":602},[521,1825,643],{"class":598},[521,1827,1497],{"class":602},[521,1829,700],{"class":677},[521,1831,1833],{"class":523,"line":1832},19,[521,1834,1835],{"class":1680},"  \u002F\u002F optional: your own side effects (metrics, etc.)\n",[521,1837,1839],{"class":523,"line":1838},20,[521,1840,1264],{"class":598},[435,1842,1843,1844,1846,1847,1849,1850,1852,1853,1855],{},"Then keep ",[439,1845,866],{}," as a thin import (",[439,1848,1070],{}," or manual) that only loads ",[439,1851,1142],{}," on Node. Your customization lives next to ",[439,1854,441],{}," in one place.",[435,1857,1858],{},"Next.js automatically calls these exports:",[460,1860,1861,1877],{},[463,1862,1863,1865,1866,1869,1870,1536,1873,1876],{},[439,1864,900],{},": Runs once when the server starts. Initializes the evlog logger with your configured drain, sampling, and options. When ",[439,1867,1868],{},"captureOutput"," is enabled, ",[439,1871,1872],{},"stdout",[439,1874,1875],{},"stderr"," writes are captured as structured log events.",[463,1878,1879,1881,1882,1885,1886,1885,1889,1885,1892,1895],{},[439,1880,904],{},": Called on every unhandled request error. Emits a structured error log with the error message, digest, stack trace, request path\u002Fmethod, and routing context (",[439,1883,1884],{},"routerKind",", ",[439,1887,1888],{},"routePath",[439,1890,1891],{},"routeType",[439,1893,1894],{},"renderSource",").",[873,1897,1898,1900,1901,1903,1904,1536,1907,1910,1911,1075,1914,1917],{"color":875,"icon":13},[439,1899,1868],{}," only activates in the Node.js runtime (",[439,1902,1060],{},"). It patches ",[439,1905,1906],{},"process.stdout.write",[439,1908,1909],{},"process.stderr.write"," to emit structured ",[439,1912,1913],{},"log.info",[439,1915,1916],{},"log.error"," events alongside the original output.",[503,1919,170],{"id":1920},"configuration",[435,1922,1923,1924,1926,1927,1885,1930,1885,1933,1885,1935,1885,1938,1885,1941,1885,1944,1885,1947,1949],{},"The ",[439,1925,870],{}," factory accepts global logger options (",[439,1928,1929],{},"enabled",[439,1931,1932],{},"service",[439,1934,1197],{},[439,1936,1937],{},"pretty",[439,1939,1940],{},"silent",[439,1942,1943],{},"sampling",[439,1945,1946],{},"stringify",[439,1948,917],{},") plus:",[1951,1952,1953,1972],"table",{},[1954,1955,1956],"thead",{},[1957,1958,1959,1963,1966,1969],"tr",{},[1960,1961,1962],"th",{},"Option",[1960,1964,1965],{},"Type",[1960,1967,1968],{},"Default",[1960,1970,1971],{},"Description",[1973,1974,1975],"tbody",{},[1957,1976,1977,1982,1987,1992],{},[1978,1979,1980],"td",{},[439,1981,1868],{},[1978,1983,1984],{},[439,1985,1986],{},"boolean",[1978,1988,1989],{},[439,1990,1991],{},"false",[1978,1993,1994],{},"Capture stdout\u002Fstderr as structured log events",[499,1996,1998],{"id":1997},"production-configuration","Production Configuration",[435,2000,2001,2002,2004],{},"A real-world ",[439,2003,586],{}," with enrichers, batched drain, tail sampling, and route-based service names:",[511,2006,2008],{"className":584,"code":2007,"filename":586,"language":587,"meta":517,"style":517},"import type { DrainContext } from 'evlog'\nimport { createEvlog } from 'evlog\u002Fnext'\nimport { createUserAgentEnricher, createRequestSizeEnricher } from 'evlog\u002Fenrichers'\nimport { createAxiomDrain } from 'evlog\u002Faxiom'\nimport { createDrainPipeline } from 'evlog\u002Fpipeline'\n\n\u002F\u002F 1. Enrichers - add derived context to every event\nconst enrichers = [createUserAgentEnricher(), createRequestSizeEnricher()]\n\n\u002F\u002F 2. Pipeline - batch events before sending\nconst pipeline = createDrainPipeline\u003CDrainContext>({ batch: { size: 50, intervalMs: 5000 } })\n\n\u002F\u002F 3. Drain - send batched events to Axiom\nconst drain = pipeline(createAxiomDrain({\n  dataset: 'logs',\n  token: process.env.AXIOM_TOKEN!,\n}))\n\nexport const { withEvlog, useLogger, log, createError } = createEvlog({\n  service: 'my-app',\n\n  \u002F\u002F 4. Head sampling - keep 10% of info logs\n  sampling: {\n    rates: { info: 10 },\n    keep: [\n      { status: 400 },              \u002F\u002F Always keep errors\n      { duration: 1000 },           \u002F\u002F Always keep slow requests\n      { path: '\u002Fapi\u002Fcritical\u002F**' }, \u002F\u002F Always keep critical paths\n    ],\n  },\n\n  \u002F\u002F 5. Route-based service names\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  \u002F\u002F 6. Custom tail sampling - business logic\n  keep: (ctx) => {\n    const user = ctx.context.user as { premium?: boolean } | undefined\n    if (user?.premium) ctx.shouldKeep = true\n  },\n\n  \u002F\u002F 7. Enrich every event with user agent, request size, and deployment info\n  enrich: (ctx) => {\n    for (const enricher of enrichers) enricher(ctx)\n    ctx.event.deploymentId = process.env.VERCEL_DEPLOYMENT_ID\n    ctx.event.region = process.env.VERCEL_REGION\n  },\n\n  drain,\n})\n",[439,2009,2010,2033,2051,2076,2096,2116,2120,2125,2149,2153,2158,2212,2216,2221,2242,2258,2280,2286,2290,2322,2336,2341,2347,2357,2377,2388,2408,2426,2447,2455,2461,2466,2472,2482,2511,2538,2565,2570,2575,2581,2600,2644,2674,2679,2684,2690,2708,2738,2767,2794,2799,2804,2811],{"__ignoreMap":517},[521,2011,2012,2014,2017,2019,2022,2024,2026,2028,2031],{"class":523,"line":524},[521,2013,595],{"class":594},[521,2015,2016],{"class":594}," type",[521,2018,599],{"class":598},[521,2020,2021],{"class":602}," DrainContext",[521,2023,606],{"class":598},[521,2025,609],{"class":594},[521,2027,612],{"class":598},[521,2029,2030],{"class":530},"evlog",[521,2032,618],{"class":598},[521,2034,2035,2037,2039,2041,2043,2045,2047,2049],{"class":523,"line":621},[521,2036,595],{"class":594},[521,2038,599],{"class":598},[521,2040,603],{"class":602},[521,2042,606],{"class":598},[521,2044,609],{"class":594},[521,2046,612],{"class":598},[521,2048,615],{"class":530},[521,2050,618],{"class":598},[521,2052,2053,2055,2057,2060,2062,2065,2067,2069,2071,2074],{"class":523,"line":628},[521,2054,595],{"class":594},[521,2056,599],{"class":598},[521,2058,2059],{"class":602}," createUserAgentEnricher",[521,2061,643],{"class":598},[521,2063,2064],{"class":602}," createRequestSizeEnricher",[521,2066,606],{"class":598},[521,2068,609],{"class":594},[521,2070,612],{"class":598},[521,2072,2073],{"class":530},"evlog\u002Fenrichers",[521,2075,618],{"class":598},[521,2077,2078,2080,2082,2085,2087,2089,2091,2094],{"class":523,"line":674},[521,2079,595],{"class":594},[521,2081,599],{"class":598},[521,2083,2084],{"class":602}," createAxiomDrain",[521,2086,606],{"class":598},[521,2088,609],{"class":594},[521,2090,612],{"class":598},[521,2092,2093],{"class":530},"evlog\u002Faxiom",[521,2095,618],{"class":598},[521,2097,2098,2100,2102,2105,2107,2109,2111,2114],{"class":523,"line":695},[521,2099,595],{"class":594},[521,2101,599],{"class":598},[521,2103,2104],{"class":602}," createDrainPipeline",[521,2106,606],{"class":598},[521,2108,609],{"class":594},[521,2110,612],{"class":598},[521,2112,2113],{"class":530},"evlog\u002Fpipeline",[521,2115,618],{"class":598},[521,2117,2118],{"class":523,"line":814},[521,2119,625],{"emptyLinePlaceholder":624},[521,2121,2122],{"class":523,"line":848},[521,2123,2124],{"class":1680},"\u002F\u002F 1. Enrichers - add derived context to every event\n",[521,2126,2127,2129,2132,2134,2137,2140,2142,2144,2146],{"class":523,"line":1040},[521,2128,1589],{"class":634},[521,2130,2131],{"class":602}," enrichers ",[521,2133,749],{"class":598},[521,2135,2136],{"class":602}," [",[521,2138,2139],{"class":665},"createUserAgentEnricher",[521,2141,1022],{"class":602},[521,2143,643],{"class":598},[521,2145,2064],{"class":665},[521,2147,2148],{"class":602},"()]\n",[521,2150,2151],{"class":523,"line":1285},[521,2152,625],{"emptyLinePlaceholder":624},[521,2154,2155],{"class":523,"line":1315},[521,2156,2157],{"class":1680},"\u002F\u002F 2. Pipeline - batch events before sending\n",[521,2159,2160,2162,2165,2167,2169,2171,2174,2176,2178,2180,2183,2185,2187,2190,2192,2196,2198,2201,2203,2206,2208,2210],{"class":523,"line":1368},[521,2161,1589],{"class":634},[521,2163,2164],{"class":602}," pipeline ",[521,2166,749],{"class":598},[521,2168,2104],{"class":665},[521,2170,1352],{"class":598},[521,2172,2173],{"class":527},"DrainContext",[521,2175,1362],{"class":598},[521,2177,668],{"class":602},[521,2179,795],{"class":598},[521,2181,2182],{"class":677}," batch",[521,2184,681],{"class":598},[521,2186,599],{"class":598},[521,2188,2189],{"class":677}," size",[521,2191,681],{"class":598},[521,2193,2195],{"class":2194},"sbssI"," 50",[521,2197,643],{"class":598},[521,2199,2200],{"class":677}," intervalMs",[521,2202,681],{"class":598},[521,2204,2205],{"class":2194}," 5000",[521,2207,606],{"class":598},[521,2209,606],{"class":598},[521,2211,700],{"class":602},[521,2213,2214],{"class":523,"line":1414},[521,2215,625],{"emptyLinePlaceholder":624},[521,2217,2218],{"class":523,"line":1422},[521,2219,2220],{"class":1680},"\u002F\u002F 3. Drain - send batched events to Axiom\n",[521,2222,2223,2225,2228,2230,2233,2235,2238,2240],{"class":523,"line":1451},[521,2224,1589],{"class":634},[521,2226,2227],{"class":602}," drain ",[521,2229,749],{"class":598},[521,2231,2232],{"class":665}," pipeline",[521,2234,668],{"class":602},[521,2236,2237],{"class":665},"createAxiomDrain",[521,2239,668],{"class":602},[521,2241,671],{"class":598},[521,2243,2244,2247,2249,2251,2254,2256],{"class":523,"line":1478},[521,2245,2246],{"class":677},"  dataset",[521,2248,681],{"class":598},[521,2250,612],{"class":598},[521,2252,2253],{"class":530},"logs",[521,2255,689],{"class":598},[521,2257,692],{"class":598},[521,2259,2260,2263,2265,2268,2270,2272,2274,2277],{"class":523,"line":1502},[521,2261,2262],{"class":677},"  token",[521,2264,681],{"class":598},[521,2266,2267],{"class":602}," process",[521,2269,787],{"class":598},[521,2271,1197],{"class":602},[521,2273,787],{"class":598},[521,2275,2276],{"class":602},"AXIOM_TOKEN",[521,2278,2279],{"class":598},"!,\n",[521,2281,2282,2284],{"class":523,"line":1507},[521,2283,659],{"class":598},[521,2285,1147],{"class":602},[521,2287,2288],{"class":523,"line":1812},[521,2289,625],{"emptyLinePlaceholder":624},[521,2291,2292,2294,2296,2298,2300,2302,2304,2306,2308,2310,2312,2314,2316,2318,2320],{"class":523,"line":1832},[521,2293,631],{"class":594},[521,2295,635],{"class":634},[521,2297,599],{"class":598},[521,2299,640],{"class":602},[521,2301,643],{"class":598},[521,2303,646],{"class":602},[521,2305,643],{"class":598},[521,2307,651],{"class":602},[521,2309,643],{"class":598},[521,2311,656],{"class":602},[521,2313,659],{"class":598},[521,2315,662],{"class":598},[521,2317,603],{"class":665},[521,2319,668],{"class":602},[521,2321,671],{"class":598},[521,2323,2324,2326,2328,2330,2332,2334],{"class":523,"line":1838},[521,2325,678],{"class":677},[521,2327,681],{"class":598},[521,2329,612],{"class":598},[521,2331,686],{"class":530},[521,2333,689],{"class":598},[521,2335,692],{"class":598},[521,2337,2339],{"class":523,"line":2338},21,[521,2340,625],{"emptyLinePlaceholder":624},[521,2342,2344],{"class":523,"line":2343},22,[521,2345,2346],{"class":1680},"  \u002F\u002F 4. Head sampling - keep 10% of info logs\n",[521,2348,2350,2353,2355],{"class":523,"line":2349},23,[521,2351,2352],{"class":677},"  sampling",[521,2354,681],{"class":598},[521,2356,765],{"class":598},[521,2358,2360,2363,2365,2367,2370,2372,2375],{"class":523,"line":2359},24,[521,2361,2362],{"class":677},"    rates",[521,2364,681],{"class":598},[521,2366,599],{"class":598},[521,2368,2369],{"class":677}," info",[521,2371,681],{"class":598},[521,2373,2374],{"class":2194}," 10",[521,2376,1365],{"class":598},[521,2378,2380,2383,2385],{"class":523,"line":2379},25,[521,2381,2382],{"class":677},"    keep",[521,2384,681],{"class":598},[521,2386,2387],{"class":602}," [\n",[521,2389,2391,2394,2397,2399,2402,2405],{"class":523,"line":2390},26,[521,2392,2393],{"class":598},"      {",[521,2395,2396],{"class":677}," status",[521,2398,681],{"class":598},[521,2400,2401],{"class":2194}," 400",[521,2403,2404],{"class":598}," },",[521,2406,2407],{"class":1680},"              \u002F\u002F Always keep errors\n",[521,2409,2411,2413,2416,2418,2421,2423],{"class":523,"line":2410},27,[521,2412,2393],{"class":598},[521,2414,2415],{"class":677}," duration",[521,2417,681],{"class":598},[521,2419,2420],{"class":2194}," 1000",[521,2422,2404],{"class":598},[521,2424,2425],{"class":1680},"           \u002F\u002F Always keep slow requests\n",[521,2427,2429,2431,2433,2435,2437,2440,2442,2444],{"class":523,"line":2428},28,[521,2430,2393],{"class":598},[521,2432,1325],{"class":677},[521,2434,681],{"class":598},[521,2436,612],{"class":598},[521,2438,2439],{"class":530},"\u002Fapi\u002Fcritical\u002F**",[521,2441,689],{"class":598},[521,2443,2404],{"class":598},[521,2445,2446],{"class":1680}," \u002F\u002F Always keep critical paths\n",[521,2448,2450,2453],{"class":523,"line":2449},29,[521,2451,2452],{"class":602},"    ]",[521,2454,692],{"class":598},[521,2456,2458],{"class":523,"line":2457},30,[521,2459,2460],{"class":598},"  },\n",[521,2462,2464],{"class":523,"line":2463},31,[521,2465,625],{"emptyLinePlaceholder":624},[521,2467,2469],{"class":523,"line":2468},32,[521,2470,2471],{"class":1680},"  \u002F\u002F 5. Route-based service names\n",[521,2473,2475,2478,2480],{"class":523,"line":2474},33,[521,2476,2477],{"class":677},"  routes",[521,2479,681],{"class":598},[521,2481,765],{"class":598},[521,2483,2485,2488,2491,2493,2495,2497,2500,2502,2504,2507,2509],{"class":523,"line":2484},34,[521,2486,2487],{"class":598},"    '",[521,2489,2490],{"class":677},"\u002Fapi\u002Fauth\u002F**",[521,2492,689],{"class":598},[521,2494,681],{"class":598},[521,2496,599],{"class":598},[521,2498,2499],{"class":677}," service",[521,2501,681],{"class":598},[521,2503,612],{"class":598},[521,2505,2506],{"class":530},"auth-service",[521,2508,689],{"class":598},[521,2510,1365],{"class":598},[521,2512,2514,2516,2519,2521,2523,2525,2527,2529,2531,2534,2536],{"class":523,"line":2513},35,[521,2515,2487],{"class":598},[521,2517,2518],{"class":677},"\u002Fapi\u002Fpayment\u002F**",[521,2520,689],{"class":598},[521,2522,681],{"class":598},[521,2524,599],{"class":598},[521,2526,2499],{"class":677},[521,2528,681],{"class":598},[521,2530,612],{"class":598},[521,2532,2533],{"class":530},"payment-service",[521,2535,689],{"class":598},[521,2537,1365],{"class":598},[521,2539,2541,2543,2546,2548,2550,2552,2554,2556,2558,2561,2563],{"class":523,"line":2540},36,[521,2542,2487],{"class":598},[521,2544,2545],{"class":677},"\u002Fapi\u002Fbooking\u002F**",[521,2547,689],{"class":598},[521,2549,681],{"class":598},[521,2551,599],{"class":598},[521,2553,2499],{"class":677},[521,2555,681],{"class":598},[521,2557,612],{"class":598},[521,2559,2560],{"class":530},"booking-service",[521,2562,689],{"class":598},[521,2564,1365],{"class":598},[521,2566,2568],{"class":523,"line":2567},37,[521,2569,2460],{"class":598},[521,2571,2573],{"class":523,"line":2572},38,[521,2574,625],{"emptyLinePlaceholder":624},[521,2576,2578],{"class":523,"line":2577},39,[521,2579,2580],{"class":1680},"  \u002F\u002F 6. Custom tail sampling - business logic\n",[521,2582,2584,2587,2589,2591,2594,2596,2598],{"class":523,"line":2583},40,[521,2585,2586],{"class":665},"  keep",[521,2588,681],{"class":598},[521,2590,1189],{"class":598},[521,2592,2593],{"class":1288},"ctx",[521,2595,1417],{"class":598},[521,2597,762],{"class":634},[521,2599,765],{"class":598},[521,2601,2603,2605,2608,2610,2613,2615,2618,2620,2623,2626,2628,2631,2633,2636,2638,2641],{"class":523,"line":2602},41,[521,2604,1222],{"class":634},[521,2606,2607],{"class":602}," user",[521,2609,662],{"class":598},[521,2611,2612],{"class":602}," ctx",[521,2614,787],{"class":598},[521,2616,2617],{"class":602},"context",[521,2619,787],{"class":598},[521,2621,2622],{"class":602},"user",[521,2624,2625],{"class":594}," as",[521,2627,599],{"class":598},[521,2629,2630],{"class":677}," premium",[521,2632,1299],{"class":598},[521,2634,2635],{"class":527}," boolean",[521,2637,606],{"class":598},[521,2639,2640],{"class":598}," |",[521,2642,2643],{"class":527}," undefined\n",[521,2645,2647,2650,2652,2654,2657,2660,2662,2664,2666,2669,2671],{"class":523,"line":2646},42,[521,2648,2649],{"class":594},"    if",[521,2651,1189],{"class":677},[521,2653,2622],{"class":602},[521,2655,2656],{"class":598},"?.",[521,2658,2659],{"class":602},"premium",[521,2661,1215],{"class":677},[521,2663,2593],{"class":602},[521,2665,787],{"class":598},[521,2667,2668],{"class":602},"shouldKeep",[521,2670,662],{"class":598},[521,2672,2673],{"class":1034}," true\n",[521,2675,2677],{"class":523,"line":2676},43,[521,2678,2460],{"class":598},[521,2680,2682],{"class":523,"line":2681},44,[521,2683,625],{"emptyLinePlaceholder":624},[521,2685,2687],{"class":523,"line":2686},45,[521,2688,2689],{"class":1680},"  \u002F\u002F 7. Enrich every event with user agent, request size, and deployment info\n",[521,2691,2693,2696,2698,2700,2702,2704,2706],{"class":523,"line":2692},46,[521,2694,2695],{"class":665},"  enrich",[521,2697,681],{"class":598},[521,2699,1189],{"class":598},[521,2701,2593],{"class":1288},[521,2703,1417],{"class":598},[521,2705,762],{"class":634},[521,2707,765],{"class":598},[521,2709,2711,2714,2716,2718,2721,2724,2727,2729,2732,2734,2736],{"class":523,"line":2710},47,[521,2712,2713],{"class":594},"    for",[521,2715,1189],{"class":677},[521,2717,1589],{"class":634},[521,2719,2720],{"class":602}," enricher",[521,2722,2723],{"class":598}," of",[521,2725,2726],{"class":602}," enrichers",[521,2728,1215],{"class":677},[521,2730,2731],{"class":665},"enricher",[521,2733,668],{"class":677},[521,2735,2593],{"class":602},[521,2737,700],{"class":677},[521,2739,2741,2744,2746,2749,2751,2754,2756,2758,2760,2762,2764],{"class":523,"line":2740},48,[521,2742,2743],{"class":602},"    ctx",[521,2745,787],{"class":598},[521,2747,2748],{"class":602},"event",[521,2750,787],{"class":598},[521,2752,2753],{"class":602},"deploymentId",[521,2755,662],{"class":598},[521,2757,2267],{"class":602},[521,2759,787],{"class":598},[521,2761,1197],{"class":602},[521,2763,787],{"class":598},[521,2765,2766],{"class":602},"VERCEL_DEPLOYMENT_ID\n",[521,2768,2770,2772,2774,2776,2778,2781,2783,2785,2787,2789,2791],{"class":523,"line":2769},49,[521,2771,2743],{"class":602},[521,2773,787],{"class":598},[521,2775,2748],{"class":602},[521,2777,787],{"class":598},[521,2779,2780],{"class":602},"region",[521,2782,662],{"class":598},[521,2784,2267],{"class":602},[521,2786,787],{"class":598},[521,2788,1197],{"class":602},[521,2790,787],{"class":598},[521,2792,2793],{"class":602},"VERCEL_REGION\n",[521,2795,2797],{"class":523,"line":2796},50,[521,2798,2460],{"class":598},[521,2800,2802],{"class":523,"line":2801},51,[521,2803,625],{"emptyLinePlaceholder":624},[521,2805,2807,2809],{"class":523,"line":2806},52,[521,2808,1015],{"class":602},[521,2810,692],{"class":598},[521,2812,2814,2816],{"class":523,"line":2813},53,[521,2815,659],{"class":598},[521,2817,700],{"class":602},[499,2819,51],{"id":2820},"wide-events",[435,2822,2823],{},"Build up context progressively through your handler. One request = one wide event:",[511,2825,2828],{"className":584,"code":2826,"filename":2827,"language":587,"meta":517,"style":517},"import { withEvlog, useLogger } from '@\u002Flib\u002Fevlog'\n\nexport const POST = withEvlog(async (request: Request) => {\n  const log = useLogger()\n  const body = await request.json()\n\n  \u002F\u002F Stage 1: User context\n  log.set({\n    user: { id: body.userId, plan: 'enterprise' },\n  })\n\n  \u002F\u002F Stage 2: Cart context\n  log.set({\n    cart: { items: body.items.length, total: body.total, currency: 'USD' },\n  })\n\n  \u002F\u002F Stage 3: Payment context\n  const payment = await processPayment(body)\n  log.set({\n    payment: { method: payment.method, cardLast4: payment.last4 },\n  })\n\n  return Response.json({ success: true, orderId: payment.orderId })\n})\n","app\u002Fapi\u002Fcheckout\u002Froute.ts",[439,2829,2830,2852,2856,2889,2901,2920,2924,2929,2941,2978,2985,2989,2994,3006,3062,3068,3072,3077,3098,3110,3146,3152,3156,3195],{"__ignoreMap":517},[521,2831,2832,2834,2836,2838,2840,2842,2844,2846,2848,2850],{"class":523,"line":524},[521,2833,595],{"class":594},[521,2835,599],{"class":598},[521,2837,640],{"class":602},[521,2839,643],{"class":598},[521,2841,646],{"class":602},[521,2843,606],{"class":598},[521,2845,609],{"class":594},[521,2847,612],{"class":598},[521,2849,731],{"class":530},[521,2851,618],{"class":598},[521,2853,2854],{"class":523,"line":621},[521,2855,625],{"emptyLinePlaceholder":624},[521,2857,2858,2860,2862,2865,2867,2869,2871,2873,2875,2878,2880,2883,2885,2887],{"class":523,"line":628},[521,2859,631],{"class":594},[521,2861,635],{"class":634},[521,2863,2864],{"class":602}," POST ",[521,2866,749],{"class":598},[521,2868,640],{"class":665},[521,2870,668],{"class":602},[521,2872,756],{"class":634},[521,2874,1189],{"class":598},[521,2876,2877],{"class":1288},"request",[521,2879,681],{"class":598},[521,2881,2882],{"class":527}," Request",[521,2884,1417],{"class":598},[521,2886,762],{"class":634},[521,2888,765],{"class":598},[521,2890,2891,2893,2895,2897,2899],{"class":523,"line":674},[521,2892,770],{"class":634},[521,2894,651],{"class":602},[521,2896,662],{"class":598},[521,2898,646],{"class":665},[521,2900,779],{"class":677},[521,2902,2903,2905,2908,2910,2912,2914,2916,2918],{"class":523,"line":695},[521,2904,770],{"class":634},[521,2906,2907],{"class":602}," body",[521,2909,662],{"class":598},[521,2911,1233],{"class":594},[521,2913,1492],{"class":602},[521,2915,787],{"class":598},[521,2917,825],{"class":665},[521,2919,779],{"class":677},[521,2921,2922],{"class":523,"line":814},[521,2923,625],{"emptyLinePlaceholder":624},[521,2925,2926],{"class":523,"line":848},[521,2927,2928],{"class":1680},"  \u002F\u002F Stage 1: User context\n",[521,2930,2931,2933,2935,2937,2939],{"class":523,"line":1040},[521,2932,784],{"class":602},[521,2934,787],{"class":598},[521,2936,790],{"class":665},[521,2938,668],{"class":677},[521,2940,671],{"class":598},[521,2942,2943,2946,2948,2950,2953,2955,2957,2959,2962,2964,2967,2969,2971,2974,2976],{"class":523,"line":1285},[521,2944,2945],{"class":677},"    user",[521,2947,681],{"class":598},[521,2949,599],{"class":598},[521,2951,2952],{"class":677}," id",[521,2954,681],{"class":598},[521,2956,2907],{"class":602},[521,2958,787],{"class":598},[521,2960,2961],{"class":602},"userId",[521,2963,643],{"class":598},[521,2965,2966],{"class":677}," plan",[521,2968,681],{"class":598},[521,2970,612],{"class":598},[521,2972,2973],{"class":530},"enterprise",[521,2975,689],{"class":598},[521,2977,1365],{"class":598},[521,2979,2980,2983],{"class":523,"line":1315},[521,2981,2982],{"class":598},"  }",[521,2984,700],{"class":677},[521,2986,2987],{"class":523,"line":1368},[521,2988,625],{"emptyLinePlaceholder":624},[521,2990,2991],{"class":523,"line":1414},[521,2992,2993],{"class":1680},"  \u002F\u002F Stage 2: Cart context\n",[521,2995,2996,2998,3000,3002,3004],{"class":523,"line":1422},[521,2997,784],{"class":602},[521,2999,787],{"class":598},[521,3001,790],{"class":665},[521,3003,668],{"class":677},[521,3005,671],{"class":598},[521,3007,3008,3011,3013,3015,3018,3020,3022,3024,3027,3029,3032,3034,3037,3039,3041,3043,3046,3048,3051,3053,3055,3058,3060],{"class":523,"line":1451},[521,3009,3010],{"class":677},"    cart",[521,3012,681],{"class":598},[521,3014,599],{"class":598},[521,3016,3017],{"class":677}," items",[521,3019,681],{"class":598},[521,3021,2907],{"class":602},[521,3023,787],{"class":598},[521,3025,3026],{"class":602},"items",[521,3028,787],{"class":598},[521,3030,3031],{"class":602},"length",[521,3033,643],{"class":598},[521,3035,3036],{"class":677}," total",[521,3038,681],{"class":598},[521,3040,2907],{"class":602},[521,3042,787],{"class":598},[521,3044,3045],{"class":602},"total",[521,3047,643],{"class":598},[521,3049,3050],{"class":677}," currency",[521,3052,681],{"class":598},[521,3054,612],{"class":598},[521,3056,3057],{"class":530},"USD",[521,3059,689],{"class":598},[521,3061,1365],{"class":598},[521,3063,3064,3066],{"class":523,"line":1478},[521,3065,2982],{"class":598},[521,3067,700],{"class":677},[521,3069,3070],{"class":523,"line":1502},[521,3071,625],{"emptyLinePlaceholder":624},[521,3073,3074],{"class":523,"line":1507},[521,3075,3076],{"class":1680},"  \u002F\u002F Stage 3: Payment context\n",[521,3078,3079,3081,3084,3086,3088,3091,3093,3096],{"class":523,"line":1812},[521,3080,770],{"class":634},[521,3082,3083],{"class":602}," payment",[521,3085,662],{"class":598},[521,3087,1233],{"class":594},[521,3089,3090],{"class":665}," processPayment",[521,3092,668],{"class":677},[521,3094,3095],{"class":602},"body",[521,3097,700],{"class":677},[521,3099,3100,3102,3104,3106,3108],{"class":523,"line":1832},[521,3101,784],{"class":602},[521,3103,787],{"class":598},[521,3105,790],{"class":665},[521,3107,668],{"class":677},[521,3109,671],{"class":598},[521,3111,3112,3115,3117,3119,3121,3123,3125,3127,3130,3132,3135,3137,3139,3141,3144],{"class":523,"line":1838},[521,3113,3114],{"class":677},"    payment",[521,3116,681],{"class":598},[521,3118,599],{"class":598},[521,3120,1335],{"class":677},[521,3122,681],{"class":598},[521,3124,3083],{"class":602},[521,3126,787],{"class":598},[521,3128,3129],{"class":602},"method",[521,3131,643],{"class":598},[521,3133,3134],{"class":677}," cardLast4",[521,3136,681],{"class":598},[521,3138,3083],{"class":602},[521,3140,787],{"class":598},[521,3142,3143],{"class":602},"last4",[521,3145,1365],{"class":598},[521,3147,3148,3150],{"class":523,"line":2338},[521,3149,2982],{"class":598},[521,3151,700],{"class":677},[521,3153,3154],{"class":523,"line":2343},[521,3155,625],{"emptyLinePlaceholder":624},[521,3157,3158,3160,3162,3164,3166,3168,3170,3173,3175,3177,3179,3182,3184,3186,3188,3191,3193],{"class":523,"line":2349},[521,3159,817],{"class":594},[521,3161,820],{"class":602},[521,3163,787],{"class":598},[521,3165,825],{"class":665},[521,3167,668],{"class":677},[521,3169,795],{"class":598},[521,3171,3172],{"class":677}," success",[521,3174,681],{"class":598},[521,3176,1035],{"class":1034},[521,3178,643],{"class":598},[521,3180,3181],{"class":677}," orderId",[521,3183,681],{"class":598},[521,3185,3083],{"class":602},[521,3187,787],{"class":598},[521,3189,3190],{"class":602},"orderId",[521,3192,606],{"class":598},[521,3194,700],{"class":677},[521,3196,3197,3199],{"class":523,"line":2359},[521,3198,659],{"class":598},[521,3200,700],{"class":602},[435,3202,3203],{},"All fields are merged into a single wide event emitted when the handler completes:",[511,3205,3208],{"className":513,"code":3206,"filename":3207,"language":516,"meta":517,"style":517},"10:23:45.612 INFO [my-app] POST \u002Fapi\u002Fcheckout 200 in 145ms\n  ├─ user: id=usr_123 plan=enterprise\n  ├─ cart: items=3 total=14999 currency=USD\n  ├─ payment: method=card cardLast4=4242\n  └─ requestId: a1b2c3d4-...\n","Output (Pretty)",[439,3209,3210,3221,3235,3257,3273],{"__ignoreMap":517},[521,3211,3212,3215,3218],{"class":523,"line":524},[521,3213,3214],{"class":527},"10:23:45.612",[521,3216,3217],{"class":530}," INFO",[521,3219,3220],{"class":602}," [my-app] POST \u002Fapi\u002Fcheckout 200 in 145ms\n",[521,3222,3223,3226,3229,3232],{"class":523,"line":621},[521,3224,3225],{"class":527},"  ├─",[521,3227,3228],{"class":530}," user:",[521,3230,3231],{"class":530}," id=usr_123",[521,3233,3234],{"class":530}," plan=enterprise\n",[521,3236,3237,3239,3242,3245,3248,3251,3254],{"class":523,"line":628},[521,3238,3225],{"class":527},[521,3240,3241],{"class":530}," cart:",[521,3243,3244],{"class":530}," items=",[521,3246,3247],{"class":2194},"3",[521,3249,3250],{"class":530}," total=",[521,3252,3253],{"class":2194},"14999",[521,3255,3256],{"class":530}," currency=USD\n",[521,3258,3259,3261,3264,3267,3270],{"class":523,"line":674},[521,3260,3225],{"class":527},[521,3262,3263],{"class":530}," payment:",[521,3265,3266],{"class":530}," method=card",[521,3268,3269],{"class":530}," cardLast4=",[521,3271,3272],{"class":2194},"4242\n",[521,3274,3275,3278,3281],{"class":523,"line":695},[521,3276,3277],{"class":527},"  └─",[521,3279,3280],{"class":530}," requestId:",[521,3282,3283],{"class":530}," a1b2c3d4-...\n",[499,3285,3287,3288,1417],{"id":3286},"background-work-logfork","Background work (",[439,3289,3290],{},"log.fork",[435,3292,3293,3294,1885,3297,3299,3300,3305,3306,787],{},"Inside ",[439,3295,3296],{},"withEvlog",[439,3298,449],{}," returns a logger with ",[884,3301,3302],{},[439,3303,3304],{},"fork"," for child wide events. See ",[488,3307,3309],{"href":3308},"\u002Flogging\u002Fwide-events#after-emit-sealing-and-background-work","Wide events — After emit",[511,3311,3314],{"className":584,"code":3312,"filename":3313,"language":587,"meta":517,"style":517},"import { withEvlog, useLogger } from '@\u002Flib\u002Fevlog'\n\nexport const POST = withEvlog(async () => {\n  const log = useLogger()\n  log.fork!('enqueue', async () => {\n    const child = useLogger()\n    child.set({ job: 'queued' })\n  })\n  return Response.json({ ok: true })\n})\n","app\u002Fapi\u002Forders\u002Froute.ts",[439,3315,3316,3338,3342,3364,3376,3406,3419,3448,3454,3479],{"__ignoreMap":517},[521,3317,3318,3320,3322,3324,3326,3328,3330,3332,3334,3336],{"class":523,"line":524},[521,3319,595],{"class":594},[521,3321,599],{"class":598},[521,3323,640],{"class":602},[521,3325,643],{"class":598},[521,3327,646],{"class":602},[521,3329,606],{"class":598},[521,3331,609],{"class":594},[521,3333,612],{"class":598},[521,3335,731],{"class":530},[521,3337,618],{"class":598},[521,3339,3340],{"class":523,"line":621},[521,3341,625],{"emptyLinePlaceholder":624},[521,3343,3344,3346,3348,3350,3352,3354,3356,3358,3360,3362],{"class":523,"line":628},[521,3345,631],{"class":594},[521,3347,635],{"class":634},[521,3349,2864],{"class":602},[521,3351,749],{"class":598},[521,3353,640],{"class":665},[521,3355,668],{"class":602},[521,3357,756],{"class":634},[521,3359,759],{"class":598},[521,3361,762],{"class":634},[521,3363,765],{"class":598},[521,3365,3366,3368,3370,3372,3374],{"class":523,"line":674},[521,3367,770],{"class":634},[521,3369,651],{"class":602},[521,3371,662],{"class":598},[521,3373,646],{"class":665},[521,3375,779],{"class":677},[521,3377,3378,3380,3382,3384,3387,3389,3391,3394,3396,3398,3400,3402,3404],{"class":523,"line":695},[521,3379,784],{"class":602},[521,3381,787],{"class":598},[521,3383,3304],{"class":665},[521,3385,3386],{"class":598},"!",[521,3388,668],{"class":677},[521,3390,689],{"class":598},[521,3392,3393],{"class":530},"enqueue",[521,3395,689],{"class":598},[521,3397,643],{"class":598},[521,3399,1172],{"class":634},[521,3401,759],{"class":598},[521,3403,762],{"class":634},[521,3405,765],{"class":598},[521,3407,3408,3410,3413,3415,3417],{"class":523,"line":814},[521,3409,1222],{"class":634},[521,3411,3412],{"class":602}," child",[521,3414,662],{"class":598},[521,3416,646],{"class":665},[521,3418,779],{"class":677},[521,3420,3421,3424,3426,3428,3430,3432,3435,3437,3439,3442,3444,3446],{"class":523,"line":848},[521,3422,3423],{"class":602},"    child",[521,3425,787],{"class":598},[521,3427,790],{"class":665},[521,3429,668],{"class":677},[521,3431,795],{"class":598},[521,3433,3434],{"class":677}," job",[521,3436,681],{"class":598},[521,3438,612],{"class":598},[521,3440,3441],{"class":530},"queued",[521,3443,689],{"class":598},[521,3445,606],{"class":598},[521,3447,700],{"class":677},[521,3449,3450,3452],{"class":523,"line":1040},[521,3451,2982],{"class":598},[521,3453,700],{"class":677},[521,3455,3456,3458,3460,3462,3464,3466,3468,3471,3473,3475,3477],{"class":523,"line":1285},[521,3457,817],{"class":594},[521,3459,820],{"class":602},[521,3461,787],{"class":598},[521,3463,825],{"class":665},[521,3465,668],{"class":677},[521,3467,795],{"class":598},[521,3469,3470],{"class":677}," ok",[521,3472,681],{"class":598},[521,3474,1035],{"class":1034},[521,3476,606],{"class":598},[521,3478,700],{"class":677},[521,3480,3481,3483],{"class":523,"line":1315},[521,3482,659],{"class":598},[521,3484,700],{"class":602},[499,3486,3488],{"id":3487},"error-handling","Error Handling",[435,3490,3491,3492,3495,3496,1885,3499,3502,3503,3506],{},"Use ",[439,3493,3494],{},"createError"," for structured errors with ",[439,3497,3498],{},"why",[439,3500,3501],{},"fix",", and ",[439,3504,3505],{},"link"," fields that help developers debug in both logs and API responses:",[511,3508,3511],{"className":584,"code":3509,"filename":3510,"language":587,"meta":517,"style":517},"import { withEvlog, useLogger, createError } from '@\u002Flib\u002Fevlog'\n\nexport const POST = withEvlog(async (request: Request) => {\n  const log = useLogger()\n  const body = await request.json()\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  const result = await chargeCard(body)\n\n  if (!result.success) {\n    log.error(new Error(`Payment declined: ${result.reason}`))\n    throw createError({\n      status: 402,\n      message: 'Payment declined',\n      why: `Card declined by issuer: ${result.reason}`,\n      fix: 'Try a different payment method or contact your bank',\n    })\n  }\n\n  return Response.json({ success: true })\n})\n","app\u002Fapi\u002Fpayment\u002Fprocess\u002Froute.ts",[439,3512,3513,3540,3544,3574,3586,3604,3608,3644,3648,3670,3681,3692,3708,3724,3740,3756,3763,3767,3771,3791,3795,3815,3854,3864,3875,3890,3914,3929,3935,3939,3943,3967],{"__ignoreMap":517},[521,3514,3515,3517,3519,3521,3523,3525,3527,3530,3532,3534,3536,3538],{"class":523,"line":524},[521,3516,595],{"class":594},[521,3518,599],{"class":598},[521,3520,640],{"class":602},[521,3522,643],{"class":598},[521,3524,646],{"class":602},[521,3526,643],{"class":598},[521,3528,3529],{"class":602}," createError",[521,3531,606],{"class":598},[521,3533,609],{"class":594},[521,3535,612],{"class":598},[521,3537,731],{"class":530},[521,3539,618],{"class":598},[521,3541,3542],{"class":523,"line":621},[521,3543,625],{"emptyLinePlaceholder":624},[521,3545,3546,3548,3550,3552,3554,3556,3558,3560,3562,3564,3566,3568,3570,3572],{"class":523,"line":628},[521,3547,631],{"class":594},[521,3549,635],{"class":634},[521,3551,2864],{"class":602},[521,3553,749],{"class":598},[521,3555,640],{"class":665},[521,3557,668],{"class":602},[521,3559,756],{"class":634},[521,3561,1189],{"class":598},[521,3563,2877],{"class":1288},[521,3565,681],{"class":598},[521,3567,2882],{"class":527},[521,3569,1417],{"class":598},[521,3571,762],{"class":634},[521,3573,765],{"class":598},[521,3575,3576,3578,3580,3582,3584],{"class":523,"line":674},[521,3577,770],{"class":634},[521,3579,651],{"class":602},[521,3581,662],{"class":598},[521,3583,646],{"class":665},[521,3585,779],{"class":677},[521,3587,3588,3590,3592,3594,3596,3598,3600,3602],{"class":523,"line":695},[521,3589,770],{"class":634},[521,3591,2907],{"class":602},[521,3593,662],{"class":598},[521,3595,1233],{"class":594},[521,3597,1492],{"class":602},[521,3599,787],{"class":598},[521,3601,825],{"class":665},[521,3603,779],{"class":677},[521,3605,3606],{"class":523,"line":814},[521,3607,625],{"emptyLinePlaceholder":624},[521,3609,3610,3612,3614,3616,3618,3620,3622,3624,3626,3629,3631,3633,3635,3638,3640,3642],{"class":523,"line":848},[521,3611,784],{"class":602},[521,3613,787],{"class":598},[521,3615,790],{"class":665},[521,3617,668],{"class":677},[521,3619,795],{"class":598},[521,3621,3083],{"class":677},[521,3623,681],{"class":598},[521,3625,599],{"class":598},[521,3627,3628],{"class":677}," amount",[521,3630,681],{"class":598},[521,3632,2907],{"class":602},[521,3634,787],{"class":598},[521,3636,3637],{"class":602},"amount",[521,3639,606],{"class":598},[521,3641,606],{"class":598},[521,3643,700],{"class":677},[521,3645,3646],{"class":523,"line":1040},[521,3647,625],{"emptyLinePlaceholder":624},[521,3649,3650,3652,3654,3656,3658,3660,3663,3666,3668],{"class":523,"line":1285},[521,3651,1186],{"class":594},[521,3653,1189],{"class":677},[521,3655,3095],{"class":602},[521,3657,787],{"class":598},[521,3659,3637],{"class":602},[521,3661,3662],{"class":598}," \u003C=",[521,3664,3665],{"class":2194}," 0",[521,3667,1215],{"class":677},[521,3669,671],{"class":598},[521,3671,3672,3675,3677,3679],{"class":523,"line":1315},[521,3673,3674],{"class":594},"    throw",[521,3676,3529],{"class":665},[521,3678,668],{"class":677},[521,3680,671],{"class":598},[521,3682,3683,3686,3688,3690],{"class":523,"line":1368},[521,3684,3685],{"class":677},"      status",[521,3687,681],{"class":598},[521,3689,2401],{"class":2194},[521,3691,692],{"class":598},[521,3693,3694,3697,3699,3701,3704,3706],{"class":523,"line":1414},[521,3695,3696],{"class":677},"      message",[521,3698,681],{"class":598},[521,3700,612],{"class":598},[521,3702,3703],{"class":530},"Invalid payment amount",[521,3705,689],{"class":598},[521,3707,692],{"class":598},[521,3709,3710,3713,3715,3717,3720,3722],{"class":523,"line":1422},[521,3711,3712],{"class":677},"      why",[521,3714,681],{"class":598},[521,3716,612],{"class":598},[521,3718,3719],{"class":530},"The amount must be a positive number",[521,3721,689],{"class":598},[521,3723,692],{"class":598},[521,3725,3726,3729,3731,3733,3736,3738],{"class":523,"line":1451},[521,3727,3728],{"class":677},"      fix",[521,3730,681],{"class":598},[521,3732,612],{"class":598},[521,3734,3735],{"class":530},"Pass a positive integer in cents (e.g. 4999 for $49.99)",[521,3737,689],{"class":598},[521,3739,692],{"class":598},[521,3741,3742,3745,3747,3749,3752,3754],{"class":523,"line":1478},[521,3743,3744],{"class":677},"      link",[521,3746,681],{"class":598},[521,3748,612],{"class":598},[521,3750,3751],{"class":530},"https:\u002F\u002Fdocs.example.com\u002Fapi\u002Fpayments#amount",[521,3753,689],{"class":598},[521,3755,692],{"class":598},[521,3757,3758,3761],{"class":523,"line":1502},[521,3759,3760],{"class":598},"    }",[521,3762,700],{"class":677},[521,3764,3765],{"class":523,"line":1507},[521,3766,1259],{"class":598},[521,3768,3769],{"class":523,"line":1812},[521,3770,625],{"emptyLinePlaceholder":624},[521,3772,3773,3775,3778,3780,3782,3785,3787,3789],{"class":523,"line":1832},[521,3774,770],{"class":634},[521,3776,3777],{"class":602}," result",[521,3779,662],{"class":598},[521,3781,1233],{"class":594},[521,3783,3784],{"class":665}," chargeCard",[521,3786,668],{"class":677},[521,3788,3095],{"class":602},[521,3790,700],{"class":677},[521,3792,3793],{"class":523,"line":1838},[521,3794,625],{"emptyLinePlaceholder":624},[521,3796,3797,3799,3801,3803,3806,3808,3811,3813],{"class":523,"line":2338},[521,3798,1186],{"class":594},[521,3800,1189],{"class":677},[521,3802,3386],{"class":598},[521,3804,3805],{"class":602},"result",[521,3807,787],{"class":598},[521,3809,3810],{"class":602},"success",[521,3812,1215],{"class":677},[521,3814,671],{"class":598},[521,3816,3817,3820,3822,3824,3826,3829,3831,3833,3836,3839,3842,3844,3846,3849,3852],{"class":523,"line":2343},[521,3818,3819],{"class":602},"    log",[521,3821,787],{"class":598},[521,3823,1487],{"class":665},[521,3825,668],{"class":677},[521,3827,3828],{"class":598},"new",[521,3830,1310],{"class":665},[521,3832,668],{"class":677},[521,3834,3835],{"class":598},"`",[521,3837,3838],{"class":530},"Payment declined: ",[521,3840,3841],{"class":598},"${",[521,3843,3805],{"class":602},[521,3845,787],{"class":598},[521,3847,3848],{"class":602},"reason",[521,3850,3851],{"class":598},"}`",[521,3853,1147],{"class":677},[521,3855,3856,3858,3860,3862],{"class":523,"line":2349},[521,3857,3674],{"class":594},[521,3859,3529],{"class":665},[521,3861,668],{"class":677},[521,3863,671],{"class":598},[521,3865,3866,3868,3870,3873],{"class":523,"line":2359},[521,3867,3685],{"class":677},[521,3869,681],{"class":598},[521,3871,3872],{"class":2194}," 402",[521,3874,692],{"class":598},[521,3876,3877,3879,3881,3883,3886,3888],{"class":523,"line":2379},[521,3878,3696],{"class":677},[521,3880,681],{"class":598},[521,3882,612],{"class":598},[521,3884,3885],{"class":530},"Payment declined",[521,3887,689],{"class":598},[521,3889,692],{"class":598},[521,3891,3892,3894,3896,3899,3902,3904,3906,3908,3910,3912],{"class":523,"line":2390},[521,3893,3712],{"class":677},[521,3895,681],{"class":598},[521,3897,3898],{"class":598}," `",[521,3900,3901],{"class":530},"Card declined by issuer: ",[521,3903,3841],{"class":598},[521,3905,3805],{"class":602},[521,3907,787],{"class":598},[521,3909,3848],{"class":602},[521,3911,3851],{"class":598},[521,3913,692],{"class":598},[521,3915,3916,3918,3920,3922,3925,3927],{"class":523,"line":2410},[521,3917,3728],{"class":677},[521,3919,681],{"class":598},[521,3921,612],{"class":598},[521,3923,3924],{"class":530},"Try a different payment method or contact your bank",[521,3926,689],{"class":598},[521,3928,692],{"class":598},[521,3930,3931,3933],{"class":523,"line":2428},[521,3932,3760],{"class":598},[521,3934,700],{"class":677},[521,3936,3937],{"class":523,"line":2449},[521,3938,1259],{"class":598},[521,3940,3941],{"class":523,"line":2457},[521,3942,625],{"emptyLinePlaceholder":624},[521,3944,3945,3947,3949,3951,3953,3955,3957,3959,3961,3963,3965],{"class":523,"line":2463},[521,3946,817],{"class":594},[521,3948,820],{"class":602},[521,3950,787],{"class":598},[521,3952,825],{"class":665},[521,3954,668],{"class":677},[521,3956,795],{"class":598},[521,3958,3172],{"class":677},[521,3960,681],{"class":598},[521,3962,1035],{"class":1034},[521,3964,606],{"class":598},[521,3966,700],{"class":677},[521,3968,3969,3971],{"class":523,"line":2468},[521,3970,659],{"class":598},[521,3972,700],{"class":602},[435,3974,3975,3977,3978,3981],{},[439,3976,445],{}," catches ",[439,3979,3980],{},"EvlogError"," and returns a structured JSON response (like Nitro does for Nuxt):",[511,3983,3987],{"className":3984,"code":3985,"filename":3986,"language":825,"meta":517,"style":517},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"name\": \"EvlogError\",\n  \"message\": \"Payment declined\",\n  \"status\": 402,\n  \"data\": {\n    \"why\": \"Card declined by issuer: insufficient_funds\",\n    \"fix\": \"Try a different payment method or contact your bank\"\n  }\n}\n","Response (402)",[439,3988,3989,3993,4015,4034,4049,4062,4082,4099,4103],{"__ignoreMap":517},[521,3990,3991],{"class":523,"line":524},[521,3992,671],{"class":598},[521,3994,3995,3998,4001,4004,4006,4009,4011,4013],{"class":523,"line":621},[521,3996,3997],{"class":598},"  \"",[521,3999,4000],{"class":634},"name",[521,4002,4003],{"class":598},"\"",[521,4005,681],{"class":598},[521,4007,4008],{"class":598}," \"",[521,4010,3980],{"class":530},[521,4012,4003],{"class":598},[521,4014,692],{"class":598},[521,4016,4017,4019,4022,4024,4026,4028,4030,4032],{"class":523,"line":628},[521,4018,3997],{"class":598},[521,4020,4021],{"class":634},"message",[521,4023,4003],{"class":598},[521,4025,681],{"class":598},[521,4027,4008],{"class":598},[521,4029,3885],{"class":530},[521,4031,4003],{"class":598},[521,4033,692],{"class":598},[521,4035,4036,4038,4041,4043,4045,4047],{"class":523,"line":674},[521,4037,3997],{"class":598},[521,4039,4040],{"class":634},"status",[521,4042,4003],{"class":598},[521,4044,681],{"class":598},[521,4046,3872],{"class":2194},[521,4048,692],{"class":598},[521,4050,4051,4053,4056,4058,4060],{"class":523,"line":695},[521,4052,3997],{"class":598},[521,4054,4055],{"class":634},"data",[521,4057,4003],{"class":598},[521,4059,681],{"class":598},[521,4061,765],{"class":598},[521,4063,4064,4067,4069,4071,4073,4075,4078,4080],{"class":523,"line":814},[521,4065,4066],{"class":598},"    \"",[521,4068,3498],{"class":527},[521,4070,4003],{"class":598},[521,4072,681],{"class":598},[521,4074,4008],{"class":598},[521,4076,4077],{"class":530},"Card declined by issuer: insufficient_funds",[521,4079,4003],{"class":598},[521,4081,692],{"class":598},[521,4083,4084,4086,4088,4090,4092,4094,4096],{"class":523,"line":848},[521,4085,4066],{"class":598},[521,4087,3501],{"class":527},[521,4089,4003],{"class":598},[521,4091,681],{"class":598},[521,4093,4008],{"class":598},[521,4095,3924],{"class":530},[521,4097,4098],{"class":598},"\"\n",[521,4100,4101],{"class":523,"line":1040},[521,4102,1259],{"class":598},[521,4104,4105],{"class":523,"line":1285},[521,4106,1264],{"class":598},[435,4108,4109],{},"In the terminal, the error renders with colored output:",[511,4111,4114],{"className":513,"code":4112,"filename":4113,"language":516,"meta":517,"style":517},"Error: Payment declined\nWhy: Card declined by issuer: insufficient_funds\nFix: Try a different payment method or contact your bank\n","Terminal output",[439,4115,4116,4127,4147],{"__ignoreMap":517},[521,4117,4118,4121,4124],{"class":523,"line":524},[521,4119,4120],{"class":527},"Error:",[521,4122,4123],{"class":530}," Payment",[521,4125,4126],{"class":530}," declined\n",[521,4128,4129,4132,4135,4138,4141,4144],{"class":523,"line":621},[521,4130,4131],{"class":527},"Why:",[521,4133,4134],{"class":530}," Card",[521,4136,4137],{"class":530}," declined",[521,4139,4140],{"class":530}," by",[521,4142,4143],{"class":530}," issuer:",[521,4145,4146],{"class":530}," insufficient_funds\n",[521,4148,4149,4152,4155,4158,4161,4163,4165,4168,4171,4174],{"class":523,"line":628},[521,4150,4151],{"class":527},"Fix:",[521,4153,4154],{"class":530}," Try",[521,4156,4157],{"class":530}," a",[521,4159,4160],{"class":530}," different",[521,4162,3083],{"class":530},[521,4164,1335],{"class":530},[521,4166,4167],{"class":530}," or",[521,4169,4170],{"class":530}," contact",[521,4172,4173],{"class":530}," your",[521,4175,4176],{"class":530}," bank\n",[503,4178,4180],{"id":4179},"parsing-errors-on-the-client","Parsing Errors on the Client",[435,4182,3491,4183,4186,4187,4189,4190,4193],{},[439,4184,4185],{},"parseError"," to extract the structured fields from any error, whether it's a fetch response, an ",[439,4188,3980],{},", or a plain ",[439,4191,4192],{},"Error"," object:",[511,4195,4200],{"className":4196,"code":4197,"filename":4198,"language":4199,"meta":517,"style":517},"language-tsx shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","'use client'\nimport { parseError } from 'evlog'\n\nasync function handleSubmit(formData: FormData) {\n  try {\n    const res = await fetch('\u002Fapi\u002Fpayment\u002Fprocess', {\n      method: 'POST',\n      body: JSON.stringify({ amount: Number(formData.get('amount')) }),\n    })\n    if (!res.ok) throw { data: await res.json(), status: res.status }\n  } catch (error) {\n    const { message, status, why, fix, link } = parseError(error)\n    \u002F\u002F message: \"Payment declined\"\n    \u002F\u002F why: \"Card declined by issuer: insufficient_funds\"\n    \u002F\u002F fix: \"Try a different payment method or contact your bank\"\n  }\n}\n","app\u002Fcomponents\u002FPaymentForm.tsx","tsx",[439,4201,4202,4211,4230,4234,4257,4264,4291,4307,4358,4364,4417,4432,4471,4476,4481,4486,4490],{"__ignoreMap":517},[521,4203,4204,4206,4209],{"class":523,"line":524},[521,4205,689],{"class":598},[521,4207,4208],{"class":530},"use client",[521,4210,618],{"class":598},[521,4212,4213,4215,4217,4220,4222,4224,4226,4228],{"class":523,"line":621},[521,4214,595],{"class":594},[521,4216,599],{"class":598},[521,4218,4219],{"class":602}," parseError",[521,4221,606],{"class":598},[521,4223,609],{"class":594},[521,4225,612],{"class":598},[521,4227,2030],{"class":530},[521,4229,618],{"class":598},[521,4231,4232],{"class":523,"line":628},[521,4233,625],{"emptyLinePlaceholder":624},[521,4235,4236,4238,4240,4243,4245,4248,4250,4253,4255],{"class":523,"line":674},[521,4237,756],{"class":634},[521,4239,1175],{"class":634},[521,4241,4242],{"class":665}," handleSubmit",[521,4244,668],{"class":598},[521,4246,4247],{"class":1288},"formData",[521,4249,681],{"class":598},[521,4251,4252],{"class":527}," FormData",[521,4254,1417],{"class":598},[521,4256,765],{"class":598},[521,4258,4259,4262],{"class":523,"line":695},[521,4260,4261],{"class":594},"  try",[521,4263,765],{"class":598},[521,4265,4266,4268,4271,4273,4275,4278,4280,4282,4285,4287,4289],{"class":523,"line":814},[521,4267,1222],{"class":634},[521,4269,4270],{"class":602}," res",[521,4272,662],{"class":598},[521,4274,1233],{"class":594},[521,4276,4277],{"class":665}," fetch",[521,4279,668],{"class":677},[521,4281,689],{"class":598},[521,4283,4284],{"class":530},"\u002Fapi\u002Fpayment\u002Fprocess",[521,4286,689],{"class":598},[521,4288,643],{"class":598},[521,4290,765],{"class":598},[521,4292,4293,4296,4298,4300,4303,4305],{"class":523,"line":848},[521,4294,4295],{"class":677},"      method",[521,4297,681],{"class":598},[521,4299,612],{"class":598},[521,4301,4302],{"class":530},"POST",[521,4304,689],{"class":598},[521,4306,692],{"class":598},[521,4308,4309,4312,4314,4317,4319,4321,4323,4325,4327,4329,4332,4334,4336,4338,4341,4343,4345,4347,4349,4352,4354,4356],{"class":523,"line":1040},[521,4310,4311],{"class":677},"      body",[521,4313,681],{"class":598},[521,4315,4316],{"class":602}," JSON",[521,4318,787],{"class":598},[521,4320,1946],{"class":665},[521,4322,668],{"class":677},[521,4324,795],{"class":598},[521,4326,3628],{"class":677},[521,4328,681],{"class":598},[521,4330,4331],{"class":665}," Number",[521,4333,668],{"class":677},[521,4335,4247],{"class":602},[521,4337,787],{"class":598},[521,4339,4340],{"class":665},"get",[521,4342,668],{"class":677},[521,4344,689],{"class":598},[521,4346,3637],{"class":530},[521,4348,689],{"class":598},[521,4350,4351],{"class":677},")) ",[521,4353,659],{"class":598},[521,4355,1417],{"class":677},[521,4357,692],{"class":598},[521,4359,4360,4362],{"class":523,"line":1285},[521,4361,3760],{"class":598},[521,4363,700],{"class":677},[521,4365,4366,4368,4370,4372,4375,4377,4380,4382,4385,4387,4390,4392,4394,4396,4398,4400,4402,4404,4406,4408,4410,4412,4414],{"class":523,"line":1315},[521,4367,2649],{"class":594},[521,4369,1189],{"class":677},[521,4371,3386],{"class":598},[521,4373,4374],{"class":602},"res",[521,4376,787],{"class":598},[521,4378,4379],{"class":602},"ok",[521,4381,1215],{"class":677},[521,4383,4384],{"class":594},"throw",[521,4386,599],{"class":598},[521,4388,4389],{"class":677}," data",[521,4391,681],{"class":598},[521,4393,1233],{"class":594},[521,4395,4270],{"class":602},[521,4397,787],{"class":598},[521,4399,825],{"class":665},[521,4401,1022],{"class":677},[521,4403,643],{"class":598},[521,4405,2396],{"class":677},[521,4407,681],{"class":598},[521,4409,4270],{"class":602},[521,4411,787],{"class":598},[521,4413,4040],{"class":602},[521,4415,4416],{"class":598}," }\n",[521,4418,4419,4421,4424,4426,4428,4430],{"class":523,"line":1368},[521,4420,2982],{"class":598},[521,4422,4423],{"class":594}," catch",[521,4425,1189],{"class":677},[521,4427,1487],{"class":602},[521,4429,1215],{"class":677},[521,4431,671],{"class":598},[521,4433,4434,4436,4438,4440,4442,4444,4446,4449,4451,4454,4456,4459,4461,4463,4465,4467,4469],{"class":523,"line":1414},[521,4435,1222],{"class":634},[521,4437,599],{"class":598},[521,4439,832],{"class":602},[521,4441,643],{"class":598},[521,4443,2396],{"class":602},[521,4445,643],{"class":598},[521,4447,4448],{"class":602}," why",[521,4450,643],{"class":598},[521,4452,4453],{"class":602}," fix",[521,4455,643],{"class":598},[521,4457,4458],{"class":602}," link",[521,4460,606],{"class":598},[521,4462,662],{"class":598},[521,4464,4219],{"class":665},[521,4466,668],{"class":677},[521,4468,1487],{"class":602},[521,4470,700],{"class":677},[521,4472,4473],{"class":523,"line":1422},[521,4474,4475],{"class":1680},"    \u002F\u002F message: \"Payment declined\"\n",[521,4477,4478],{"class":523,"line":1451},[521,4479,4480],{"class":1680},"    \u002F\u002F why: \"Card declined by issuer: insufficient_funds\"\n",[521,4482,4483],{"class":523,"line":1478},[521,4484,4485],{"class":1680},"    \u002F\u002F fix: \"Try a different payment method or contact your bank\"\n",[521,4487,4488],{"class":523,"line":1502},[521,4489,1259],{"class":598},[521,4491,4492],{"class":523,"line":1507},[521,4493,1264],{"class":598},[435,4495,4496,4498,4499,4502,4503,4506],{},[439,4497,4185],{}," normalizes any error shape into a flat ",[439,4500,4501],{},"{ message, status, why?, fix?, link? }"," object, so your UI code never has to dig through nested ",[439,4504,4505],{},"data.data"," or check for different error formats.",[499,4508,170],{"id":4509},"configuration-1",[873,4511,4512,4513,4516,4517,1885,4519,1885,4521,1885,4523,4525],{"color":875,"icon":64},"See the ",[488,4514,4515],{"href":171},"Configuration reference"," for the full list of shared options (",[439,4518,1929],{},[439,4520,1937],{},[439,4522,1940],{},[439,4524,1943],{},", middleware options, etc.).",[435,4527,1923,4528,4530],{},[439,4529,441],{}," factory accepts the following options:",[1951,4532,4533,4545],{},[1954,4534,4535],{},[1957,4536,4537,4539,4541,4543],{},[1960,4538,1962],{},[1960,4540,1965],{},[1960,4542,1968],{},[1960,4544,1971],{},[1973,4546,4547,4565,4582,4602,4620,4639,4658,4677,4696,4714],{},[1957,4548,4549,4553,4557,4562],{},[1978,4550,4551],{},[439,4552,1932],{},[1978,4554,4555],{},[439,4556,1355],{},[1978,4558,4559],{},[439,4560,4561],{},"'app'",[1978,4563,4564],{},"Service name shown in logs",[1957,4566,4567,4572,4576,4579],{},[1978,4568,4569],{},[439,4570,4571],{},"environment",[1978,4573,4574],{},[439,4575,1355],{},[1978,4577,4578],{},"Auto-detected",[1978,4580,4581],{},"Environment name",[1957,4583,4584,4589,4594,4599],{},[1978,4585,4586],{},[439,4587,4588],{},"include",[1978,4590,4591],{},[439,4592,4593],{},"string[]",[1978,4595,4596],{},[439,4597,4598],{},"undefined",[1978,4600,4601],{},"Route patterns to log",[1957,4603,4604,4609,4613,4617],{},[1978,4605,4606],{},[439,4607,4608],{},"exclude",[1978,4610,4611],{},[439,4612,4593],{},[1978,4614,4615],{},[439,4616,4598],{},[1978,4618,4619],{},"Route patterns to exclude",[1957,4621,4622,4627,4632,4636],{},[1978,4623,4624],{},[439,4625,4626],{},"routes",[1978,4628,4629],{},[439,4630,4631],{},"Record\u003Cstring, RouteConfig>",[1978,4633,4634],{},[439,4635,4598],{},[1978,4637,4638],{},"Route-specific service configuration",[1957,4640,4641,4646,4651,4655],{},[1978,4642,4643],{},[439,4644,4645],{},"sampling.rates",[1978,4647,4648],{},[439,4649,4650],{},"object",[1978,4652,4653],{},[439,4654,4598],{},[1978,4656,4657],{},"Head sampling rates per log level",[1957,4659,4660,4665,4670,4674],{},[1978,4661,4662],{},[439,4663,4664],{},"sampling.keep",[1978,4666,4667],{},[439,4668,4669],{},"array",[1978,4671,4672],{},[439,4673,4598],{},[1978,4675,4676],{},"Tail sampling conditions",[1957,4678,4679,4684,4689,4693],{},[1978,4680,4681],{},[439,4682,4683],{},"keep",[1978,4685,4686],{},[439,4687,4688],{},"(ctx: TailSamplingContext) => void",[1978,4690,4691],{},[439,4692,4598],{},[1978,4694,4695],{},"Custom tail sampling callback",[1957,4697,4698,4702,4707,4711],{},[1978,4699,4700],{},[439,4701,917],{},[1978,4703,4704],{},[439,4705,4706],{},"DrainFunction",[1978,4708,4709],{},[439,4710,4598],{},[1978,4712,4713],{},"Drain adapter for external services",[1957,4715,4716,4721,4726,4730],{},[1978,4717,4718],{},[439,4719,4720],{},"enrich",[1978,4722,4723],{},[439,4724,4725],{},"(ctx: EnrichContext) => void",[1978,4727,4728],{},[439,4729,4598],{},[1978,4731,4732],{},"Event enrichment callback",[499,4734,4736],{"id":4735},"tail-sampling","Tail Sampling",[435,4738,4739],{},"Combine rule-based and custom tail sampling to always capture what matters, even when head sampling drops most logs:",[511,4741,4743],{"className":584,"code":4742,"filename":586,"language":587,"meta":517,"style":517},"export const { withEvlog, useLogger } = createEvlog({\n  service: 'my-app',\n  sampling: {\n    rates: { info: 10 }, \u002F\u002F Only keep 10% of info logs\n    keep: [\n      { status: 400 },              \u002F\u002F Always keep 4xx\u002F5xx\n      { duration: 1000 },           \u002F\u002F Always keep slow requests\n      { path: '\u002Fapi\u002Fcritical\u002F**' }, \u002F\u002F Always keep critical paths\n    ],\n  },\n  \u002F\u002F Custom: always keep premium user requests\n  keep: (ctx) => {\n    const user = ctx.context.user as { premium?: boolean } | undefined\n    if (user?.premium) ctx.shouldKeep = true\n  },\n})\n",[439,4744,4745,4770,4784,4792,4811,4819,4834,4848,4866,4872,4876,4881,4897,4931,4955,4959],{"__ignoreMap":517},[521,4746,4747,4749,4751,4753,4755,4757,4760,4762,4764,4766,4768],{"class":523,"line":524},[521,4748,631],{"class":594},[521,4750,635],{"class":634},[521,4752,599],{"class":598},[521,4754,640],{"class":602},[521,4756,643],{"class":598},[521,4758,4759],{"class":602}," useLogger ",[521,4761,659],{"class":598},[521,4763,662],{"class":598},[521,4765,603],{"class":665},[521,4767,668],{"class":602},[521,4769,671],{"class":598},[521,4771,4772,4774,4776,4778,4780,4782],{"class":523,"line":621},[521,4773,678],{"class":677},[521,4775,681],{"class":598},[521,4777,612],{"class":598},[521,4779,686],{"class":530},[521,4781,689],{"class":598},[521,4783,692],{"class":598},[521,4785,4786,4788,4790],{"class":523,"line":628},[521,4787,2352],{"class":677},[521,4789,681],{"class":598},[521,4791,765],{"class":598},[521,4793,4794,4796,4798,4800,4802,4804,4806,4808],{"class":523,"line":674},[521,4795,2362],{"class":677},[521,4797,681],{"class":598},[521,4799,599],{"class":598},[521,4801,2369],{"class":677},[521,4803,681],{"class":598},[521,4805,2374],{"class":2194},[521,4807,2404],{"class":598},[521,4809,4810],{"class":1680}," \u002F\u002F Only keep 10% of info logs\n",[521,4812,4813,4815,4817],{"class":523,"line":695},[521,4814,2382],{"class":677},[521,4816,681],{"class":598},[521,4818,2387],{"class":602},[521,4820,4821,4823,4825,4827,4829,4831],{"class":523,"line":814},[521,4822,2393],{"class":598},[521,4824,2396],{"class":677},[521,4826,681],{"class":598},[521,4828,2401],{"class":2194},[521,4830,2404],{"class":598},[521,4832,4833],{"class":1680},"              \u002F\u002F Always keep 4xx\u002F5xx\n",[521,4835,4836,4838,4840,4842,4844,4846],{"class":523,"line":848},[521,4837,2393],{"class":598},[521,4839,2415],{"class":677},[521,4841,681],{"class":598},[521,4843,2420],{"class":2194},[521,4845,2404],{"class":598},[521,4847,2425],{"class":1680},[521,4849,4850,4852,4854,4856,4858,4860,4862,4864],{"class":523,"line":1040},[521,4851,2393],{"class":598},[521,4853,1325],{"class":677},[521,4855,681],{"class":598},[521,4857,612],{"class":598},[521,4859,2439],{"class":530},[521,4861,689],{"class":598},[521,4863,2404],{"class":598},[521,4865,2446],{"class":1680},[521,4867,4868,4870],{"class":523,"line":1285},[521,4869,2452],{"class":602},[521,4871,692],{"class":598},[521,4873,4874],{"class":523,"line":1315},[521,4875,2460],{"class":598},[521,4877,4878],{"class":523,"line":1368},[521,4879,4880],{"class":1680},"  \u002F\u002F Custom: always keep premium user requests\n",[521,4882,4883,4885,4887,4889,4891,4893,4895],{"class":523,"line":1414},[521,4884,2586],{"class":665},[521,4886,681],{"class":598},[521,4888,1189],{"class":598},[521,4890,2593],{"class":1288},[521,4892,1417],{"class":598},[521,4894,762],{"class":634},[521,4896,765],{"class":598},[521,4898,4899,4901,4903,4905,4907,4909,4911,4913,4915,4917,4919,4921,4923,4925,4927,4929],{"class":523,"line":1422},[521,4900,1222],{"class":634},[521,4902,2607],{"class":602},[521,4904,662],{"class":598},[521,4906,2612],{"class":602},[521,4908,787],{"class":598},[521,4910,2617],{"class":602},[521,4912,787],{"class":598},[521,4914,2622],{"class":602},[521,4916,2625],{"class":594},[521,4918,599],{"class":598},[521,4920,2630],{"class":677},[521,4922,1299],{"class":598},[521,4924,2635],{"class":527},[521,4926,606],{"class":598},[521,4928,2640],{"class":598},[521,4930,2643],{"class":527},[521,4932,4933,4935,4937,4939,4941,4943,4945,4947,4949,4951,4953],{"class":523,"line":1451},[521,4934,2649],{"class":594},[521,4936,1189],{"class":677},[521,4938,2622],{"class":602},[521,4940,2656],{"class":598},[521,4942,2659],{"class":602},[521,4944,1215],{"class":677},[521,4946,2593],{"class":602},[521,4948,787],{"class":598},[521,4950,2668],{"class":602},[521,4952,662],{"class":598},[521,4954,2673],{"class":1034},[521,4956,4957],{"class":523,"line":1478},[521,4958,2460],{"class":598},[521,4960,4961,4963],{"class":523,"line":1502},[521,4962,659],{"class":598},[521,4964,700],{"class":602},[435,4966,1923,4967,4969],{},[439,4968,4683],{}," rules use OR logic: any match forces the event through regardless of head sampling.",[499,4971,114],{"id":4972},"middleware",[435,4974,4975,4976,1536,4979,4982,4983,4985],{},"Set ",[439,4977,4978],{},"x-request-id",[439,4980,4981],{},"x-evlog-start"," headers so ",[439,4984,445],{}," can correlate timing across the middleware -> handler chain:",[511,4987,4990],{"className":584,"code":4988,"filename":4989,"language":587,"meta":517,"style":517},"import { evlogMiddleware } from 'evlog\u002Fnext'\n\nexport const proxy = evlogMiddleware()\n\nexport const config = {\n  matcher: ['\u002Fapi\u002F:path*'],\n}\n","proxy.ts",[439,4991,4992,5011,5015,5030,5034,5047,5068],{"__ignoreMap":517},[521,4993,4994,4996,4998,5001,5003,5005,5007,5009],{"class":523,"line":524},[521,4995,595],{"class":594},[521,4997,599],{"class":598},[521,4999,5000],{"class":602}," evlogMiddleware",[521,5002,606],{"class":598},[521,5004,609],{"class":594},[521,5006,612],{"class":598},[521,5008,615],{"class":530},[521,5010,618],{"class":598},[521,5012,5013],{"class":523,"line":621},[521,5014,625],{"emptyLinePlaceholder":624},[521,5016,5017,5019,5021,5024,5026,5028],{"class":523,"line":628},[521,5018,631],{"class":594},[521,5020,635],{"class":634},[521,5022,5023],{"class":602}," proxy ",[521,5025,749],{"class":598},[521,5027,5000],{"class":665},[521,5029,779],{"class":602},[521,5031,5032],{"class":523,"line":674},[521,5033,625],{"emptyLinePlaceholder":624},[521,5035,5036,5038,5040,5043,5045],{"class":523,"line":695},[521,5037,631],{"class":594},[521,5039,635],{"class":634},[521,5041,5042],{"class":602}," config ",[521,5044,749],{"class":598},[521,5046,765],{"class":598},[521,5048,5049,5052,5054,5056,5058,5061,5063,5066],{"class":523,"line":814},[521,5050,5051],{"class":677},"  matcher",[521,5053,681],{"class":598},[521,5055,2136],{"class":602},[521,5057,689],{"class":598},[521,5059,5060],{"class":530},"\u002Fapi\u002F:path*",[521,5062,689],{"class":598},[521,5064,5065],{"class":602},"]",[521,5067,692],{"class":598},[521,5069,5070],{"class":523,"line":848},[521,5071,1264],{"class":598},[873,5073,5074,5075,5078,5079,5081,5082,5084],{"color":875,"icon":13},"Older versions of Next.js use ",[439,5076,5077],{},"middleware.ts"," instead of ",[439,5080,4989],{},". The evlog middleware works with both, so just import from ",[439,5083,615],{}," regardless.",[499,5086,5088],{"id":5087},"server-actions","Server Actions",[435,5090,5091,5093],{},[439,5092,445],{}," also works with Server Actions. Wrap your action to get full request-scoped logging:",[511,5095,5098],{"className":584,"code":5096,"filename":5097,"language":587,"meta":517,"style":517},"'use server'\nimport { withEvlog, useLogger } from '@\u002Flib\u002Fevlog'\n\nexport const checkout = withEvlog(async (formData: FormData) => {\n  const log = useLogger()\n  log.set({ action: 'checkout', cartId: formData.get('cartId') })\n  \u002F\u002F ...\n})\n","app\u002Factions\u002Fcheckout.ts",[439,5099,5100,5109,5131,5135,5166,5178,5230,5235],{"__ignoreMap":517},[521,5101,5102,5104,5107],{"class":523,"line":524},[521,5103,689],{"class":598},[521,5105,5106],{"class":530},"use server",[521,5108,618],{"class":598},[521,5110,5111,5113,5115,5117,5119,5121,5123,5125,5127,5129],{"class":523,"line":621},[521,5112,595],{"class":594},[521,5114,599],{"class":598},[521,5116,640],{"class":602},[521,5118,643],{"class":598},[521,5120,646],{"class":602},[521,5122,606],{"class":598},[521,5124,609],{"class":594},[521,5126,612],{"class":598},[521,5128,731],{"class":530},[521,5130,618],{"class":598},[521,5132,5133],{"class":523,"line":628},[521,5134,625],{"emptyLinePlaceholder":624},[521,5136,5137,5139,5141,5144,5146,5148,5150,5152,5154,5156,5158,5160,5162,5164],{"class":523,"line":674},[521,5138,631],{"class":594},[521,5140,635],{"class":634},[521,5142,5143],{"class":602}," checkout ",[521,5145,749],{"class":598},[521,5147,640],{"class":665},[521,5149,668],{"class":602},[521,5151,756],{"class":634},[521,5153,1189],{"class":598},[521,5155,4247],{"class":1288},[521,5157,681],{"class":598},[521,5159,4252],{"class":527},[521,5161,1417],{"class":598},[521,5163,762],{"class":634},[521,5165,765],{"class":598},[521,5167,5168,5170,5172,5174,5176],{"class":523,"line":695},[521,5169,770],{"class":634},[521,5171,651],{"class":602},[521,5173,662],{"class":598},[521,5175,646],{"class":665},[521,5177,779],{"class":677},[521,5179,5180,5182,5184,5186,5188,5190,5192,5194,5196,5199,5201,5203,5206,5208,5211,5213,5215,5217,5219,5222,5224,5226,5228],{"class":523,"line":814},[521,5181,784],{"class":602},[521,5183,787],{"class":598},[521,5185,790],{"class":665},[521,5187,668],{"class":677},[521,5189,795],{"class":598},[521,5191,798],{"class":677},[521,5193,681],{"class":598},[521,5195,612],{"class":598},[521,5197,5198],{"class":530},"checkout",[521,5200,689],{"class":598},[521,5202,643],{"class":598},[521,5204,5205],{"class":677}," cartId",[521,5207,681],{"class":598},[521,5209,5210],{"class":602}," formData",[521,5212,787],{"class":598},[521,5214,4340],{"class":665},[521,5216,668],{"class":677},[521,5218,689],{"class":598},[521,5220,5221],{"class":530},"cartId",[521,5223,689],{"class":598},[521,5225,1215],{"class":677},[521,5227,659],{"class":598},[521,5229,700],{"class":677},[521,5231,5232],{"class":523,"line":848},[521,5233,5234],{"class":1680},"  \u002F\u002F ...\n",[521,5236,5237,5239],{"class":523,"line":1040},[521,5238,659],{"class":598},[521,5240,700],{"class":602},[499,5242,5244],{"id":5243},"client-provider","Client Provider",[435,5246,5247,5248,5251],{},"Wrap your root layout with ",[439,5249,5250],{},"EvlogProvider"," to enable client-side logging and transport:",[511,5253,5256],{"className":4196,"code":5254,"filename":5255,"language":4199,"meta":517,"style":517},"import { EvlogProvider } from 'evlog\u002Fnext\u002Fclient'\n\nexport default function Layout({ children }: { children: React.ReactNode }) {\n  return (\n    \u003Chtml lang=\"en\">\n      \u003Cbody>\n        \u003CEvlogProvider service=\"my-app\" transport={{ enabled: true }}>\n          {children}\n        \u003C\u002FEvlogProvider>\n      \u003C\u002Fbody>\n    \u003C\u002Fhtml>\n  )\n}\n","app\u002Flayout.tsx",[439,5257,5258,5278,5282,5322,5329,5352,5361,5394,5404,5413,5422,5431,5436],{"__ignoreMap":517},[521,5259,5260,5262,5264,5267,5269,5271,5273,5276],{"class":523,"line":524},[521,5261,595],{"class":594},[521,5263,599],{"class":598},[521,5265,5266],{"class":602}," EvlogProvider",[521,5268,606],{"class":598},[521,5270,609],{"class":594},[521,5272,612],{"class":598},[521,5274,5275],{"class":530},"evlog\u002Fnext\u002Fclient",[521,5277,618],{"class":598},[521,5279,5280],{"class":523,"line":621},[521,5281,625],{"emptyLinePlaceholder":624},[521,5283,5284,5286,5289,5291,5294,5297,5300,5303,5305,5307,5309,5312,5314,5317,5320],{"class":523,"line":628},[521,5285,631],{"class":594},[521,5287,5288],{"class":594}," default",[521,5290,1175],{"class":634},[521,5292,5293],{"class":665}," Layout",[521,5295,5296],{"class":598},"({",[521,5298,5299],{"class":1288}," children",[521,5301,5302],{"class":598}," }:",[521,5304,599],{"class":598},[521,5306,5299],{"class":677},[521,5308,681],{"class":598},[521,5310,5311],{"class":527}," React",[521,5313,787],{"class":598},[521,5315,5316],{"class":527},"ReactNode",[521,5318,5319],{"class":598}," })",[521,5321,765],{"class":598},[521,5323,5324,5326],{"class":523,"line":674},[521,5325,817],{"class":594},[521,5327,5328],{"class":677}," (\n",[521,5330,5331,5334,5337,5340,5342,5344,5347,5349],{"class":523,"line":695},[521,5332,5333],{"class":598},"    \u003C",[521,5335,5336],{"class":677},"html",[521,5338,5339],{"class":634}," lang",[521,5341,749],{"class":598},[521,5343,4003],{"class":598},[521,5345,5346],{"class":530},"en",[521,5348,4003],{"class":598},[521,5350,5351],{"class":598},">\n",[521,5353,5354,5357,5359],{"class":523,"line":814},[521,5355,5356],{"class":598},"      \u003C",[521,5358,3095],{"class":677},[521,5360,5351],{"class":598},[521,5362,5363,5366,5368,5370,5372,5374,5376,5378,5381,5384,5387,5389,5391],{"class":523,"line":848},[521,5364,5365],{"class":598},"        \u003C",[521,5367,5250],{"class":527},[521,5369,2499],{"class":634},[521,5371,749],{"class":598},[521,5373,4003],{"class":598},[521,5375,686],{"class":530},[521,5377,4003],{"class":598},[521,5379,5380],{"class":634}," transport",[521,5382,5383],{"class":598},"={{",[521,5385,5386],{"class":677}," enabled",[521,5388,681],{"class":598},[521,5390,1035],{"class":1034},[521,5392,5393],{"class":598}," }}>\n",[521,5395,5396,5399,5402],{"class":523,"line":1040},[521,5397,5398],{"class":598},"          {",[521,5400,5401],{"class":602},"children",[521,5403,1264],{"class":598},[521,5405,5406,5409,5411],{"class":523,"line":1285},[521,5407,5408],{"class":598},"        \u003C\u002F",[521,5410,5250],{"class":527},[521,5412,5351],{"class":598},[521,5414,5415,5418,5420],{"class":523,"line":1315},[521,5416,5417],{"class":598},"      \u003C\u002F",[521,5419,3095],{"class":677},[521,5421,5351],{"class":598},[521,5423,5424,5427,5429],{"class":523,"line":1368},[521,5425,5426],{"class":598},"    \u003C\u002F",[521,5428,5336],{"class":677},[521,5430,5351],{"class":598},[521,5432,5433],{"class":523,"line":1414},[521,5434,5435],{"class":677},"  )\n",[521,5437,5438],{"class":523,"line":1422},[521,5439,1264],{"class":598},[499,5441,66],{"id":5442},"client-logging",[435,5444,3491,5445,5448],{},[439,5446,5447],{},"log"," in any client component. Identity is preserved across all logs and transported to the server:",[511,5450,5453],{"className":4196,"code":5451,"filename":5452,"language":4199,"meta":517,"style":517},"'use client'\nimport { log, setIdentity, clearIdentity } from 'evlog\u002Fnext\u002Fclient'\n\nexport function Dashboard({ user }: { user: { id: string } }) {\n  \u002F\u002F Set identity once - all subsequent logs include it\n  useEffect(() => {\n    setIdentity({ userId: user.id })\n    return () => clearIdentity()\n  }, [user.id])\n\n  return (\n    \u003Cbutton onClick={() => log.info({ action: 'export_clicked', format: 'csv' })}>\n      Export\n    \u003C\u002Fbutton>\n  )\n}\n","app\u002Fcomponents\u002FDashboard.tsx",[439,5454,5455,5463,5491,5495,5530,5535,5548,5573,5586,5602,5606,5612,5669,5674,5682,5686],{"__ignoreMap":517},[521,5456,5457,5459,5461],{"class":523,"line":524},[521,5458,689],{"class":598},[521,5460,4208],{"class":530},[521,5462,618],{"class":598},[521,5464,5465,5467,5469,5471,5473,5476,5478,5481,5483,5485,5487,5489],{"class":523,"line":621},[521,5466,595],{"class":594},[521,5468,599],{"class":598},[521,5470,651],{"class":602},[521,5472,643],{"class":598},[521,5474,5475],{"class":602}," setIdentity",[521,5477,643],{"class":598},[521,5479,5480],{"class":602}," clearIdentity",[521,5482,606],{"class":598},[521,5484,609],{"class":594},[521,5486,612],{"class":598},[521,5488,5275],{"class":530},[521,5490,618],{"class":598},[521,5492,5493],{"class":523,"line":628},[521,5494,625],{"emptyLinePlaceholder":624},[521,5496,5497,5499,5501,5504,5506,5508,5510,5512,5514,5516,5518,5520,5522,5524,5526,5528],{"class":523,"line":674},[521,5498,631],{"class":594},[521,5500,1175],{"class":634},[521,5502,5503],{"class":665}," Dashboard",[521,5505,5296],{"class":598},[521,5507,2607],{"class":1288},[521,5509,5302],{"class":598},[521,5511,599],{"class":598},[521,5513,2607],{"class":677},[521,5515,681],{"class":598},[521,5517,599],{"class":598},[521,5519,2952],{"class":677},[521,5521,681],{"class":598},[521,5523,1302],{"class":527},[521,5525,606],{"class":598},[521,5527,5319],{"class":598},[521,5529,765],{"class":598},[521,5531,5532],{"class":523,"line":695},[521,5533,5534],{"class":1680},"  \u002F\u002F Set identity once - all subsequent logs include it\n",[521,5536,5537,5540,5542,5544,5546],{"class":523,"line":814},[521,5538,5539],{"class":665},"  useEffect",[521,5541,668],{"class":677},[521,5543,1022],{"class":598},[521,5545,762],{"class":634},[521,5547,765],{"class":598},[521,5549,5550,5553,5555,5557,5560,5562,5564,5566,5569,5571],{"class":523,"line":848},[521,5551,5552],{"class":665},"    setIdentity",[521,5554,668],{"class":677},[521,5556,795],{"class":598},[521,5558,5559],{"class":677}," userId",[521,5561,681],{"class":598},[521,5563,2607],{"class":602},[521,5565,787],{"class":598},[521,5567,5568],{"class":602},"id",[521,5570,606],{"class":598},[521,5572,700],{"class":677},[521,5574,5575,5578,5580,5582,5584],{"class":523,"line":1040},[521,5576,5577],{"class":594},"    return",[521,5579,759],{"class":598},[521,5581,762],{"class":634},[521,5583,5480],{"class":665},[521,5585,779],{"class":677},[521,5587,5588,5591,5593,5595,5597,5599],{"class":523,"line":1285},[521,5589,5590],{"class":598},"  },",[521,5592,2136],{"class":677},[521,5594,2622],{"class":602},[521,5596,787],{"class":598},[521,5598,5568],{"class":602},[521,5600,5601],{"class":677},"])\n",[521,5603,5604],{"class":523,"line":1315},[521,5605,625],{"emptyLinePlaceholder":624},[521,5607,5608,5610],{"class":523,"line":1368},[521,5609,817],{"class":594},[521,5611,5328],{"class":677},[521,5613,5614,5616,5619,5622,5625,5627,5629,5631,5633,5635,5637,5639,5641,5643,5646,5648,5650,5653,5655,5657,5660,5662,5664,5666],{"class":523,"line":1414},[521,5615,5333],{"class":598},[521,5617,5618],{"class":677},"button",[521,5620,5621],{"class":634}," onClick",[521,5623,5624],{"class":598},"={()",[521,5626,762],{"class":634},[521,5628,651],{"class":602},[521,5630,787],{"class":598},[521,5632,875],{"class":665},[521,5634,668],{"class":602},[521,5636,795],{"class":598},[521,5638,798],{"class":677},[521,5640,681],{"class":598},[521,5642,612],{"class":598},[521,5644,5645],{"class":530},"export_clicked",[521,5647,689],{"class":598},[521,5649,643],{"class":598},[521,5651,5652],{"class":677}," format",[521,5654,681],{"class":598},[521,5656,612],{"class":598},[521,5658,5659],{"class":530},"csv",[521,5661,689],{"class":598},[521,5663,606],{"class":598},[521,5665,1417],{"class":602},[521,5667,5668],{"class":598},"}>\n",[521,5670,5671],{"class":523,"line":1422},[521,5672,5673],{"class":602},"      Export\n",[521,5675,5676,5678,5680],{"class":523,"line":1451},[521,5677,5426],{"class":598},[521,5679,5618],{"class":677},[521,5681,5351],{"class":598},[521,5683,5684],{"class":523,"line":1478},[521,5685,5435],{"class":677},[521,5687,5688],{"class":523,"line":1502},[521,5689,1264],{"class":598},[499,5691,5693],{"id":5692},"http-drain","HTTP drain",[435,5695,5696,5697,5699],{},"For advanced use cases, send structured ",[439,5698,2173],{}," events directly from the browser to a custom endpoint:",[511,5701,5704],{"className":584,"code":5702,"filename":5703,"language":587,"meta":517,"style":517},"import { createHttpLogDrain } from 'evlog\u002Fhttp'\n\nconst drain = createHttpLogDrain({\n  drain: { endpoint: '\u002Fapi\u002Fevlog\u002Fhttp-ingest' },\n  pipeline: { batch: { size: 10, intervalMs: 5000 } },\n})\n\ndrain(drainEvent)\nawait drain.flush()\n","lib\u002Fhttp-drain.ts",[439,5705,5706,5726,5730,5744,5766,5799,5805,5809,5816],{"__ignoreMap":517},[521,5707,5708,5710,5712,5715,5717,5719,5721,5724],{"class":523,"line":524},[521,5709,595],{"class":594},[521,5711,599],{"class":598},[521,5713,5714],{"class":602}," createHttpLogDrain",[521,5716,606],{"class":598},[521,5718,609],{"class":594},[521,5720,612],{"class":598},[521,5722,5723],{"class":530},"evlog\u002Fhttp",[521,5725,618],{"class":598},[521,5727,5728],{"class":523,"line":621},[521,5729,625],{"emptyLinePlaceholder":624},[521,5731,5732,5734,5736,5738,5740,5742],{"class":523,"line":628},[521,5733,1589],{"class":634},[521,5735,2227],{"class":602},[521,5737,749],{"class":598},[521,5739,5714],{"class":665},[521,5741,668],{"class":602},[521,5743,671],{"class":598},[521,5745,5746,5748,5750,5752,5755,5757,5759,5762,5764],{"class":523,"line":674},[521,5747,1015],{"class":677},[521,5749,681],{"class":598},[521,5751,599],{"class":598},[521,5753,5754],{"class":677}," endpoint",[521,5756,681],{"class":598},[521,5758,612],{"class":598},[521,5760,5761],{"class":530},"\u002Fapi\u002Fevlog\u002Fhttp-ingest",[521,5763,689],{"class":598},[521,5765,1365],{"class":598},[521,5767,5768,5771,5773,5775,5777,5779,5781,5783,5785,5787,5789,5791,5793,5795,5797],{"class":523,"line":695},[521,5769,5770],{"class":677},"  pipeline",[521,5772,681],{"class":598},[521,5774,599],{"class":598},[521,5776,2182],{"class":677},[521,5778,681],{"class":598},[521,5780,599],{"class":598},[521,5782,2189],{"class":677},[521,5784,681],{"class":598},[521,5786,2374],{"class":2194},[521,5788,643],{"class":598},[521,5790,2200],{"class":677},[521,5792,681],{"class":598},[521,5794,2205],{"class":2194},[521,5796,606],{"class":598},[521,5798,1365],{"class":598},[521,5800,5801,5803],{"class":523,"line":814},[521,5802,659],{"class":598},[521,5804,700],{"class":602},[521,5806,5807],{"class":523,"line":848},[521,5808,625],{"emptyLinePlaceholder":624},[521,5810,5811,5813],{"class":523,"line":1040},[521,5812,917],{"class":665},[521,5814,5815],{"class":602},"(drainEvent)\n",[521,5817,5818,5821,5824,5826,5829],{"class":523,"line":1285},[521,5819,5820],{"class":594},"await",[521,5822,5823],{"class":602}," drain",[521,5825,787],{"class":598},[521,5827,5828],{"class":665},"flush",[521,5830,779],{"class":602},[435,5832,5833],{},"The server endpoint receives batched events:",[511,5835,5838],{"className":584,"code":5836,"filename":5837,"language":587,"meta":517,"style":517},"export async function POST(request: Request) {\n  const events = await request.json()\n  \u002F\u002F Forward to your drain pipeline, Axiom, etc.\n  return new Response(null, { status: 204 })\n}\n","app\u002Fapi\u002Fevlog\u002Fhttp-ingest\u002Froute.ts",[439,5839,5840,5863,5882,5887,5914],{"__ignoreMap":517},[521,5841,5842,5844,5846,5848,5851,5853,5855,5857,5859,5861],{"class":523,"line":524},[521,5843,631],{"class":594},[521,5845,1172],{"class":634},[521,5847,1175],{"class":634},[521,5849,5850],{"class":665}," POST",[521,5852,668],{"class":598},[521,5854,2877],{"class":1288},[521,5856,681],{"class":598},[521,5858,2882],{"class":527},[521,5860,1417],{"class":598},[521,5862,765],{"class":598},[521,5864,5865,5867,5870,5872,5874,5876,5878,5880],{"class":523,"line":621},[521,5866,770],{"class":634},[521,5868,5869],{"class":602}," events",[521,5871,662],{"class":598},[521,5873,1233],{"class":594},[521,5875,1492],{"class":602},[521,5877,787],{"class":598},[521,5879,825],{"class":665},[521,5881,779],{"class":677},[521,5883,5884],{"class":523,"line":628},[521,5885,5886],{"class":1680},"  \u002F\u002F Forward to your drain pipeline, Axiom, etc.\n",[521,5888,5889,5891,5894,5896,5898,5901,5903,5905,5907,5910,5912],{"class":523,"line":674},[521,5890,817],{"class":594},[521,5892,5893],{"class":598}," new",[521,5895,820],{"class":665},[521,5897,668],{"class":677},[521,5899,5900],{"class":598},"null,",[521,5902,599],{"class":598},[521,5904,2396],{"class":677},[521,5906,681],{"class":598},[521,5908,5909],{"class":2194}," 204",[521,5911,606],{"class":598},[521,5913,700],{"class":677},[521,5915,5916],{"class":523,"line":695},[521,5917,1264],{"class":598},[499,5919,5921],{"id":5920},"run-locally","Run Locally",[511,5923,5926],{"className":513,"code":5924,"filename":5925,"language":516,"meta":517,"style":517},"git clone https:\u002F\u002Fgithub.com\u002Fhugorcd\u002Fevlog.git\ncd evlog\u002Fexamples\u002Fnextjs\npnpm install\npnpm run dev\n","Terminal",[439,5927,5928,5939,5947,5954],{"__ignoreMap":517},[521,5929,5930,5933,5936],{"class":523,"line":524},[521,5931,5932],{"class":527},"git",[521,5934,5935],{"class":530}," clone",[521,5937,5938],{"class":530}," https:\u002F\u002Fgithub.com\u002Fhugorcd\u002Fevlog.git\n",[521,5940,5941,5944],{"class":523,"line":621},[521,5942,5943],{"class":665},"cd",[521,5945,5946],{"class":530}," evlog\u002Fexamples\u002Fnextjs\n",[521,5948,5949,5951],{"class":523,"line":628},[521,5950,515],{"class":527},[521,5952,5953],{"class":530}," install\n",[521,5955,5956,5958,5961],{"class":523,"line":674},[521,5957,515],{"class":527},[521,5959,5960],{"class":530}," run",[521,5962,5963],{"class":530}," dev\n",[435,5965,5966,5967,5971],{},"Open ",[488,5968,5969],{"href":5969,"rel":5970},"http:\u002F\u002Flocalhost:3000",[492]," to explore the example.",[5973,5974,5975],"card-group",{},[5976,5977,5981],"card",{"icon":5978,"title":5979,"to":5980},"i-simple-icons-github","Source Code","https:\u002F\u002Fgithub.com\u002Fhugorcd\u002Fevlog\u002Ftree\u002Fmain\u002Fexamples\u002Fnextjs","Browse the complete Next.js example source on GitHub.",[499,5983,5985],{"id":5984},"next-steps","Next Steps",[435,5987,5988,5989,5991],{},"Deepen your ",[884,5990,216],{}," integration:",[460,5993,5994,5999,6004,6009],{},[463,5995,5996,5998],{},[488,5997,51],{"href":52},": Design comprehensive events with context layering",[463,6000,6001,6003],{},[488,6002,327],{"href":332},": Send logs to Axiom, Sentry, PostHog, and more",[463,6005,6006,6008],{},[488,6007,175],{"href":176},": Control log volume with head and tail sampling",[463,6010,6011,6013,6014,1885,6016,3502,6018,6020],{},[488,6012,56],{"href":57},": Throw errors with ",[439,6015,3498],{},[439,6017,3501],{},[439,6019,3505],{}," fields",[6022,6023,6024],"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 .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 .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}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 .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 .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}",{"title":517,"searchDepth":621,"depth":621,"links":6026},[6027,6032,6038,6039,6040,6042,6045,6046,6047,6048,6049,6050,6051,6052,6053],{"id":501,"depth":621,"text":20,"children":6028},[6029,6030,6031],{"id":505,"depth":628,"text":506},{"id":580,"depth":628,"text":581},{"id":703,"depth":628,"text":704},{"id":855,"depth":621,"text":856,"children":6033},[6034,6035,6036,6037],{"id":920,"depth":628,"text":921},{"id":1047,"depth":628,"text":1048},{"id":1522,"depth":628,"text":1523},{"id":1920,"depth":628,"text":170},{"id":1997,"depth":621,"text":1998},{"id":2820,"depth":621,"text":51},{"id":3286,"depth":621,"text":6041},"Background work (log.fork)",{"id":3487,"depth":621,"text":3488,"children":6043},[6044],{"id":4179,"depth":628,"text":4180},{"id":4509,"depth":621,"text":170},{"id":4735,"depth":621,"text":4736},{"id":4972,"depth":621,"text":114},{"id":5087,"depth":621,"text":5088},{"id":5243,"depth":621,"text":5244},{"id":5442,"depth":621,"text":66},{"id":5692,"depth":621,"text":5693},{"id":5920,"depth":621,"text":5921},{"id":5984,"depth":621,"text":5985},"Wide events, structured errors, drain pipeline, tail sampling, route-based services, error handling, and client-side logging in Next.js applications.","md",[6057],{"label":5979,"icon":5978,"to":5980,"color":6058,"variant":6059},"neutral","subtle",{},{"title":216,"icon":219},{"title":216,"description":6054},"-61UzY5v1Ku5j5igK7o-bpDv1eJpRmnpzWB2aYkDU9Q",[6065,6067],{"title":211,"path":212,"stem":213,"description":6066,"icon":214,"children":-1},"Automatic wide events, structured errors, drain adapters, enrichers, tail sampling, and client transport in Nuxt applications.",{"title":221,"path":222,"stem":223,"description":6068,"icon":224,"children":-1},"Automatic wide events, structured errors, drain adapters, enrichers, and tail sampling in SvelteKit applications.",1778336620293]