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