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