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