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