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