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