[{"data":1,"prerenderedAt":6024},["ShallowReactive",2],{"navigation_docs":3,"-integrate-frameworks-nextjs":534,"-integrate-frameworks-nextjs-surround":6019},[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":6009,"extension":6010,"links":6011,"meta":6015,"navigation":6016,"path":236,"seo":6017,"stem":237,"__hash__":6018},"docs\u002F4.integrate\u002Fframeworks\u002F02.nextjs.md",{"type":537,"value":538,"toc":5980},"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,3171,3347,3351,3369,3840,3849,3975,3978,4129,4133,4146,4447,4460,4463,4479,4485,4688,4692,4695,4920,4925,4928,4941,5026,5039,5043,5048,5195,5199,5206,5394,5397,5403,5645,5649,5655,5786,5789,5873,5877,5919,5927,5937,5941,5947,5976],[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, and 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,3170],{},"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","After emit"," in Wide events.",[616,3172,3175],{"className":689,"code":3173,"filename":3174,"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,3176,3177,3199,3203,3225,3237,3268,3281,3310,3316,3341],{"__ignoreMap":622},[626,3178,3179,3181,3183,3185,3187,3189,3191,3193,3195,3197],{"class":628,"line":629},[626,3180,700],{"class":699},[626,3182,704],{"class":703},[626,3184,745],{"class":707},[626,3186,748],{"class":703},[626,3188,751],{"class":707},[626,3190,711],{"class":703},[626,3192,714],{"class":699},[626,3194,717],{"class":703},[626,3196,836],{"class":635},[626,3198,723],{"class":703},[626,3200,3201],{"class":628,"line":726},[626,3202,730],{"emptyLinePlaceholder":729},[626,3204,3205,3207,3209,3211,3213,3215,3217,3219,3221,3223],{"class":628,"line":733},[626,3206,736],{"class":699},[626,3208,740],{"class":739},[626,3210,2723],{"class":707},[626,3212,854],{"class":703},[626,3214,745],{"class":770},[626,3216,773],{"class":707},[626,3218,861],{"class":739},[626,3220,864],{"class":703},[626,3222,867],{"class":739},[626,3224,870],{"class":703},[626,3226,3227,3229,3231,3233,3235],{"class":628,"line":779},[626,3228,875],{"class":739},[626,3230,756],{"class":707},[626,3232,767],{"class":703},[626,3234,751],{"class":770},[626,3236,884],{"class":782},[626,3238,3239,3241,3243,3245,3248,3250,3252,3255,3257,3259,3262,3264,3266],{"class":628,"line":800},[626,3240,889],{"class":707},[626,3242,892],{"class":703},[626,3244,3164],{"class":770},[626,3246,3247],{"class":703},"!",[626,3249,773],{"class":782},[626,3251,794],{"class":703},[626,3253,3254],{"class":635},"enqueue",[626,3256,794],{"class":703},[626,3258,748],{"class":703},[626,3260,3261],{"class":739}," async",[626,3263,864],{"class":703},[626,3265,867],{"class":739},[626,3267,870],{"class":703},[626,3269,3270,3272,3275,3277,3279],{"class":628,"line":919},[626,3271,2461],{"class":739},[626,3273,3274],{"class":707}," child",[626,3276,767],{"class":703},[626,3278,751],{"class":770},[626,3280,884],{"class":782},[626,3282,3283,3286,3288,3290,3292,3294,3297,3299,3301,3304,3306,3308],{"class":628,"line":953},[626,3284,3285],{"class":707},"    child",[626,3287,892],{"class":703},[626,3289,895],{"class":770},[626,3291,773],{"class":782},[626,3293,900],{"class":703},[626,3295,3296],{"class":782}," job",[626,3298,786],{"class":703},[626,3300,717],{"class":703},[626,3302,3303],{"class":635},"queued",[626,3305,794],{"class":703},[626,3307,711],{"class":703},[626,3309,805],{"class":782},[626,3311,3312,3314],{"class":628,"line":1443},[626,3313,1446],{"class":703},[626,3315,805],{"class":782},[626,3317,3318,3320,3322,3324,3326,3328,3330,3333,3335,3337,3339],{"class":628,"line":1451},[626,3319,922],{"class":699},[626,3321,925],{"class":707},[626,3323,892],{"class":703},[626,3325,930],{"class":770},[626,3327,773],{"class":782},[626,3329,900],{"class":703},[626,3331,3332],{"class":782}," ok",[626,3334,786],{"class":703},[626,3336,1146],{"class":1145},[626,3338,711],{"class":703},[626,3340,805],{"class":782},[626,3342,3343,3345],{"class":628,"line":1456},[626,3344,764],{"class":703},[626,3346,805],{"class":707},[604,3348,3350],{"id":3349},"error-handling","Error Handling",[540,3352,3353,3354,3357,3358,1562,3361,3364,3365,3368],{},"Use ",[544,3355,3356],{},"createError"," for structured errors with ",[544,3359,3360],{},"why",[544,3362,3363],{},"fix",", and ",[544,3366,3367],{},"link"," fields that help developers debug in both logs and API responses:",[1849,3370,3371],{},[616,3372,3375],{"className":689,"code":3373,"filename":3374,"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,3376,3377,3404,3408,3438,3450,3468,3472,3508,3512,3535,3546,3557,3573,3589,3605,3621,3628,3632,3636,3656,3660,3680,3721,3731,3742,3757,3781,3796,3802,3806,3810,3834],{"__ignoreMap":622},[626,3378,3379,3381,3383,3385,3387,3389,3391,3394,3396,3398,3400,3402],{"class":628,"line":629},[626,3380,700],{"class":699},[626,3382,704],{"class":703},[626,3384,745],{"class":707},[626,3386,748],{"class":703},[626,3388,751],{"class":707},[626,3390,748],{"class":703},[626,3392,3393],{"class":707}," createError",[626,3395,711],{"class":703},[626,3397,714],{"class":699},[626,3399,717],{"class":703},[626,3401,836],{"class":635},[626,3403,723],{"class":703},[626,3405,3406],{"class":628,"line":726},[626,3407,730],{"emptyLinePlaceholder":729},[626,3409,3410,3412,3414,3416,3418,3420,3422,3424,3426,3428,3430,3432,3434,3436],{"class":628,"line":733},[626,3411,736],{"class":699},[626,3413,740],{"class":739},[626,3415,2723],{"class":707},[626,3417,854],{"class":703},[626,3419,745],{"class":770},[626,3421,773],{"class":707},[626,3423,861],{"class":739},[626,3425,2444],{"class":703},[626,3427,2736],{"class":2447},[626,3429,786],{"class":703},[626,3431,2741],{"class":632},[626,3433,2451],{"class":703},[626,3435,867],{"class":739},[626,3437,870],{"class":703},[626,3439,3440,3442,3444,3446,3448],{"class":628,"line":779},[626,3441,875],{"class":739},[626,3443,756],{"class":707},[626,3445,767],{"class":703},[626,3447,751],{"class":770},[626,3449,884],{"class":782},[626,3451,3452,3454,3456,3458,3460,3462,3464,3466],{"class":628,"line":800},[626,3453,875],{"class":739},[626,3455,2766],{"class":707},[626,3457,767],{"class":703},[626,3459,1367],{"class":699},[626,3461,2773],{"class":707},[626,3463,892],{"class":703},[626,3465,930],{"class":770},[626,3467,884],{"class":782},[626,3469,3470],{"class":628,"line":919},[626,3471,730],{"emptyLinePlaceholder":729},[626,3473,3474,3476,3478,3480,3482,3484,3486,3488,3490,3493,3495,3497,3499,3502,3504,3506],{"class":628,"line":953},[626,3475,889],{"class":707},[626,3477,892],{"class":703},[626,3479,895],{"class":770},[626,3481,773],{"class":782},[626,3483,900],{"class":703},[626,3485,2942],{"class":782},[626,3487,786],{"class":703},[626,3489,704],{"class":703},[626,3491,3492],{"class":782}," amount",[626,3494,786],{"class":703},[626,3496,2766],{"class":707},[626,3498,892],{"class":703},[626,3500,3501],{"class":707},"amount",[626,3503,711],{"class":703},[626,3505,711],{"class":703},[626,3507,805],{"class":782},[626,3509,3510],{"class":628,"line":1443},[626,3511,730],{"emptyLinePlaceholder":729},[626,3513,3514,3517,3519,3521,3523,3525,3528,3531,3533],{"class":628,"line":1451},[626,3515,3516],{"class":699},"  if",[626,3518,2444],{"class":782},[626,3520,2954],{"class":707},[626,3522,892],{"class":703},[626,3524,3501],{"class":707},[626,3526,3527],{"class":703}," \u003C=",[626,3529,3530],{"class":2042}," 0",[626,3532,2520],{"class":782},[626,3534,776],{"class":703},[626,3536,3537,3540,3542,3544],{"class":628,"line":1456},[626,3538,3539],{"class":699},"    throw",[626,3541,3393],{"class":770},[626,3543,773],{"class":782},[626,3545,776],{"class":703},[626,3547,3548,3551,3553,3555],{"class":628,"line":1463},[626,3549,3550],{"class":782},"      status",[626,3552,786],{"class":703},[626,3554,2254],{"class":2042},[626,3556,797],{"class":703},[626,3558,3559,3562,3564,3566,3569,3571],{"class":628,"line":1475},[626,3560,3561],{"class":782},"      message",[626,3563,786],{"class":703},[626,3565,717],{"class":703},[626,3567,3568],{"class":635},"Invalid payment amount",[626,3570,794],{"class":703},[626,3572,797],{"class":703},[626,3574,3575,3578,3580,3582,3585,3587],{"class":628,"line":1485},[626,3576,3577],{"class":782},"      why",[626,3579,786],{"class":703},[626,3581,717],{"class":703},[626,3583,3584],{"class":635},"The amount must be a positive number",[626,3586,794],{"class":703},[626,3588,797],{"class":703},[626,3590,3591,3594,3596,3598,3601,3603],{"class":628,"line":1492},[626,3592,3593],{"class":782},"      fix",[626,3595,786],{"class":703},[626,3597,717],{"class":703},[626,3599,3600],{"class":635},"Pass a positive integer in cents (e.g. 4999 for $49.99)",[626,3602,794],{"class":703},[626,3604,797],{"class":703},[626,3606,3607,3610,3612,3614,3617,3619],{"class":628,"line":1498},[626,3608,3609],{"class":782},"      link",[626,3611,786],{"class":703},[626,3613,717],{"class":703},[626,3615,3616],{"class":635},"https:\u002F\u002Fdocs.example.com\u002Fapi\u002Fpayments#amount",[626,3618,794],{"class":703},[626,3620,797],{"class":703},[626,3622,3623,3626],{"class":628,"line":1510},[626,3624,3625],{"class":703},"    }",[626,3627,805],{"class":782},[626,3629,3630],{"class":628,"line":1516},[626,3631,1513],{"class":703},[626,3633,3634],{"class":628,"line":2137},[626,3635,730],{"emptyLinePlaceholder":729},[626,3637,3638,3640,3643,3645,3647,3650,3652,3654],{"class":628,"line":2142},[626,3639,875],{"class":739},[626,3641,3642],{"class":707}," result",[626,3644,767],{"class":703},[626,3646,1367],{"class":699},[626,3648,3649],{"class":770}," chargeCard",[626,3651,773],{"class":782},[626,3653,2954],{"class":707},[626,3655,805],{"class":782},[626,3657,3658],{"class":628,"line":2175},[626,3659,730],{"emptyLinePlaceholder":729},[626,3661,3662,3664,3666,3668,3671,3673,3676,3678],{"class":628,"line":2190},[626,3663,3516],{"class":699},[626,3665,2444],{"class":782},[626,3667,3247],{"class":703},[626,3669,3670],{"class":707},"result",[626,3672,892],{"class":703},[626,3674,3675],{"class":707},"success",[626,3677,2520],{"class":782},[626,3679,776],{"class":703},[626,3681,3682,3685,3687,3690,3692,3695,3698,3700,3703,3706,3709,3711,3713,3716,3719],{"class":628,"line":2195},[626,3683,3684],{"class":707},"    log",[626,3686,892],{"class":703},[626,3688,3689],{"class":770},"error",[626,3691,773],{"class":782},[626,3693,3694],{"class":703},"new",[626,3696,3697],{"class":770}," Error",[626,3699,773],{"class":782},[626,3701,3702],{"class":703},"`",[626,3704,3705],{"class":635},"Payment declined: ",[626,3707,3708],{"class":703},"${",[626,3710,3670],{"class":707},[626,3712,892],{"class":703},[626,3714,3715],{"class":707},"reason",[626,3717,3718],{"class":703},"}`",[626,3720,2134],{"class":782},[626,3722,3723,3725,3727,3729],{"class":628,"line":2201},[626,3724,3539],{"class":699},[626,3726,3393],{"class":770},[626,3728,773],{"class":782},[626,3730,776],{"class":703},[626,3732,3733,3735,3737,3740],{"class":628,"line":2211},[626,3734,3550],{"class":782},[626,3736,786],{"class":703},[626,3738,3739],{"class":2042}," 402",[626,3741,797],{"class":703},[626,3743,3744,3746,3748,3750,3753,3755],{"class":628,"line":2232},[626,3745,3561],{"class":782},[626,3747,786],{"class":703},[626,3749,717],{"class":703},[626,3751,3752],{"class":635},"Payment declined",[626,3754,794],{"class":703},[626,3756,797],{"class":703},[626,3758,3759,3761,3763,3766,3769,3771,3773,3775,3777,3779],{"class":628,"line":2243},[626,3760,3577],{"class":782},[626,3762,786],{"class":703},[626,3764,3765],{"class":703}," `",[626,3767,3768],{"class":635},"Card declined by issuer: ",[626,3770,3708],{"class":703},[626,3772,3670],{"class":707},[626,3774,892],{"class":703},[626,3776,3715],{"class":707},[626,3778,3718],{"class":703},[626,3780,797],{"class":703},[626,3782,3783,3785,3787,3789,3792,3794],{"class":628,"line":2263},[626,3784,3593],{"class":782},[626,3786,786],{"class":703},[626,3788,717],{"class":703},[626,3790,3791],{"class":635},"Try a different payment method or contact your bank",[626,3793,794],{"class":703},[626,3795,797],{"class":703},[626,3797,3798,3800],{"class":628,"line":2281},[626,3799,3625],{"class":703},[626,3801,805],{"class":782},[626,3803,3804],{"class":628,"line":2303},[626,3805,1513],{"class":703},[626,3807,3808],{"class":628,"line":2311},[626,3809,730],{"emptyLinePlaceholder":729},[626,3811,3812,3814,3816,3818,3820,3822,3824,3826,3828,3830,3832],{"class":628,"line":2316},[626,3813,922],{"class":699},[626,3815,925],{"class":707},[626,3817,892],{"class":703},[626,3819,930],{"class":770},[626,3821,773],{"class":782},[626,3823,900],{"class":703},[626,3825,3032],{"class":782},[626,3827,786],{"class":703},[626,3829,1146],{"class":1145},[626,3831,711],{"class":703},[626,3833,805],{"class":782},[626,3835,3836,3838],{"class":628,"line":2321},[626,3837,764],{"class":703},[626,3839,805],{"class":707},[540,3841,3842,3844,3845,3848],{},[544,3843,550],{}," catches ",[544,3846,3847],{},"EvlogError"," and returns a structured JSON response (like Nitro does for Nuxt):",[616,3850,3854],{"className":3851,"code":3852,"filename":3853,"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,3855,3856,3860,3882,3901,3916,3929,3949,3966,3970],{"__ignoreMap":622},[626,3857,3858],{"class":628,"line":629},[626,3859,776],{"class":703},[626,3861,3862,3865,3868,3871,3873,3876,3878,3880],{"class":628,"line":726},[626,3863,3864],{"class":703},"  \"",[626,3866,3867],{"class":739},"name",[626,3869,3870],{"class":703},"\"",[626,3872,786],{"class":703},[626,3874,3875],{"class":703}," \"",[626,3877,3847],{"class":635},[626,3879,3870],{"class":703},[626,3881,797],{"class":703},[626,3883,3884,3886,3889,3891,3893,3895,3897,3899],{"class":628,"line":733},[626,3885,3864],{"class":703},[626,3887,3888],{"class":739},"message",[626,3890,3870],{"class":703},[626,3892,786],{"class":703},[626,3894,3875],{"class":703},[626,3896,3752],{"class":635},[626,3898,3870],{"class":703},[626,3900,797],{"class":703},[626,3902,3903,3905,3908,3910,3912,3914],{"class":628,"line":779},[626,3904,3864],{"class":703},[626,3906,3907],{"class":739},"status",[626,3909,3870],{"class":703},[626,3911,786],{"class":703},[626,3913,3739],{"class":2042},[626,3915,797],{"class":703},[626,3917,3918,3920,3923,3925,3927],{"class":628,"line":800},[626,3919,3864],{"class":703},[626,3921,3922],{"class":739},"data",[626,3924,3870],{"class":703},[626,3926,786],{"class":703},[626,3928,870],{"class":703},[626,3930,3931,3934,3936,3938,3940,3942,3945,3947],{"class":628,"line":919},[626,3932,3933],{"class":703},"    \"",[626,3935,3360],{"class":632},[626,3937,3870],{"class":703},[626,3939,786],{"class":703},[626,3941,3875],{"class":703},[626,3943,3944],{"class":635},"Card declined by issuer: insufficient_funds",[626,3946,3870],{"class":703},[626,3948,797],{"class":703},[626,3950,3951,3953,3955,3957,3959,3961,3963],{"class":628,"line":953},[626,3952,3933],{"class":703},[626,3954,3363],{"class":632},[626,3956,3870],{"class":703},[626,3958,786],{"class":703},[626,3960,3875],{"class":703},[626,3962,3791],{"class":635},[626,3964,3965],{"class":703},"\"\n",[626,3967,3968],{"class":628,"line":1443},[626,3969,1513],{"class":703},[626,3971,3972],{"class":628,"line":1451},[626,3973,3974],{"class":703},"}\n",[540,3976,3977],{},"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,3979,3982],{"className":618,"code":3980,"filename":3981,"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,3983,3984,3992,4005,4016,4039,4061,4093,4117],{"__ignoreMap":622},[626,3985,3986,3989],{"class":628,"line":629},[626,3987,3988],{"class":632},"ERROR",[626,3990,3991],{"class":707}," [app] POST \u002Fapi\u002Fpayment\u002Fprocess 402 in 12ms\n",[626,3993,3994,3996,3999,4002],{"class":628,"line":726},[626,3995,3085],{"class":632},[626,3997,3998],{"class":635}," error:",[626,4000,4001],{"class":635}," Payment",[626,4003,4004],{"class":635}," declined\n",[626,4006,4007,4010,4013],{"class":628,"line":733},[626,4008,4009],{"class":632},"  │",[626,4011,4012],{"class":635},"     at",[626,4014,4015],{"class":635}," app\u002Fapi\u002Fpayment\u002Fprocess\u002Froute.ts:336\n",[626,4017,4018,4020,4023,4026,4029,4032,4034,4036],{"class":628,"line":779},[626,4019,4009],{"class":632},[626,4021,4022],{"class":635},"   ❯",[626,4024,4025],{"class":2042}," 336",[626,4027,4028],{"class":635}," ┃",[626,4030,4031],{"class":635}," throw",[626,4033,3393],{"class":635},[626,4035,773],{"class":703},[626,4037,4038],{"class":707},"{ message: 'Payment declined', ... })\n",[626,4040,4041,4043,4046,4049,4052,4055,4058],{"class":628,"line":800},[626,4042,4009],{"class":632},[626,4044,4045],{"class":635},"     Why:",[626,4047,4048],{"class":635}," Card",[626,4050,4051],{"class":635}," declined",[626,4053,4054],{"class":635}," by",[626,4056,4057],{"class":635}," issuer:",[626,4059,4060],{"class":635}," insufficient_funds\n",[626,4062,4063,4065,4068,4071,4074,4077,4079,4081,4084,4087,4090],{"class":628,"line":919},[626,4064,4009],{"class":632},[626,4066,4067],{"class":635},"     Fix:",[626,4069,4070],{"class":635}," Try",[626,4072,4073],{"class":635}," a",[626,4075,4076],{"class":635}," different",[626,4078,2942],{"class":635},[626,4080,2980],{"class":635},[626,4082,4083],{"class":635}," or",[626,4085,4086],{"class":635}," contact",[626,4088,4089],{"class":635}," your",[626,4091,4092],{"class":635}," bank\n",[626,4094,4095,4097,4100,4103,4106,4109,4112,4115],{"class":628,"line":953},[626,4096,4009],{"class":632},[626,4098,4099],{"class":635},"     stack",[626,4101,4102],{"class":707}," (3 ",[626,4104,4105],{"class":635},"frames",[626,4107,4108],{"class":635}," hidden",[626,4110,4111],{"class":635}," in",[626,4113,4114],{"class":635}," node_modules",[626,4116,805],{"class":703},[626,4118,4119,4121,4123,4126],{"class":628,"line":1443},[626,4120,3137],{"class":632},[626,4122,3123],{"class":635},[626,4124,4125],{"class":635}," amount=",[626,4127,4128],{"class":2042},"4999\n",[608,4130,4132],{"id":4131},"parsing-errors-on-the-client","Parsing Errors on the Client",[540,4134,3353,4135,4138,4139,4141,4142,4145],{},[544,4136,4137],{},"parseError"," to extract the structured fields from any error, whether it's a fetch response, an ",[544,4140,3847],{},", or a plain ",[544,4143,4144],{},"Error"," object:",[616,4147,4152],{"className":4148,"code":4149,"filename":4150,"language":4151,"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,4153,4154,4163,4182,4186,4210,4217,4244,4260,4311,4317,4370,4385,4424,4429,4434,4439,4443],{"__ignoreMap":622},[626,4155,4156,4158,4161],{"class":628,"line":629},[626,4157,794],{"class":703},[626,4159,4160],{"class":635},"use client",[626,4162,723],{"class":703},[626,4164,4165,4167,4169,4172,4174,4176,4178,4180],{"class":628,"line":726},[626,4166,700],{"class":699},[626,4168,704],{"class":703},[626,4170,4171],{"class":707}," parseError",[626,4173,711],{"class":703},[626,4175,714],{"class":699},[626,4177,717],{"class":703},[626,4179,1876],{"class":635},[626,4181,723],{"class":703},[626,4183,4184],{"class":628,"line":733},[626,4185,730],{"emptyLinePlaceholder":729},[626,4187,4188,4190,4193,4196,4198,4201,4203,4206,4208],{"class":628,"line":779},[626,4189,861],{"class":739},[626,4191,4192],{"class":739}," function",[626,4194,4195],{"class":770}," handleSubmit",[626,4197,773],{"class":703},[626,4199,4200],{"class":2447},"formData",[626,4202,786],{"class":703},[626,4204,4205],{"class":632}," FormData",[626,4207,2451],{"class":703},[626,4209,870],{"class":703},[626,4211,4212,4215],{"class":628,"line":800},[626,4213,4214],{"class":699},"  try",[626,4216,870],{"class":703},[626,4218,4219,4221,4224,4226,4228,4231,4233,4235,4238,4240,4242],{"class":628,"line":919},[626,4220,2461],{"class":739},[626,4222,4223],{"class":707}," res",[626,4225,767],{"class":703},[626,4227,1367],{"class":699},[626,4229,4230],{"class":770}," fetch",[626,4232,773],{"class":782},[626,4234,794],{"class":703},[626,4236,4237],{"class":635},"\u002Fapi\u002Fpayment\u002Fprocess",[626,4239,794],{"class":703},[626,4241,748],{"class":703},[626,4243,870],{"class":703},[626,4245,4246,4249,4251,4253,4256,4258],{"class":628,"line":953},[626,4247,4248],{"class":782},"      method",[626,4250,786],{"class":703},[626,4252,717],{"class":703},[626,4254,4255],{"class":635},"POST",[626,4257,794],{"class":703},[626,4259,797],{"class":703},[626,4261,4262,4265,4267,4270,4272,4274,4276,4278,4280,4282,4285,4287,4289,4291,4294,4296,4298,4300,4302,4305,4307,4309],{"class":628,"line":1443},[626,4263,4264],{"class":782},"      body",[626,4266,786],{"class":703},[626,4268,4269],{"class":707}," JSON",[626,4271,892],{"class":703},[626,4273,1638],{"class":770},[626,4275,773],{"class":782},[626,4277,900],{"class":703},[626,4279,3492],{"class":782},[626,4281,786],{"class":703},[626,4283,4284],{"class":770}," Number",[626,4286,773],{"class":782},[626,4288,4200],{"class":707},[626,4290,892],{"class":703},[626,4292,4293],{"class":770},"get",[626,4295,773],{"class":782},[626,4297,794],{"class":703},[626,4299,3501],{"class":635},[626,4301,794],{"class":703},[626,4303,4304],{"class":782},")) ",[626,4306,764],{"class":703},[626,4308,2451],{"class":782},[626,4310,797],{"class":703},[626,4312,4313,4315],{"class":628,"line":1451},[626,4314,3625],{"class":703},[626,4316,805],{"class":782},[626,4318,4319,4321,4323,4325,4328,4330,4333,4335,4338,4340,4343,4345,4347,4349,4351,4353,4355,4357,4359,4361,4363,4365,4367],{"class":628,"line":1456},[626,4320,2507],{"class":699},[626,4322,2444],{"class":782},[626,4324,3247],{"class":703},[626,4326,4327],{"class":707},"res",[626,4329,892],{"class":703},[626,4331,4332],{"class":707},"ok",[626,4334,2520],{"class":782},[626,4336,4337],{"class":699},"throw",[626,4339,704],{"class":703},[626,4341,4342],{"class":782}," data",[626,4344,786],{"class":703},[626,4346,1367],{"class":699},[626,4348,4223],{"class":707},[626,4350,892],{"class":703},[626,4352,930],{"class":770},[626,4354,1258],{"class":782},[626,4356,748],{"class":703},[626,4358,2249],{"class":782},[626,4360,786],{"class":703},[626,4362,4223],{"class":707},[626,4364,892],{"class":703},[626,4366,3907],{"class":707},[626,4368,4369],{"class":703}," }\n",[626,4371,4372,4374,4377,4379,4381,4383],{"class":628,"line":1463},[626,4373,1446],{"class":703},[626,4375,4376],{"class":699}," catch",[626,4378,2444],{"class":782},[626,4380,3689],{"class":707},[626,4382,2520],{"class":782},[626,4384,776],{"class":703},[626,4386,4387,4389,4391,4393,4395,4397,4399,4402,4404,4407,4409,4412,4414,4416,4418,4420,4422],{"class":628,"line":1475},[626,4388,2461],{"class":739},[626,4390,704],{"class":703},[626,4392,937],{"class":707},[626,4394,748],{"class":703},[626,4396,2249],{"class":707},[626,4398,748],{"class":703},[626,4400,4401],{"class":707}," why",[626,4403,748],{"class":703},[626,4405,4406],{"class":707}," fix",[626,4408,748],{"class":703},[626,4410,4411],{"class":707}," link",[626,4413,711],{"class":703},[626,4415,767],{"class":703},[626,4417,4171],{"class":770},[626,4419,773],{"class":782},[626,4421,3689],{"class":707},[626,4423,805],{"class":782},[626,4425,4426],{"class":628,"line":1485},[626,4427,4428],{"class":1488},"    \u002F\u002F message: \"Payment declined\"\n",[626,4430,4431],{"class":628,"line":1492},[626,4432,4433],{"class":1488},"    \u002F\u002F why: \"Card declined by issuer: insufficient_funds\"\n",[626,4435,4436],{"class":628,"line":1498},[626,4437,4438],{"class":1488},"    \u002F\u002F fix: \"Try a different payment method or contact your bank\"\n",[626,4440,4441],{"class":628,"line":1510},[626,4442,1513],{"class":703},[626,4444,4445],{"class":628,"line":1516},[626,4446,3974],{"class":703},[540,4448,4449,4451,4452,4455,4456,4459],{},[544,4450,4137],{}," normalizes any error shape into a flat ",[544,4453,4454],{},"{ message, status, why?, fix?, link? }"," object, so your UI code never has to dig through nested ",[544,4457,4458],{},"data.data"," or check for different error formats.",[604,4461,504],{"id":4462},"configuration-1",[978,4464,4465,4466,4469,4470,1562,4472,1562,4474,1562,4476,4478],{"color":980,"icon":79},"See the ",[593,4467,4468],{"href":505},"Configuration reference"," for the full list of shared options (",[544,4471,1621],{},[544,4473,1630],{},[544,4475,1598],{},[544,4477,1635],{},", middleware options, etc.).",[540,4480,4481,4482,4484],{},"The ",[544,4483,546],{}," factory accepts the following options:",[1643,4486,4487,4499],{},[1646,4488,4489],{},[1649,4490,4491,4493,4495,4497],{},[1652,4492,1654],{},[1652,4494,1657],{},[1652,4496,1660],{},[1652,4498,1663],{},[1665,4500,4501,4520,4537,4557,4575,4594,4613,4632,4651,4669],{},[1649,4502,4503,4507,4512,4517],{},[1670,4504,4505],{},[544,4506,1624],{},[1670,4508,4509],{},[544,4510,4511],{},"string",[1670,4513,4514],{},[544,4515,4516],{},"'app'",[1670,4518,4519],{},"Service name shown in logs",[1649,4521,4522,4527,4531,4534],{},[1670,4523,4524],{},[544,4525,4526],{},"environment",[1670,4528,4529],{},[544,4530,4511],{},[1670,4532,4533],{},"Auto-detected",[1670,4535,4536],{},"Environment name",[1649,4538,4539,4544,4549,4554],{},[1670,4540,4541],{},[544,4542,4543],{},"include",[1670,4545,4546],{},[544,4547,4548],{},"string[]",[1670,4550,4551],{},[544,4552,4553],{},"undefined",[1670,4555,4556],{},"Route patterns to log",[1649,4558,4559,4564,4568,4572],{},[1670,4560,4561],{},[544,4562,4563],{},"exclude",[1670,4565,4566],{},[544,4567,4548],{},[1670,4569,4570],{},[544,4571,4553],{},[1670,4573,4574],{},"Route patterns to exclude",[1649,4576,4577,4582,4587,4591],{},[1670,4578,4579],{},[544,4580,4581],{},"routes",[1670,4583,4584],{},[544,4585,4586],{},"Record\u003Cstring, RouteConfig>",[1670,4588,4589],{},[544,4590,4553],{},[1670,4592,4593],{},"Route-specific service configuration",[1649,4595,4596,4601,4606,4610],{},[1670,4597,4598],{},[544,4599,4600],{},"sampling.rates",[1670,4602,4603],{},[544,4604,4605],{},"object",[1670,4607,4608],{},[544,4609,4553],{},[1670,4611,4612],{},"Head sampling rates per log level",[1649,4614,4615,4620,4625,4629],{},[1670,4616,4617],{},[544,4618,4619],{},"sampling.keep",[1670,4621,4622],{},[544,4623,4624],{},"array",[1670,4626,4627],{},[544,4628,4553],{},[1670,4630,4631],{},"Tail sampling conditions",[1649,4633,4634,4639,4644,4648],{},[1670,4635,4636],{},[544,4637,4638],{},"keep",[1670,4640,4641],{},[544,4642,4643],{},"(ctx: TailSamplingContext) => void",[1670,4645,4646],{},[544,4647,4553],{},[1670,4649,4650],{},"Custom tail sampling callback",[1649,4652,4653,4657,4662,4666],{},[1670,4654,4655],{},[544,4656,1022],{},[1670,4658,4659],{},[544,4660,4661],{},"DrainFunction",[1670,4663,4664],{},[544,4665,4553],{},[1670,4667,4668],{},"Drain adapter for external services",[1649,4670,4671,4676,4681,4685],{},[1670,4672,4673],{},[544,4674,4675],{},"enrich",[1670,4677,4678],{},[544,4679,4680],{},"(ctx: EnrichContext) => void",[1670,4682,4683],{},[544,4684,4553],{},[1670,4686,4687],{},"Event enrichment callback",[604,4689,4691],{"id":4690},"tail-sampling","Tail Sampling",[540,4693,4694],{},"Combine rule-based and custom tail sampling to always capture what matters, even when head sampling drops most logs:",[616,4696,4698],{"className":689,"code":4697,"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,4699,4700,4725,4739,4747,4766,4774,4789,4803,4821,4827,4831,4836,4852,4886,4910,4914],{"__ignoreMap":622},[626,4701,4702,4704,4706,4708,4710,4712,4715,4717,4719,4721,4723],{"class":628,"line":629},[626,4703,736],{"class":699},[626,4705,740],{"class":739},[626,4707,704],{"class":703},[626,4709,745],{"class":707},[626,4711,748],{"class":703},[626,4713,4714],{"class":707}," useLogger ",[626,4716,764],{"class":703},[626,4718,767],{"class":703},[626,4720,708],{"class":770},[626,4722,773],{"class":707},[626,4724,776],{"class":703},[626,4726,4727,4729,4731,4733,4735,4737],{"class":628,"line":726},[626,4728,783],{"class":782},[626,4730,786],{"class":703},[626,4732,717],{"class":703},[626,4734,791],{"class":635},[626,4736,794],{"class":703},[626,4738,797],{"class":703},[626,4740,4741,4743,4745],{"class":628,"line":733},[626,4742,2204],{"class":782},[626,4744,786],{"class":703},[626,4746,870],{"class":703},[626,4748,4749,4751,4753,4755,4757,4759,4761,4763],{"class":628,"line":779},[626,4750,2214],{"class":782},[626,4752,786],{"class":703},[626,4754,704],{"class":703},[626,4756,2221],{"class":782},[626,4758,786],{"class":703},[626,4760,2226],{"class":2042},[626,4762,2257],{"class":703},[626,4764,4765],{"class":1488}," \u002F\u002F Only keep 10% of info logs\n",[626,4767,4768,4770,4772],{"class":628,"line":800},[626,4769,2235],{"class":782},[626,4771,786],{"class":703},[626,4773,2240],{"class":707},[626,4775,4776,4778,4780,4782,4784,4786],{"class":628,"line":919},[626,4777,2246],{"class":703},[626,4779,2249],{"class":782},[626,4781,786],{"class":703},[626,4783,2254],{"class":2042},[626,4785,2257],{"class":703},[626,4787,4788],{"class":1488},"              \u002F\u002F Always keep 4xx\u002F5xx\n",[626,4790,4791,4793,4795,4797,4799,4801],{"class":628,"line":953},[626,4792,2246],{"class":703},[626,4794,2268],{"class":782},[626,4796,786],{"class":703},[626,4798,2273],{"class":2042},[626,4800,2257],{"class":703},[626,4802,2278],{"class":1488},[626,4804,4805,4807,4809,4811,4813,4815,4817,4819],{"class":628,"line":1443},[626,4806,2246],{"class":703},[626,4808,2286],{"class":782},[626,4810,786],{"class":703},[626,4812,717],{"class":703},[626,4814,2293],{"class":635},[626,4816,794],{"class":703},[626,4818,2257],{"class":703},[626,4820,2300],{"class":1488},[626,4822,4823,4825],{"class":628,"line":1451},[626,4824,2306],{"class":707},[626,4826,797],{"class":703},[626,4828,4829],{"class":628,"line":1456},[626,4830,1831],{"class":703},[626,4832,4833],{"class":628,"line":1463},[626,4834,4835],{"class":1488},"  \u002F\u002F Custom: always keep premium user requests\n",[626,4837,4838,4840,4842,4844,4846,4848,4850],{"class":628,"line":1475},[626,4839,2439],{"class":770},[626,4841,786],{"class":703},[626,4843,2444],{"class":703},[626,4845,2448],{"class":2447},[626,4847,2451],{"class":703},[626,4849,867],{"class":739},[626,4851,870],{"class":703},[626,4853,4854,4856,4858,4860,4862,4864,4866,4868,4870,4872,4874,4876,4878,4880,4882,4884],{"class":628,"line":1485},[626,4855,2461],{"class":739},[626,4857,2464],{"class":707},[626,4859,767],{"class":703},[626,4861,2469],{"class":707},[626,4863,892],{"class":703},[626,4865,2474],{"class":707},[626,4867,892],{"class":703},[626,4869,2479],{"class":707},[626,4871,2482],{"class":699},[626,4873,704],{"class":703},[626,4875,2487],{"class":782},[626,4877,2490],{"class":703},[626,4879,2493],{"class":632},[626,4881,711],{"class":703},[626,4883,2498],{"class":703},[626,4885,2501],{"class":632},[626,4887,4888,4890,4892,4894,4896,4898,4900,4902,4904,4906,4908],{"class":628,"line":1492},[626,4889,2507],{"class":699},[626,4891,2444],{"class":782},[626,4893,2479],{"class":707},[626,4895,2514],{"class":703},[626,4897,2517],{"class":707},[626,4899,2520],{"class":782},[626,4901,2448],{"class":707},[626,4903,892],{"class":703},[626,4905,2527],{"class":707},[626,4907,767],{"class":703},[626,4909,2532],{"class":1145},[626,4911,4912],{"class":628,"line":1498},[626,4913,1831],{"class":703},[626,4915,4916,4918],{"class":628,"line":1510},[626,4917,764],{"class":703},[626,4919,805],{"class":707},[540,4921,4481,4922,4924],{},[544,4923,4638],{}," rules use OR logic: any match forces the event through regardless of head sampling.",[604,4926,365],{"id":4927},"middleware",[540,4929,4930,4931,1549,4934,4937,4938,4940],{},"Set ",[544,4932,4933],{},"x-request-id",[544,4935,4936],{},"x-evlog-start"," headers so ",[544,4939,550],{}," can correlate timing across the middleware -> handler chain:",[616,4942,4945],{"className":689,"code":4943,"filename":4944,"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,4946,4947,4966,4970,4985,4989,5002,5022],{"__ignoreMap":622},[626,4948,4949,4951,4953,4956,4958,4960,4962,4964],{"class":628,"line":629},[626,4950,700],{"class":699},[626,4952,704],{"class":703},[626,4954,4955],{"class":707}," evlogMiddleware",[626,4957,711],{"class":703},[626,4959,714],{"class":699},[626,4961,717],{"class":703},[626,4963,720],{"class":635},[626,4965,723],{"class":703},[626,4967,4968],{"class":628,"line":726},[626,4969,730],{"emptyLinePlaceholder":729},[626,4971,4972,4974,4976,4979,4981,4983],{"class":628,"line":733},[626,4973,736],{"class":699},[626,4975,740],{"class":739},[626,4977,4978],{"class":707}," proxy ",[626,4980,854],{"class":703},[626,4982,4955],{"class":770},[626,4984,884],{"class":707},[626,4986,4987],{"class":628,"line":779},[626,4988,730],{"emptyLinePlaceholder":729},[626,4990,4991,4993,4995,4998,5000],{"class":628,"line":800},[626,4992,736],{"class":699},[626,4994,740],{"class":739},[626,4996,4997],{"class":707}," config ",[626,4999,854],{"class":703},[626,5001,870],{"class":703},[626,5003,5004,5007,5009,5011,5013,5016,5018,5020],{"class":628,"line":919},[626,5005,5006],{"class":782},"  matcher",[626,5008,786],{"class":703},[626,5010,1804],{"class":707},[626,5012,794],{"class":703},[626,5014,5015],{"class":635},"\u002Fapi\u002F:path*",[626,5017,794],{"class":703},[626,5019,1824],{"class":707},[626,5021,797],{"class":703},[626,5023,5024],{"class":628,"line":953},[626,5025,3974],{"class":703},[978,5027,5028,5029,5032,5033,5035,5036,5038],{"color":980,"icon":13},"Older versions of Next.js use ",[544,5030,5031],{},"middleware.ts"," instead of ",[544,5034,4944],{},". The evlog middleware works with both, so just import from ",[544,5037,720],{}," regardless.",[604,5040,5042],{"id":5041},"server-actions","Server Actions",[540,5044,5045,5047],{},[544,5046,550],{}," also works with Server Actions. Wrap your action to get full request-scoped logging:",[616,5049,5052],{"className":689,"code":5050,"filename":5051,"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,5053,5054,5063,5085,5089,5120,5132,5184,5189],{"__ignoreMap":622},[626,5055,5056,5058,5061],{"class":628,"line":629},[626,5057,794],{"class":703},[626,5059,5060],{"class":635},"use server",[626,5062,723],{"class":703},[626,5064,5065,5067,5069,5071,5073,5075,5077,5079,5081,5083],{"class":628,"line":726},[626,5066,700],{"class":699},[626,5068,704],{"class":703},[626,5070,745],{"class":707},[626,5072,748],{"class":703},[626,5074,751],{"class":707},[626,5076,711],{"class":703},[626,5078,714],{"class":699},[626,5080,717],{"class":703},[626,5082,836],{"class":635},[626,5084,723],{"class":703},[626,5086,5087],{"class":628,"line":733},[626,5088,730],{"emptyLinePlaceholder":729},[626,5090,5091,5093,5095,5098,5100,5102,5104,5106,5108,5110,5112,5114,5116,5118],{"class":628,"line":779},[626,5092,736],{"class":699},[626,5094,740],{"class":739},[626,5096,5097],{"class":707}," checkout ",[626,5099,854],{"class":703},[626,5101,745],{"class":770},[626,5103,773],{"class":707},[626,5105,861],{"class":739},[626,5107,2444],{"class":703},[626,5109,4200],{"class":2447},[626,5111,786],{"class":703},[626,5113,4205],{"class":632},[626,5115,2451],{"class":703},[626,5117,867],{"class":739},[626,5119,870],{"class":703},[626,5121,5122,5124,5126,5128,5130],{"class":628,"line":800},[626,5123,875],{"class":739},[626,5125,756],{"class":707},[626,5127,767],{"class":703},[626,5129,751],{"class":770},[626,5131,884],{"class":782},[626,5133,5134,5136,5138,5140,5142,5144,5146,5148,5150,5153,5155,5157,5160,5162,5165,5167,5169,5171,5173,5176,5178,5180,5182],{"class":628,"line":919},[626,5135,889],{"class":707},[626,5137,892],{"class":703},[626,5139,895],{"class":770},[626,5141,773],{"class":782},[626,5143,900],{"class":703},[626,5145,903],{"class":782},[626,5147,786],{"class":703},[626,5149,717],{"class":703},[626,5151,5152],{"class":635},"checkout",[626,5154,794],{"class":703},[626,5156,748],{"class":703},[626,5158,5159],{"class":782}," cartId",[626,5161,786],{"class":703},[626,5163,5164],{"class":707}," formData",[626,5166,892],{"class":703},[626,5168,4293],{"class":770},[626,5170,773],{"class":782},[626,5172,794],{"class":703},[626,5174,5175],{"class":635},"cartId",[626,5177,794],{"class":703},[626,5179,2520],{"class":782},[626,5181,764],{"class":703},[626,5183,805],{"class":782},[626,5185,5186],{"class":628,"line":953},[626,5187,5188],{"class":1488},"  \u002F\u002F ...\n",[626,5190,5191,5193],{"class":628,"line":1443},[626,5192,764],{"class":703},[626,5194,805],{"class":707},[604,5196,5198],{"id":5197},"client-provider","Client Provider",[540,5200,5201,5202,5205],{},"Wrap your root layout with ",[544,5203,5204],{},"EvlogProvider"," to enable client-side logging and its drain:",[616,5207,5210],{"className":4148,"code":5208,"filename":5209,"language":4151,"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,5211,5212,5232,5236,5276,5283,5306,5315,5348,5358,5367,5376,5385,5390],{"__ignoreMap":622},[626,5213,5214,5216,5218,5221,5223,5225,5227,5230],{"class":628,"line":629},[626,5215,700],{"class":699},[626,5217,704],{"class":703},[626,5219,5220],{"class":707}," EvlogProvider",[626,5222,711],{"class":703},[626,5224,714],{"class":699},[626,5226,717],{"class":703},[626,5228,5229],{"class":635},"evlog\u002Fnext\u002Fclient",[626,5231,723],{"class":703},[626,5233,5234],{"class":628,"line":726},[626,5235,730],{"emptyLinePlaceholder":729},[626,5237,5238,5240,5243,5245,5248,5251,5254,5257,5259,5261,5263,5266,5268,5271,5274],{"class":628,"line":733},[626,5239,736],{"class":699},[626,5241,5242],{"class":699}," default",[626,5244,4192],{"class":739},[626,5246,5247],{"class":770}," Layout",[626,5249,5250],{"class":703},"({",[626,5252,5253],{"class":2447}," children",[626,5255,5256],{"class":703}," }:",[626,5258,704],{"class":703},[626,5260,5253],{"class":782},[626,5262,786],{"class":703},[626,5264,5265],{"class":632}," React",[626,5267,892],{"class":703},[626,5269,5270],{"class":632},"ReactNode",[626,5272,5273],{"class":703}," })",[626,5275,870],{"class":703},[626,5277,5278,5280],{"class":628,"line":779},[626,5279,922],{"class":699},[626,5281,5282],{"class":782}," (\n",[626,5284,5285,5288,5291,5294,5296,5298,5301,5303],{"class":628,"line":800},[626,5286,5287],{"class":703},"    \u003C",[626,5289,5290],{"class":782},"html",[626,5292,5293],{"class":739}," lang",[626,5295,854],{"class":703},[626,5297,3870],{"class":703},[626,5299,5300],{"class":635},"en",[626,5302,3870],{"class":703},[626,5304,5305],{"class":703},">\n",[626,5307,5308,5311,5313],{"class":628,"line":919},[626,5309,5310],{"class":703},"      \u003C",[626,5312,2954],{"class":782},[626,5314,5305],{"class":703},[626,5316,5317,5320,5322,5324,5326,5328,5330,5332,5335,5338,5341,5343,5345],{"class":628,"line":953},[626,5318,5319],{"class":703},"        \u003C",[626,5321,5204],{"class":632},[626,5323,2352],{"class":739},[626,5325,854],{"class":703},[626,5327,3870],{"class":703},[626,5329,791],{"class":635},[626,5331,3870],{"class":703},[626,5333,5334],{"class":739}," transport",[626,5336,5337],{"class":703},"={{",[626,5339,5340],{"class":782}," enabled",[626,5342,786],{"class":703},[626,5344,1146],{"class":1145},[626,5346,5347],{"class":703}," }}>\n",[626,5349,5350,5353,5356],{"class":628,"line":1443},[626,5351,5352],{"class":703},"          {",[626,5354,5355],{"class":707},"children",[626,5357,3974],{"class":703},[626,5359,5360,5363,5365],{"class":628,"line":1451},[626,5361,5362],{"class":703},"        \u003C\u002F",[626,5364,5204],{"class":632},[626,5366,5305],{"class":703},[626,5368,5369,5372,5374],{"class":628,"line":1456},[626,5370,5371],{"class":703},"      \u003C\u002F",[626,5373,2954],{"class":782},[626,5375,5305],{"class":703},[626,5377,5378,5381,5383],{"class":628,"line":1463},[626,5379,5380],{"class":703},"    \u003C\u002F",[626,5382,5290],{"class":782},[626,5384,5305],{"class":703},[626,5386,5387],{"class":628,"line":1475},[626,5388,5389],{"class":782},"  )\n",[626,5391,5392],{"class":628,"line":1485},[626,5393,3974],{"class":703},[604,5395,317],{"id":5396},"client-logging",[540,5398,3353,5399,5402],{},[544,5400,5401],{},"log"," in any client component. Identity is preserved across all logs and transported to the server:",[616,5404,5407],{"className":4148,"code":5405,"filename":5406,"language":4151,"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,5408,5409,5417,5445,5449,5485,5490,5503,5528,5541,5557,5561,5567,5624,5629,5637,5641],{"__ignoreMap":622},[626,5410,5411,5413,5415],{"class":628,"line":629},[626,5412,794],{"class":703},[626,5414,4160],{"class":635},[626,5416,723],{"class":703},[626,5418,5419,5421,5423,5425,5427,5430,5432,5435,5437,5439,5441,5443],{"class":628,"line":726},[626,5420,700],{"class":699},[626,5422,704],{"class":703},[626,5424,756],{"class":707},[626,5426,748],{"class":703},[626,5428,5429],{"class":707}," setIdentity",[626,5431,748],{"class":703},[626,5433,5434],{"class":707}," clearIdentity",[626,5436,711],{"class":703},[626,5438,714],{"class":699},[626,5440,717],{"class":703},[626,5442,5229],{"class":635},[626,5444,723],{"class":703},[626,5446,5447],{"class":628,"line":733},[626,5448,730],{"emptyLinePlaceholder":729},[626,5450,5451,5453,5455,5458,5460,5462,5464,5466,5468,5470,5472,5474,5476,5479,5481,5483],{"class":628,"line":779},[626,5452,736],{"class":699},[626,5454,4192],{"class":739},[626,5456,5457],{"class":770}," Dashboard",[626,5459,5250],{"class":703},[626,5461,2464],{"class":2447},[626,5463,5256],{"class":703},[626,5465,704],{"class":703},[626,5467,2464],{"class":782},[626,5469,786],{"class":703},[626,5471,704],{"class":703},[626,5473,2812],{"class":782},[626,5475,786],{"class":703},[626,5477,5478],{"class":632}," string",[626,5480,711],{"class":703},[626,5482,5273],{"class":703},[626,5484,870],{"class":703},[626,5486,5487],{"class":628,"line":800},[626,5488,5489],{"class":1488},"  \u002F\u002F Set identity once - all subsequent logs include it\n",[626,5491,5492,5495,5497,5499,5501],{"class":628,"line":919},[626,5493,5494],{"class":770},"  useEffect",[626,5496,773],{"class":782},[626,5498,1258],{"class":703},[626,5500,867],{"class":739},[626,5502,870],{"class":703},[626,5504,5505,5508,5510,5512,5515,5517,5519,5521,5524,5526],{"class":628,"line":953},[626,5506,5507],{"class":770},"    setIdentity",[626,5509,773],{"class":782},[626,5511,900],{"class":703},[626,5513,5514],{"class":782}," userId",[626,5516,786],{"class":703},[626,5518,2464],{"class":707},[626,5520,892],{"class":703},[626,5522,5523],{"class":707},"id",[626,5525,711],{"class":703},[626,5527,805],{"class":782},[626,5529,5530,5533,5535,5537,5539],{"class":628,"line":1443},[626,5531,5532],{"class":699},"    return",[626,5534,864],{"class":703},[626,5536,867],{"class":739},[626,5538,5434],{"class":770},[626,5540,884],{"class":782},[626,5542,5543,5546,5548,5550,5552,5554],{"class":628,"line":1451},[626,5544,5545],{"class":703},"  },",[626,5547,1804],{"class":782},[626,5549,2479],{"class":707},[626,5551,892],{"class":703},[626,5553,5523],{"class":707},[626,5555,5556],{"class":782},"])\n",[626,5558,5559],{"class":628,"line":1456},[626,5560,730],{"emptyLinePlaceholder":729},[626,5562,5563,5565],{"class":628,"line":1463},[626,5564,922],{"class":699},[626,5566,5282],{"class":782},[626,5568,5569,5571,5574,5577,5580,5582,5584,5586,5588,5590,5592,5594,5596,5598,5601,5603,5605,5608,5610,5612,5615,5617,5619,5621],{"class":628,"line":1475},[626,5570,5287],{"class":703},[626,5572,5573],{"class":782},"button",[626,5575,5576],{"class":739}," onClick",[626,5578,5579],{"class":703},"={()",[626,5581,867],{"class":739},[626,5583,756],{"class":707},[626,5585,892],{"class":703},[626,5587,980],{"class":770},[626,5589,773],{"class":707},[626,5591,900],{"class":703},[626,5593,903],{"class":782},[626,5595,786],{"class":703},[626,5597,717],{"class":703},[626,5599,5600],{"class":635},"export_clicked",[626,5602,794],{"class":703},[626,5604,748],{"class":703},[626,5606,5607],{"class":782}," format",[626,5609,786],{"class":703},[626,5611,717],{"class":703},[626,5613,5614],{"class":635},"csv",[626,5616,794],{"class":703},[626,5618,711],{"class":703},[626,5620,2451],{"class":707},[626,5622,5623],{"class":703},"}>\n",[626,5625,5626],{"class":628,"line":1485},[626,5627,5628],{"class":707},"      Export\n",[626,5630,5631,5633,5635],{"class":628,"line":1492},[626,5632,5380],{"class":703},[626,5634,5573],{"class":782},[626,5636,5305],{"class":703},[626,5638,5639],{"class":628,"line":1498},[626,5640,5389],{"class":782},[626,5642,5643],{"class":628,"line":1510},[626,5644,3974],{"class":703},[604,5646,5648],{"id":5647},"http-drain","HTTP drain",[540,5650,5651,5652,5654],{},"For advanced use cases, send structured ",[544,5653,2020],{}," events directly from the browser to a custom endpoint:",[616,5656,5659],{"className":689,"code":5657,"filename":5658,"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,5660,5661,5681,5685,5699,5721,5754,5760,5764,5771],{"__ignoreMap":622},[626,5662,5663,5665,5667,5670,5672,5674,5676,5679],{"class":628,"line":629},[626,5664,700],{"class":699},[626,5666,704],{"class":703},[626,5668,5669],{"class":707}," createHttpLogDrain",[626,5671,711],{"class":703},[626,5673,714],{"class":699},[626,5675,717],{"class":703},[626,5677,5678],{"class":635},"evlog\u002Fhttp",[626,5680,723],{"class":703},[626,5682,5683],{"class":628,"line":726},[626,5684,730],{"emptyLinePlaceholder":729},[626,5686,5687,5689,5691,5693,5695,5697],{"class":628,"line":733},[626,5688,1975],{"class":739},[626,5690,2075],{"class":707},[626,5692,854],{"class":703},[626,5694,5669],{"class":770},[626,5696,773],{"class":707},[626,5698,776],{"class":703},[626,5700,5701,5703,5705,5707,5710,5712,5714,5717,5719],{"class":628,"line":779},[626,5702,1251],{"class":782},[626,5704,786],{"class":703},[626,5706,704],{"class":703},[626,5708,5709],{"class":782}," endpoint",[626,5711,786],{"class":703},[626,5713,717],{"class":703},[626,5715,5716],{"class":635},"\u002Fapi\u002Fevlog\u002Fhttp-ingest",[626,5718,794],{"class":703},[626,5720,2229],{"class":703},[626,5722,5723,5726,5728,5730,5732,5734,5736,5738,5740,5742,5744,5746,5748,5750,5752],{"class":628,"line":800},[626,5724,5725],{"class":782},"  pipeline",[626,5727,786],{"class":703},[626,5729,704],{"class":703},[626,5731,2030],{"class":782},[626,5733,786],{"class":703},[626,5735,704],{"class":703},[626,5737,2037],{"class":782},[626,5739,786],{"class":703},[626,5741,2226],{"class":2042},[626,5743,748],{"class":703},[626,5745,2048],{"class":782},[626,5747,786],{"class":703},[626,5749,2053],{"class":2042},[626,5751,711],{"class":703},[626,5753,2229],{"class":703},[626,5755,5756,5758],{"class":628,"line":919},[626,5757,764],{"class":703},[626,5759,805],{"class":707},[626,5761,5762],{"class":628,"line":953},[626,5763,730],{"emptyLinePlaceholder":729},[626,5765,5766,5768],{"class":628,"line":1443},[626,5767,1022],{"class":770},[626,5769,5770],{"class":707},"(drainEvent)\n",[626,5772,5773,5776,5779,5781,5784],{"class":628,"line":1451},[626,5774,5775],{"class":699},"await",[626,5777,5778],{"class":707}," drain",[626,5780,892],{"class":703},[626,5782,5783],{"class":770},"flush",[626,5785,884],{"class":707},[540,5787,5788],{},"The server endpoint receives batched events:",[616,5790,5793],{"className":689,"code":5791,"filename":5792,"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,5794,5795,5818,5837,5842,5869],{"__ignoreMap":622},[626,5796,5797,5799,5801,5803,5806,5808,5810,5812,5814,5816],{"class":628,"line":629},[626,5798,736],{"class":699},[626,5800,3261],{"class":739},[626,5802,4192],{"class":739},[626,5804,5805],{"class":770}," POST",[626,5807,773],{"class":703},[626,5809,2736],{"class":2447},[626,5811,786],{"class":703},[626,5813,2741],{"class":632},[626,5815,2451],{"class":703},[626,5817,870],{"class":703},[626,5819,5820,5822,5825,5827,5829,5831,5833,5835],{"class":628,"line":726},[626,5821,875],{"class":739},[626,5823,5824],{"class":707}," events",[626,5826,767],{"class":703},[626,5828,1367],{"class":699},[626,5830,2773],{"class":707},[626,5832,892],{"class":703},[626,5834,930],{"class":770},[626,5836,884],{"class":782},[626,5838,5839],{"class":628,"line":733},[626,5840,5841],{"class":1488},"  \u002F\u002F Forward to your drain pipeline, Axiom, etc.\n",[626,5843,5844,5846,5849,5851,5853,5856,5858,5860,5862,5865,5867],{"class":628,"line":779},[626,5845,922],{"class":699},[626,5847,5848],{"class":703}," new",[626,5850,925],{"class":770},[626,5852,773],{"class":782},[626,5854,5855],{"class":703},"null,",[626,5857,704],{"class":703},[626,5859,2249],{"class":782},[626,5861,786],{"class":703},[626,5863,5864],{"class":2042}," 204",[626,5866,711],{"class":703},[626,5868,805],{"class":782},[626,5870,5871],{"class":628,"line":800},[626,5872,3974],{"class":703},[604,5874,5876],{"id":5875},"run-locally","Run Locally",[616,5878,5881],{"className":618,"code":5879,"filename":5880,"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,5882,5883,5894,5902,5909],{"__ignoreMap":622},[626,5884,5885,5888,5891],{"class":628,"line":629},[626,5886,5887],{"class":632},"git",[626,5889,5890],{"class":635}," clone",[626,5892,5893],{"class":635}," https:\u002F\u002Fgithub.com\u002Fhugorcd\u002Fevlog.git\n",[626,5895,5896,5899],{"class":628,"line":726},[626,5897,5898],{"class":770},"cd",[626,5900,5901],{"class":635}," evlog\u002Fexamples\u002Fnextjs\n",[626,5903,5904,5906],{"class":628,"line":733},[626,5905,620],{"class":632},[626,5907,5908],{"class":635}," install\n",[626,5910,5911,5913,5916],{"class":628,"line":779},[626,5912,620],{"class":632},[626,5914,5915],{"class":635}," run",[626,5917,5918],{"class":635}," dev\n",[540,5920,5921,5922,5926],{},"Open ",[593,5923,5924],{"href":5924,"rel":5925},"http:\u002F\u002Flocalhost:3000",[597]," to explore the example.",[5928,5929,5930],"card-group",{},[5931,5932,5936],"card",{"icon":5933,"title":5934,"to":5935},"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,5938,5940],{"id":5939},"next-steps","Next Steps",[540,5942,5943,5944,5946],{},"Deepen your ",[989,5945,235],{}," integration:",[565,5948,5949,5954,5959,5964],{},[568,5950,5951,5953],{},[593,5952,46],{"href":47},": Design comprehensive events with context layering",[568,5955,5956,5958],{},[593,5957,138],{"href":143},": Send logs to Axiom, Sentry, PostHog, and more",[568,5960,5961,5963],{},[593,5962,61],{"href":62},": Control log volume with head and tail sampling",[568,5965,5966,5968,5969,1562,5971,3364,5973,5975],{},[593,5967,51],{"href":52},": Throw errors with ",[544,5970,3360],{},[544,5972,3363],{},[544,5974,3367],{}," fields",[5977,5978,5979],"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":5981},[5982,5987,5993,5994,5995,5997,6000,6001,6002,6003,6004,6005,6006,6007,6008],{"id":606,"depth":726,"text":25,"children":5983},[5984,5985,5986],{"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":5988},[5989,5990,5991,5992],{"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":5996},"Background work (log.fork)",{"id":3349,"depth":726,"text":3350,"children":5998},[5999],{"id":4131,"depth":733,"text":4132},{"id":4462,"depth":726,"text":504},{"id":4690,"depth":726,"text":4691},{"id":4927,"depth":726,"text":365},{"id":5041,"depth":726,"text":5042},{"id":5197,"depth":726,"text":5198},{"id":5396,"depth":726,"text":317},{"id":5647,"depth":726,"text":5648},{"id":5875,"depth":726,"text":5876},{"id":5939,"depth":726,"text":5940},"Wide events, structured errors, drain pipeline, tail sampling, route-based services, error handling, and client-side logging in Next.js applications.","md",[6012],{"label":5934,"icon":5933,"to":5935,"color":6013,"variant":6014},"neutral","subtle",{},{"title":235,"icon":238},{"title":235,"description":6009},"S-kOw7W0x8jYfeDRv6DGNnRr7eH9YMageqfTPZ5waLk",[6020,6022],{"title":230,"path":231,"stem":232,"description":6021,"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":6023,"icon":243,"children":-1},"Automatic wide events, structured errors, drain adapters, enrichers, and tail sampling in SvelteKit applications.",1786792893758]