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