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