[{"data":1,"prerenderedAt":3415},["ShallowReactive",2],{"navigation_docs":3,"-integrate-frameworks-elysia":444,"-integrate-frameworks-elysia-surround":3410},[4,30,80,245,358,413],{"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,353],{"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":349,"path":350,"stem":351,"icon":352},"Enrichers","\u002Fuse-cases\u002Fenrichers","4.use-cases\u002F5.enrichers","i-lucide-sparkles",{"title":354,"path":355,"stem":356,"icon":357},"eve","\u002Fuse-cases\u002Feve","4.use-cases\u002F5.eve","i-custom-eve",{"title":359,"path":360,"stem":361,"children":362,"page":29},"Extend","\u002Fextend","5.extend",[363,367,372,377,382,386,390,394,398,403,408],{"title":36,"path":364,"stem":365,"icon":366},"\u002Fextend\u002Foverview","5.extend\u002F0.overview","i-lucide-blocks",{"title":368,"path":369,"stem":370,"icon":371},"Stream","\u002Fextend\u002Fstream","5.extend\u002F1.stream","i-lucide-radio-tower",{"title":373,"path":374,"stem":375,"icon":376},"Custom framework","\u002Fextend\u002Fcustom-framework","5.extend\u002F10.custom-framework","i-lucide-puzzle",{"title":378,"path":379,"stem":380,"icon":381},"FS reader","\u002Fextend\u002Ffs-reader","5.extend\u002F2.fs-reader","i-lucide-folder-search",{"title":345,"path":383,"stem":384,"icon":385},"\u002Fextend\u002Fconsumer-recipes","5.extend\u002F3.consumer-recipes","i-lucide-chef-hat",{"title":387,"path":388,"stem":389,"icon":366},"Plugins","\u002Fextend\u002Fplugins","5.extend\u002F4.plugins",{"title":391,"path":392,"stem":393,"icon":352},"Custom enrichers","\u002Fextend\u002Fcustom-enrichers","5.extend\u002F5.custom-enrichers",{"title":395,"path":396,"stem":397,"icon":64},"Tail sampling","\u002Fextend\u002Ftail-sampling","5.extend\u002F6.tail-sampling",{"title":399,"path":400,"stem":401,"icon":402},"Identity headers","\u002Fextend\u002Fidentity-headers","5.extend\u002F7.identity-headers","i-lucide-fingerprint",{"title":404,"path":405,"stem":406,"icon":407},"Custom drains","\u002Fextend\u002Fcustom-drains","5.extend\u002F8.custom-drains","i-lucide-share-2",{"title":409,"path":410,"stem":411,"icon":412},"Drain pipeline","\u002Fextend\u002Fdrain-pipeline","5.extend\u002F9.drain-pipeline","i-lucide-workflow",{"title":414,"path":415,"stem":416,"children":417,"page":29},"Reference","\u002Freference","6.reference",[418,423,426,431,435,440],{"title":419,"path":420,"stem":421,"icon":422},"Configuration","\u002Freference\u002Fconfiguration","6.reference\u002F1.configuration","i-lucide-settings",{"title":312,"path":424,"stem":425,"icon":315},"\u002Freference\u002Fperformance","6.reference\u002F2.performance",{"title":427,"path":428,"stem":429,"icon":430},"Vite Plugin","\u002Freference\u002Fvite-plugin","6.reference\u002F3.vite-plugin","i-custom-vite",{"title":432,"path":433,"stem":434,"icon":318},"Best Practices","\u002Freference\u002Fbest-practices","6.reference\u002F4.best-practices",{"title":436,"path":437,"stem":438,"icon":439},"vs Other Loggers","\u002Freference\u002Fvs-other-loggers","6.reference\u002F5.vs-other-loggers","i-lucide-scale",{"title":441,"path":442,"stem":443,"icon":352},"Agent Skills","\u002Freference\u002Fagent-skills","6.reference\u002F6.agent-skills",{"id":445,"title":212,"body":446,"description":3400,"extension":3401,"links":3402,"meta":3406,"navigation":3407,"path":213,"seo":3408,"stem":214,"__hash__":3409},"docs\u002F3.integrate\u002Fframeworks\u002F10.elysia.md",{"type":447,"value":448,"toc":3377},"minimark",[449,466,513,517,522,602,606,895,919,927,930,933,1218,1221,1285,1288,1294,1477,1570,1586,1593,1603,1776,1780,1801,2171,2174,2240,2243,2253,2257,2260,2428,2432,2439,2630,2641,2645,2651,2755,2759,2770,2913,2917,2923,2927,3081,3085,3092,3268,3277,3281,3323,3331,3340,3344,3373],[450,451,452,453,457,458,461,462,465],"p",{},"The ",[454,455,456],"code",{},"evlog\u002Felysia"," plugin auto-creates a request-scoped logger accessible via ",[454,459,460],{},"log"," in route context and ",[454,463,464],{},"useLogger()",", emitting a wide event when the response completes.",[467,468,471,474,499],"prompt",{":actions":469,"description":470,"icon":215},"[\"copy\",\"cursor\",\"windsurf\"]","Set up evlog in my Elysia app",[450,472,473],{},"Set up evlog in my Elysia app.",[475,476,477,481,484,487,490,493,496],"ul",{},[478,479,480],"li",{},"Install evlog: pnpm add evlog",[478,482,483],{},"Call initLogger({ env: { service: 'my-api' } }) at startup",[478,485,486],{},"Alternatively, use evlog\u002Fvite plugin in vite.config.ts for auto-init (replaces initLogger)",[478,488,489],{},"Import evlog from 'evlog\u002Felysia' and add .use(evlog()) to your Elysia app",[478,491,492],{},"Access the logger via the log property in route context destructuring",[478,494,495],{},"Use useLogger() from 'evlog\u002Felysia' to access the logger from anywhere",[478,497,498],{},"Optionally pass drain, enrich, include, and keep options to evlog()",[450,500,501,502,508,509],{},"Docs: ",[503,504,505],"a",{"href":505,"rel":506},"https:\u002F\u002Fwww.evlog.dev\u002Fintegrate\u002Fframeworks\u002Felysia",[507],"nofollow","\nAdapters: ",[503,510,511],{"href":511,"rel":512},"https:\u002F\u002Fwww.evlog.dev\u002Fintegrate\u002Fadapters\u002Foverview",[507],[514,515,25],"h2",{"id":516},"quick-start",[518,519,521],"h3",{"id":520},"_1-install","1. Install",[523,524,525,553,569,585],"code-group",{},[526,527,533],"pre",{"className":528,"code":529,"filename":530,"language":531,"meta":532,"style":532},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","pnpm add evlog elysia\n","pnpm","bash","",[454,534,535],{"__ignoreMap":532},[536,537,540,543,547,550],"span",{"class":538,"line":539},"line",1,[536,541,530],{"class":542},"sBMFI",[536,544,546],{"class":545},"sfazB"," add",[536,548,549],{"class":545}," evlog",[536,551,552],{"class":545}," elysia\n",[526,554,557],{"className":528,"code":555,"filename":556,"language":531,"meta":532,"style":532},"bun add evlog elysia\n","bun",[454,558,559],{"__ignoreMap":532},[536,560,561,563,565,567],{"class":538,"line":539},[536,562,556],{"class":542},[536,564,546],{"class":545},[536,566,549],{"class":545},[536,568,552],{"class":545},[526,570,573],{"className":528,"code":571,"filename":572,"language":531,"meta":532,"style":532},"yarn add evlog elysia\n","yarn",[454,574,575],{"__ignoreMap":532},[536,576,577,579,581,583],{"class":538,"line":539},[536,578,572],{"class":542},[536,580,546],{"class":545},[536,582,549],{"class":545},[536,584,552],{"class":545},[526,586,589],{"className":528,"code":587,"filename":588,"language":531,"meta":532,"style":532},"npm install evlog elysia\n","npm",[454,590,591],{"__ignoreMap":532},[536,592,593,595,598,600],{"class":538,"line":539},[536,594,588],{"class":542},[536,596,597],{"class":545}," install",[536,599,549],{"class":545},[536,601,552],{"class":545},[518,603,605],{"id":604},"_2-initialize-and-register-the-plugin","2. Initialize and register the plugin",[526,607,612],{"className":608,"code":609,"filename":610,"language":611,"meta":532,"style":532},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { Elysia } from 'elysia'\nimport { initLogger } from 'evlog'\nimport { evlog } from 'evlog\u002Felysia'\n\ninitLogger({\n  env: { service: 'my-api' },\n})\n\nconst app = new Elysia()\n  .use(evlog())\n  .get('\u002Fhealth', ({ log }) => {\n    log.set({ route: 'health' })\n    return { ok: true }\n  })\n  .listen(3000)\n","src\u002Findex.ts","typescript",[454,613,614,643,664,683,690,703,731,740,745,766,782,818,851,871,879],{"__ignoreMap":532},[536,615,616,620,624,628,631,634,637,640],{"class":538,"line":539},[536,617,619],{"class":618},"s7zQu","import",[536,621,623],{"class":622},"sMK4o"," {",[536,625,627],{"class":626},"sTEyZ"," Elysia",[536,629,630],{"class":622}," }",[536,632,633],{"class":618}," from",[536,635,636],{"class":622}," '",[536,638,639],{"class":545},"elysia",[536,641,642],{"class":622},"'\n",[536,644,646,648,650,653,655,657,659,662],{"class":538,"line":645},2,[536,647,619],{"class":618},[536,649,623],{"class":622},[536,651,652],{"class":626}," initLogger",[536,654,630],{"class":622},[536,656,633],{"class":618},[536,658,636],{"class":622},[536,660,661],{"class":545},"evlog",[536,663,642],{"class":622},[536,665,667,669,671,673,675,677,679,681],{"class":538,"line":666},3,[536,668,619],{"class":618},[536,670,623],{"class":622},[536,672,549],{"class":626},[536,674,630],{"class":622},[536,676,633],{"class":618},[536,678,636],{"class":622},[536,680,456],{"class":545},[536,682,642],{"class":622},[536,684,686],{"class":538,"line":685},4,[536,687,689],{"emptyLinePlaceholder":688},true,"\n",[536,691,693,697,700],{"class":538,"line":692},5,[536,694,696],{"class":695},"s2Zo4","initLogger",[536,698,699],{"class":626},"(",[536,701,702],{"class":622},"{\n",[536,704,706,710,713,715,718,720,722,725,728],{"class":538,"line":705},6,[536,707,709],{"class":708},"swJcz","  env",[536,711,712],{"class":622},":",[536,714,623],{"class":622},[536,716,717],{"class":708}," service",[536,719,712],{"class":622},[536,721,636],{"class":622},[536,723,724],{"class":545},"my-api",[536,726,727],{"class":622},"'",[536,729,730],{"class":622}," },\n",[536,732,734,737],{"class":538,"line":733},7,[536,735,736],{"class":622},"}",[536,738,739],{"class":626},")\n",[536,741,743],{"class":538,"line":742},8,[536,744,689],{"emptyLinePlaceholder":688},[536,746,748,752,755,758,761,763],{"class":538,"line":747},9,[536,749,751],{"class":750},"spNyl","const",[536,753,754],{"class":626}," app ",[536,756,757],{"class":622},"=",[536,759,760],{"class":622}," new",[536,762,627],{"class":695},[536,764,765],{"class":626},"()\n",[536,767,769,772,775,777,779],{"class":538,"line":768},10,[536,770,771],{"class":622},"  .",[536,773,774],{"class":695},"use",[536,776,699],{"class":626},[536,778,661],{"class":695},[536,780,781],{"class":626},"())\n",[536,783,785,787,790,792,794,797,799,802,805,809,812,815],{"class":538,"line":784},11,[536,786,771],{"class":622},[536,788,789],{"class":695},"get",[536,791,699],{"class":626},[536,793,727],{"class":622},[536,795,796],{"class":545},"\u002Fhealth",[536,798,727],{"class":622},[536,800,801],{"class":622},",",[536,803,804],{"class":622}," ({",[536,806,808],{"class":807},"sHdIc"," log",[536,810,811],{"class":622}," })",[536,813,814],{"class":750}," =>",[536,816,817],{"class":622}," {\n",[536,819,821,824,827,830,832,835,838,840,842,845,847,849],{"class":538,"line":820},12,[536,822,823],{"class":626},"    log",[536,825,826],{"class":622},".",[536,828,829],{"class":695},"set",[536,831,699],{"class":708},[536,833,834],{"class":622},"{",[536,836,837],{"class":708}," route",[536,839,712],{"class":622},[536,841,636],{"class":622},[536,843,844],{"class":545},"health",[536,846,727],{"class":622},[536,848,630],{"class":622},[536,850,739],{"class":708},[536,852,854,857,859,862,864,868],{"class":538,"line":853},13,[536,855,856],{"class":618},"    return",[536,858,623],{"class":622},[536,860,861],{"class":708}," ok",[536,863,712],{"class":622},[536,865,867],{"class":866},"sfNiH"," true",[536,869,870],{"class":622}," }\n",[536,872,874,877],{"class":538,"line":873},14,[536,875,876],{"class":622},"  }",[536,878,739],{"class":626},[536,880,882,884,887,889,893],{"class":538,"line":881},15,[536,883,771],{"class":622},[536,885,886],{"class":695},"listen",[536,888,699],{"class":626},[536,890,892],{"class":891},"sbssI","3000",[536,894,739],{"class":626},[896,897,899,903,904,910,911,914,915,918],"callout",{"color":898,"icon":430},"info",[900,901,902],"strong",{},"Using Vite?"," The ",[503,905,906,909],{"href":428},[454,907,908],{},"evlog\u002Fvite"," plugin"," replaces the ",[454,912,913],{},"initLogger()"," call with compile-time auto-initialization, strips ",[454,916,917],{},"log.debug()"," from production builds, and injects source locations.",[450,920,452,921,923,924,826],{},[454,922,460],{}," property is automatically available in all route handlers via Elysia's ",[454,925,926],{},"derive",[514,928,46],{"id":929},"wide-events",[450,931,932],{},"Build up context progressively through your handler. One request = one wide event:",[526,934,936],{"className":608,"code":935,"filename":610,"language":611,"meta":532,"style":532},"app.get('\u002Fusers\u002F:id', async ({ log, params }) => {\n  const userId = params.id\n\n  log.set({ user: { id: userId } })\n\n  const user = await db.findUser(userId)\n  log.set({ user: { name: user.name, plan: user.plan } })\n\n  const orders = await db.findOrders(userId)\n  log.set({ orders: { count: orders.length, totalRevenue: sum(orders) } })\n\n  return { user, orders }\n})\n",[454,937,938,976,994,998,1031,1035,1061,1111,1115,1139,1193,1197,1212],{"__ignoreMap":532},[536,939,940,943,945,947,949,951,954,956,958,961,963,965,967,970,972,974],{"class":538,"line":539},[536,941,942],{"class":626},"app",[536,944,826],{"class":622},[536,946,789],{"class":695},[536,948,699],{"class":626},[536,950,727],{"class":622},[536,952,953],{"class":545},"\u002Fusers\u002F:id",[536,955,727],{"class":622},[536,957,801],{"class":622},[536,959,960],{"class":750}," async",[536,962,804],{"class":622},[536,964,808],{"class":807},[536,966,801],{"class":622},[536,968,969],{"class":807}," params",[536,971,811],{"class":622},[536,973,814],{"class":750},[536,975,817],{"class":622},[536,977,978,981,984,987,989,991],{"class":538,"line":645},[536,979,980],{"class":750},"  const",[536,982,983],{"class":626}," userId",[536,985,986],{"class":622}," =",[536,988,969],{"class":626},[536,990,826],{"class":622},[536,992,993],{"class":626},"id\n",[536,995,996],{"class":538,"line":666},[536,997,689],{"emptyLinePlaceholder":688},[536,999,1000,1003,1005,1007,1009,1011,1014,1016,1018,1021,1023,1025,1027,1029],{"class":538,"line":685},[536,1001,1002],{"class":626},"  log",[536,1004,826],{"class":622},[536,1006,829],{"class":695},[536,1008,699],{"class":708},[536,1010,834],{"class":622},[536,1012,1013],{"class":708}," user",[536,1015,712],{"class":622},[536,1017,623],{"class":622},[536,1019,1020],{"class":708}," id",[536,1022,712],{"class":622},[536,1024,983],{"class":626},[536,1026,630],{"class":622},[536,1028,630],{"class":622},[536,1030,739],{"class":708},[536,1032,1033],{"class":538,"line":692},[536,1034,689],{"emptyLinePlaceholder":688},[536,1036,1037,1039,1041,1043,1046,1049,1051,1054,1056,1059],{"class":538,"line":705},[536,1038,980],{"class":750},[536,1040,1013],{"class":626},[536,1042,986],{"class":622},[536,1044,1045],{"class":618}," await",[536,1047,1048],{"class":626}," db",[536,1050,826],{"class":622},[536,1052,1053],{"class":695},"findUser",[536,1055,699],{"class":708},[536,1057,1058],{"class":626},"userId",[536,1060,739],{"class":708},[536,1062,1063,1065,1067,1069,1071,1073,1075,1077,1079,1082,1084,1086,1088,1091,1093,1096,1098,1100,1102,1105,1107,1109],{"class":538,"line":733},[536,1064,1002],{"class":626},[536,1066,826],{"class":622},[536,1068,829],{"class":695},[536,1070,699],{"class":708},[536,1072,834],{"class":622},[536,1074,1013],{"class":708},[536,1076,712],{"class":622},[536,1078,623],{"class":622},[536,1080,1081],{"class":708}," name",[536,1083,712],{"class":622},[536,1085,1013],{"class":626},[536,1087,826],{"class":622},[536,1089,1090],{"class":626},"name",[536,1092,801],{"class":622},[536,1094,1095],{"class":708}," plan",[536,1097,712],{"class":622},[536,1099,1013],{"class":626},[536,1101,826],{"class":622},[536,1103,1104],{"class":626},"plan",[536,1106,630],{"class":622},[536,1108,630],{"class":622},[536,1110,739],{"class":708},[536,1112,1113],{"class":538,"line":742},[536,1114,689],{"emptyLinePlaceholder":688},[536,1116,1117,1119,1122,1124,1126,1128,1130,1133,1135,1137],{"class":538,"line":747},[536,1118,980],{"class":750},[536,1120,1121],{"class":626}," orders",[536,1123,986],{"class":622},[536,1125,1045],{"class":618},[536,1127,1048],{"class":626},[536,1129,826],{"class":622},[536,1131,1132],{"class":695},"findOrders",[536,1134,699],{"class":708},[536,1136,1058],{"class":626},[536,1138,739],{"class":708},[536,1140,1141,1143,1145,1147,1149,1151,1153,1155,1157,1160,1162,1164,1166,1169,1171,1174,1176,1179,1181,1184,1187,1189,1191],{"class":538,"line":768},[536,1142,1002],{"class":626},[536,1144,826],{"class":622},[536,1146,829],{"class":695},[536,1148,699],{"class":708},[536,1150,834],{"class":622},[536,1152,1121],{"class":708},[536,1154,712],{"class":622},[536,1156,623],{"class":622},[536,1158,1159],{"class":708}," count",[536,1161,712],{"class":622},[536,1163,1121],{"class":626},[536,1165,826],{"class":622},[536,1167,1168],{"class":626},"length",[536,1170,801],{"class":622},[536,1172,1173],{"class":708}," totalRevenue",[536,1175,712],{"class":622},[536,1177,1178],{"class":695}," sum",[536,1180,699],{"class":708},[536,1182,1183],{"class":626},"orders",[536,1185,1186],{"class":708},") ",[536,1188,736],{"class":622},[536,1190,630],{"class":622},[536,1192,739],{"class":708},[536,1194,1195],{"class":538,"line":784},[536,1196,689],{"emptyLinePlaceholder":688},[536,1198,1199,1202,1204,1206,1208,1210],{"class":538,"line":820},[536,1200,1201],{"class":618},"  return",[536,1203,623],{"class":622},[536,1205,1013],{"class":626},[536,1207,801],{"class":622},[536,1209,1121],{"class":626},[536,1211,870],{"class":622},[536,1213,1214,1216],{"class":538,"line":853},[536,1215,736],{"class":622},[536,1217,739],{"class":626},[450,1219,1220],{},"All fields are merged into a single wide event emitted when the request completes:",[526,1222,1225],{"className":528,"code":1223,"filename":1224,"language":531,"meta":532,"style":532},"14:58:15 INFO [my-api] GET \u002Fusers\u002Fusr_123 200 in 12ms\n  ├─ orders: count=2 totalRevenue=6298\n  ├─ user: id=usr_123 name=Alice plan=pro\n  └─ requestId: 4a8ff3a8-...\n","Terminal output",[454,1226,1227,1238,1258,1274],{"__ignoreMap":532},[536,1228,1229,1232,1235],{"class":538,"line":539},[536,1230,1231],{"class":542},"14:58:15",[536,1233,1234],{"class":545}," INFO",[536,1236,1237],{"class":626}," [my-api] GET \u002Fusers\u002Fusr_123 200 in 12ms\n",[536,1239,1240,1243,1246,1249,1252,1255],{"class":538,"line":645},[536,1241,1242],{"class":542},"  ├─",[536,1244,1245],{"class":545}," orders:",[536,1247,1248],{"class":545}," count=",[536,1250,1251],{"class":891},"2",[536,1253,1254],{"class":545}," totalRevenue=",[536,1256,1257],{"class":891},"6298\n",[536,1259,1260,1262,1265,1268,1271],{"class":538,"line":666},[536,1261,1242],{"class":542},[536,1263,1264],{"class":545}," user:",[536,1266,1267],{"class":545}," id=usr_123",[536,1269,1270],{"class":545}," name=Alice",[536,1272,1273],{"class":545}," plan=pro\n",[536,1275,1276,1279,1282],{"class":538,"line":685},[536,1277,1278],{"class":542},"  └─",[536,1280,1281],{"class":545}," requestId:",[536,1283,1284],{"class":545}," 4a8ff3a8-...\n",[514,1286,464],{"id":1287},"uselogger",[450,1289,1290,1291,1293],{},"Use ",[454,1292,464],{}," to access the request-scoped logger from anywhere in the call stack without passing the context through your service layer:",[526,1295,1298],{"className":608,"code":1296,"filename":1297,"language":611,"meta":532,"style":532},"import { useLogger } from 'evlog\u002Felysia'\n\nexport async function findUser(id: string) {\n  const log = useLogger()\n  log.set({ user: { id } })\n\n  const user = await db.findUser(id)\n  log.set({ user: { name: user.name, plan: user.plan } })\n\n  return user\n}\n","src\u002Fservices\u002Fuser.ts",[454,1299,1300,1319,1323,1351,1363,1389,1393,1415,1461,1465,1472],{"__ignoreMap":532},[536,1301,1302,1304,1306,1309,1311,1313,1315,1317],{"class":538,"line":539},[536,1303,619],{"class":618},[536,1305,623],{"class":622},[536,1307,1308],{"class":626}," useLogger",[536,1310,630],{"class":622},[536,1312,633],{"class":618},[536,1314,636],{"class":622},[536,1316,456],{"class":545},[536,1318,642],{"class":622},[536,1320,1321],{"class":538,"line":645},[536,1322,689],{"emptyLinePlaceholder":688},[536,1324,1325,1328,1330,1333,1336,1338,1341,1343,1346,1349],{"class":538,"line":666},[536,1326,1327],{"class":618},"export",[536,1329,960],{"class":750},[536,1331,1332],{"class":750}," function",[536,1334,1335],{"class":695}," findUser",[536,1337,699],{"class":622},[536,1339,1340],{"class":807},"id",[536,1342,712],{"class":622},[536,1344,1345],{"class":542}," string",[536,1347,1348],{"class":622},")",[536,1350,817],{"class":622},[536,1352,1353,1355,1357,1359,1361],{"class":538,"line":685},[536,1354,980],{"class":750},[536,1356,808],{"class":626},[536,1358,986],{"class":622},[536,1360,1308],{"class":695},[536,1362,765],{"class":708},[536,1364,1365,1367,1369,1371,1373,1375,1377,1379,1381,1383,1385,1387],{"class":538,"line":692},[536,1366,1002],{"class":626},[536,1368,826],{"class":622},[536,1370,829],{"class":695},[536,1372,699],{"class":708},[536,1374,834],{"class":622},[536,1376,1013],{"class":708},[536,1378,712],{"class":622},[536,1380,623],{"class":622},[536,1382,1020],{"class":626},[536,1384,630],{"class":622},[536,1386,630],{"class":622},[536,1388,739],{"class":708},[536,1390,1391],{"class":538,"line":705},[536,1392,689],{"emptyLinePlaceholder":688},[536,1394,1395,1397,1399,1401,1403,1405,1407,1409,1411,1413],{"class":538,"line":733},[536,1396,980],{"class":750},[536,1398,1013],{"class":626},[536,1400,986],{"class":622},[536,1402,1045],{"class":618},[536,1404,1048],{"class":626},[536,1406,826],{"class":622},[536,1408,1053],{"class":695},[536,1410,699],{"class":708},[536,1412,1340],{"class":626},[536,1414,739],{"class":708},[536,1416,1417,1419,1421,1423,1425,1427,1429,1431,1433,1435,1437,1439,1441,1443,1445,1447,1449,1451,1453,1455,1457,1459],{"class":538,"line":742},[536,1418,1002],{"class":626},[536,1420,826],{"class":622},[536,1422,829],{"class":695},[536,1424,699],{"class":708},[536,1426,834],{"class":622},[536,1428,1013],{"class":708},[536,1430,712],{"class":622},[536,1432,623],{"class":622},[536,1434,1081],{"class":708},[536,1436,712],{"class":622},[536,1438,1013],{"class":626},[536,1440,826],{"class":622},[536,1442,1090],{"class":626},[536,1444,801],{"class":622},[536,1446,1095],{"class":708},[536,1448,712],{"class":622},[536,1450,1013],{"class":626},[536,1452,826],{"class":622},[536,1454,1104],{"class":626},[536,1456,630],{"class":622},[536,1458,630],{"class":622},[536,1460,739],{"class":708},[536,1462,1463],{"class":538,"line":747},[536,1464,689],{"emptyLinePlaceholder":688},[536,1466,1467,1469],{"class":538,"line":768},[536,1468,1201],{"class":618},[536,1470,1471],{"class":626}," user\n",[536,1473,1474],{"class":538,"line":784},[536,1475,1476],{"class":622},"}\n",[526,1478,1480],{"className":608,"code":1479,"filename":610,"language":611,"meta":532,"style":532},"import { findUser } from '.\u002Fservices\u002Fuser'\n\napp.get('\u002Fusers\u002F:id', async ({ params }) => {\n  const user = await findUser(params.id)\n  return user\n})\n",[454,1481,1482,1501,1505,1535,1558,1564],{"__ignoreMap":532},[536,1483,1484,1486,1488,1490,1492,1494,1496,1499],{"class":538,"line":539},[536,1485,619],{"class":618},[536,1487,623],{"class":622},[536,1489,1335],{"class":626},[536,1491,630],{"class":622},[536,1493,633],{"class":618},[536,1495,636],{"class":622},[536,1497,1498],{"class":545},".\u002Fservices\u002Fuser",[536,1500,642],{"class":622},[536,1502,1503],{"class":538,"line":645},[536,1504,689],{"emptyLinePlaceholder":688},[536,1506,1507,1509,1511,1513,1515,1517,1519,1521,1523,1525,1527,1529,1531,1533],{"class":538,"line":666},[536,1508,942],{"class":626},[536,1510,826],{"class":622},[536,1512,789],{"class":695},[536,1514,699],{"class":626},[536,1516,727],{"class":622},[536,1518,953],{"class":545},[536,1520,727],{"class":622},[536,1522,801],{"class":622},[536,1524,960],{"class":750},[536,1526,804],{"class":622},[536,1528,969],{"class":807},[536,1530,811],{"class":622},[536,1532,814],{"class":750},[536,1534,817],{"class":622},[536,1536,1537,1539,1541,1543,1545,1547,1549,1552,1554,1556],{"class":538,"line":685},[536,1538,980],{"class":750},[536,1540,1013],{"class":626},[536,1542,986],{"class":622},[536,1544,1045],{"class":618},[536,1546,1335],{"class":695},[536,1548,699],{"class":708},[536,1550,1551],{"class":626},"params",[536,1553,826],{"class":622},[536,1555,1340],{"class":626},[536,1557,739],{"class":708},[536,1559,1560,1562],{"class":538,"line":692},[536,1561,1201],{"class":618},[536,1563,1471],{"class":626},[536,1565,1566,1568],{"class":538,"line":705},[536,1567,736],{"class":622},[536,1569,739],{"class":626},[450,1571,1572,1573,1575,1576,1578,1579,1581,1582,1585],{},"Both ",[454,1574,460],{}," in context and ",[454,1577,464],{}," return the same logger instance. ",[454,1580,464],{}," uses ",[454,1583,1584],{},"AsyncLocalStorage"," to propagate the logger across async boundaries.",[514,1587,1589,1590,1348],{"id":1588},"background-work-logfork","Background work (",[454,1591,1592],{},"log.fork",[450,1594,1290,1595,1598,1599,826],{},[454,1596,1597],{},"log.fork(label, fn)"," from the route context for a child wide event. See ",[503,1600,1602],{"href":1601},"\u002Flearn\u002Fwide-events#after-emit-sealing-and-background-work","Wide events — After emit",[526,1604,1606],{"className":608,"code":1605,"filename":610,"language":611,"meta":532,"style":532},"import { evlog, useLogger } from 'evlog\u002Felysia'\n\napp\n  .use(evlog())\n  .post('\u002Forders', ({ log }) => {\n    log.fork!('ship', async () => {\n      const l = useLogger()\n      l.set({ shipped: true })\n    })\n    return { ok: true }\n  })\n",[454,1607,1608,1630,1634,1639,1651,1679,1711,1725,1749,1756,1770],{"__ignoreMap":532},[536,1609,1610,1612,1614,1616,1618,1620,1622,1624,1626,1628],{"class":538,"line":539},[536,1611,619],{"class":618},[536,1613,623],{"class":622},[536,1615,549],{"class":626},[536,1617,801],{"class":622},[536,1619,1308],{"class":626},[536,1621,630],{"class":622},[536,1623,633],{"class":618},[536,1625,636],{"class":622},[536,1627,456],{"class":545},[536,1629,642],{"class":622},[536,1631,1632],{"class":538,"line":645},[536,1633,689],{"emptyLinePlaceholder":688},[536,1635,1636],{"class":538,"line":666},[536,1637,1638],{"class":626},"app\n",[536,1640,1641,1643,1645,1647,1649],{"class":538,"line":685},[536,1642,771],{"class":622},[536,1644,774],{"class":695},[536,1646,699],{"class":626},[536,1648,661],{"class":695},[536,1650,781],{"class":626},[536,1652,1653,1655,1658,1660,1662,1665,1667,1669,1671,1673,1675,1677],{"class":538,"line":692},[536,1654,771],{"class":622},[536,1656,1657],{"class":695},"post",[536,1659,699],{"class":626},[536,1661,727],{"class":622},[536,1663,1664],{"class":545},"\u002Forders",[536,1666,727],{"class":622},[536,1668,801],{"class":622},[536,1670,804],{"class":622},[536,1672,808],{"class":807},[536,1674,811],{"class":622},[536,1676,814],{"class":750},[536,1678,817],{"class":622},[536,1680,1681,1683,1685,1688,1691,1693,1695,1698,1700,1702,1704,1707,1709],{"class":538,"line":705},[536,1682,823],{"class":626},[536,1684,826],{"class":622},[536,1686,1687],{"class":695},"fork",[536,1689,1690],{"class":622},"!",[536,1692,699],{"class":708},[536,1694,727],{"class":622},[536,1696,1697],{"class":545},"ship",[536,1699,727],{"class":622},[536,1701,801],{"class":622},[536,1703,960],{"class":750},[536,1705,1706],{"class":622}," ()",[536,1708,814],{"class":750},[536,1710,817],{"class":622},[536,1712,1713,1716,1719,1721,1723],{"class":538,"line":733},[536,1714,1715],{"class":750},"      const",[536,1717,1718],{"class":626}," l",[536,1720,986],{"class":622},[536,1722,1308],{"class":695},[536,1724,765],{"class":708},[536,1726,1727,1730,1732,1734,1736,1738,1741,1743,1745,1747],{"class":538,"line":742},[536,1728,1729],{"class":626},"      l",[536,1731,826],{"class":622},[536,1733,829],{"class":695},[536,1735,699],{"class":708},[536,1737,834],{"class":622},[536,1739,1740],{"class":708}," shipped",[536,1742,712],{"class":622},[536,1744,867],{"class":866},[536,1746,630],{"class":622},[536,1748,739],{"class":708},[536,1750,1751,1754],{"class":538,"line":747},[536,1752,1753],{"class":622},"    }",[536,1755,739],{"class":708},[536,1757,1758,1760,1762,1764,1766,1768],{"class":538,"line":768},[536,1759,856],{"class":618},[536,1761,623],{"class":622},[536,1763,861],{"class":708},[536,1765,712],{"class":622},[536,1767,867],{"class":866},[536,1769,870],{"class":622},[536,1771,1772,1774],{"class":538,"line":784},[536,1773,876],{"class":622},[536,1775,739],{"class":626},[514,1777,1779],{"id":1778},"error-handling","Error Handling",[450,1781,1290,1782,1785,1786,1789,1790,1793,1794,1797,1798,712],{},[454,1783,1784],{},"createError"," for structured errors with ",[454,1787,1788],{},"why",", ",[454,1791,1792],{},"fix",", and ",[454,1795,1796],{},"link"," fields. Elysia captures thrown errors via ",[454,1799,1800],{},"onError",[526,1802,1804],{"className":608,"code":1803,"filename":610,"language":611,"meta":532,"style":532},"import { createError, parseError } from 'evlog'\n\napp\n  .use(evlog())\n  .get('\u002Fcheckout', ({ log }) => {\n    log.set({ cart: { items: 3, total: 9999 } })\n\n    throw createError({\n      message: 'Payment failed',\n      status: 402,\n      why: 'Card declined by issuer',\n      fix: 'Try a different payment method',\n      link: 'https:\u002F\u002Fdocs.example.com\u002Fpayments\u002Fdeclined',\n    })\n  })\n  .onError(({ error, set }) => {\n    const parsed = parseError(error)\n    set.status = parsed.status\n    return {\n      message: parsed.message,\n      why: parsed.why,\n      fix: parsed.fix,\n      link: parsed.link,\n    }\n  })\n",[454,1805,1806,1830,1834,1838,1850,1877,1920,1924,1935,1952,1964,1980,1996,2012,2018,2024,2050,2070,2090,2097,2113,2128,2143,2158,2164],{"__ignoreMap":532},[536,1807,1808,1810,1812,1815,1817,1820,1822,1824,1826,1828],{"class":538,"line":539},[536,1809,619],{"class":618},[536,1811,623],{"class":622},[536,1813,1814],{"class":626}," createError",[536,1816,801],{"class":622},[536,1818,1819],{"class":626}," parseError",[536,1821,630],{"class":622},[536,1823,633],{"class":618},[536,1825,636],{"class":622},[536,1827,661],{"class":545},[536,1829,642],{"class":622},[536,1831,1832],{"class":538,"line":645},[536,1833,689],{"emptyLinePlaceholder":688},[536,1835,1836],{"class":538,"line":666},[536,1837,1638],{"class":626},[536,1839,1840,1842,1844,1846,1848],{"class":538,"line":685},[536,1841,771],{"class":622},[536,1843,774],{"class":695},[536,1845,699],{"class":626},[536,1847,661],{"class":695},[536,1849,781],{"class":626},[536,1851,1852,1854,1856,1858,1860,1863,1865,1867,1869,1871,1873,1875],{"class":538,"line":692},[536,1853,771],{"class":622},[536,1855,789],{"class":695},[536,1857,699],{"class":626},[536,1859,727],{"class":622},[536,1861,1862],{"class":545},"\u002Fcheckout",[536,1864,727],{"class":622},[536,1866,801],{"class":622},[536,1868,804],{"class":622},[536,1870,808],{"class":807},[536,1872,811],{"class":622},[536,1874,814],{"class":750},[536,1876,817],{"class":622},[536,1878,1879,1881,1883,1885,1887,1889,1892,1894,1896,1899,1901,1904,1906,1909,1911,1914,1916,1918],{"class":538,"line":705},[536,1880,823],{"class":626},[536,1882,826],{"class":622},[536,1884,829],{"class":695},[536,1886,699],{"class":708},[536,1888,834],{"class":622},[536,1890,1891],{"class":708}," cart",[536,1893,712],{"class":622},[536,1895,623],{"class":622},[536,1897,1898],{"class":708}," items",[536,1900,712],{"class":622},[536,1902,1903],{"class":891}," 3",[536,1905,801],{"class":622},[536,1907,1908],{"class":708}," total",[536,1910,712],{"class":622},[536,1912,1913],{"class":891}," 9999",[536,1915,630],{"class":622},[536,1917,630],{"class":622},[536,1919,739],{"class":708},[536,1921,1922],{"class":538,"line":733},[536,1923,689],{"emptyLinePlaceholder":688},[536,1925,1926,1929,1931,1933],{"class":538,"line":742},[536,1927,1928],{"class":618},"    throw",[536,1930,1814],{"class":695},[536,1932,699],{"class":708},[536,1934,702],{"class":622},[536,1936,1937,1940,1942,1944,1947,1949],{"class":538,"line":747},[536,1938,1939],{"class":708},"      message",[536,1941,712],{"class":622},[536,1943,636],{"class":622},[536,1945,1946],{"class":545},"Payment failed",[536,1948,727],{"class":622},[536,1950,1951],{"class":622},",\n",[536,1953,1954,1957,1959,1962],{"class":538,"line":768},[536,1955,1956],{"class":708},"      status",[536,1958,712],{"class":622},[536,1960,1961],{"class":891}," 402",[536,1963,1951],{"class":622},[536,1965,1966,1969,1971,1973,1976,1978],{"class":538,"line":784},[536,1967,1968],{"class":708},"      why",[536,1970,712],{"class":622},[536,1972,636],{"class":622},[536,1974,1975],{"class":545},"Card declined by issuer",[536,1977,727],{"class":622},[536,1979,1951],{"class":622},[536,1981,1982,1985,1987,1989,1992,1994],{"class":538,"line":820},[536,1983,1984],{"class":708},"      fix",[536,1986,712],{"class":622},[536,1988,636],{"class":622},[536,1990,1991],{"class":545},"Try a different payment method",[536,1993,727],{"class":622},[536,1995,1951],{"class":622},[536,1997,1998,2001,2003,2005,2008,2010],{"class":538,"line":853},[536,1999,2000],{"class":708},"      link",[536,2002,712],{"class":622},[536,2004,636],{"class":622},[536,2006,2007],{"class":545},"https:\u002F\u002Fdocs.example.com\u002Fpayments\u002Fdeclined",[536,2009,727],{"class":622},[536,2011,1951],{"class":622},[536,2013,2014,2016],{"class":538,"line":873},[536,2015,1753],{"class":622},[536,2017,739],{"class":708},[536,2019,2020,2022],{"class":538,"line":881},[536,2021,876],{"class":622},[536,2023,739],{"class":626},[536,2025,2027,2029,2031,2033,2036,2039,2041,2044,2046,2048],{"class":538,"line":2026},16,[536,2028,771],{"class":622},[536,2030,1800],{"class":695},[536,2032,699],{"class":626},[536,2034,2035],{"class":622},"({",[536,2037,2038],{"class":807}," error",[536,2040,801],{"class":622},[536,2042,2043],{"class":807}," set",[536,2045,811],{"class":622},[536,2047,814],{"class":750},[536,2049,817],{"class":622},[536,2051,2053,2056,2059,2061,2063,2065,2068],{"class":538,"line":2052},17,[536,2054,2055],{"class":750},"    const",[536,2057,2058],{"class":626}," parsed",[536,2060,986],{"class":622},[536,2062,1819],{"class":695},[536,2064,699],{"class":708},[536,2066,2067],{"class":626},"error",[536,2069,739],{"class":708},[536,2071,2073,2076,2078,2081,2083,2085,2087],{"class":538,"line":2072},18,[536,2074,2075],{"class":626},"    set",[536,2077,826],{"class":622},[536,2079,2080],{"class":626},"status",[536,2082,986],{"class":622},[536,2084,2058],{"class":626},[536,2086,826],{"class":622},[536,2088,2089],{"class":626},"status\n",[536,2091,2093,2095],{"class":538,"line":2092},19,[536,2094,856],{"class":618},[536,2096,817],{"class":622},[536,2098,2100,2102,2104,2106,2108,2111],{"class":538,"line":2099},20,[536,2101,1939],{"class":708},[536,2103,712],{"class":622},[536,2105,2058],{"class":626},[536,2107,826],{"class":622},[536,2109,2110],{"class":626},"message",[536,2112,1951],{"class":622},[536,2114,2116,2118,2120,2122,2124,2126],{"class":538,"line":2115},21,[536,2117,1968],{"class":708},[536,2119,712],{"class":622},[536,2121,2058],{"class":626},[536,2123,826],{"class":622},[536,2125,1788],{"class":626},[536,2127,1951],{"class":622},[536,2129,2131,2133,2135,2137,2139,2141],{"class":538,"line":2130},22,[536,2132,1984],{"class":708},[536,2134,712],{"class":622},[536,2136,2058],{"class":626},[536,2138,826],{"class":622},[536,2140,1792],{"class":626},[536,2142,1951],{"class":622},[536,2144,2146,2148,2150,2152,2154,2156],{"class":538,"line":2145},23,[536,2147,2000],{"class":708},[536,2149,712],{"class":622},[536,2151,2058],{"class":626},[536,2153,826],{"class":622},[536,2155,1796],{"class":626},[536,2157,1951],{"class":622},[536,2159,2161],{"class":538,"line":2160},24,[536,2162,2163],{"class":622},"    }\n",[536,2165,2167,2169],{"class":538,"line":2166},25,[536,2168,876],{"class":622},[536,2170,739],{"class":626},[450,2172,2173],{},"The error is captured and logged with both the custom context and structured error fields:",[526,2175,2177],{"className":528,"code":2176,"filename":1224,"language":531,"meta":532,"style":532},"14:58:20 ERROR [my-api] GET \u002Fcheckout 402 in 3ms\n  ├─ error: name=EvlogError message=Payment failed status=402\n  ├─ cart: items=3 total=9999\n  └─ requestId: 880a50ac-...\n",[454,2178,2179,2190,2212,2231],{"__ignoreMap":532},[536,2180,2181,2184,2187],{"class":538,"line":539},[536,2182,2183],{"class":542},"14:58:20",[536,2185,2186],{"class":545}," ERROR",[536,2188,2189],{"class":626}," [my-api] GET \u002Fcheckout 402 in 3ms\n",[536,2191,2192,2194,2197,2200,2203,2206,2209],{"class":538,"line":645},[536,2193,1242],{"class":542},[536,2195,2196],{"class":545}," error:",[536,2198,2199],{"class":545}," name=EvlogError",[536,2201,2202],{"class":545}," message=Payment",[536,2204,2205],{"class":545}," failed",[536,2207,2208],{"class":545}," status=",[536,2210,2211],{"class":891},"402\n",[536,2213,2214,2216,2219,2222,2225,2228],{"class":538,"line":666},[536,2215,1242],{"class":542},[536,2217,2218],{"class":545}," cart:",[536,2220,2221],{"class":545}," items=",[536,2223,2224],{"class":891},"3",[536,2226,2227],{"class":545}," total=",[536,2229,2230],{"class":891},"9999\n",[536,2232,2233,2235,2237],{"class":538,"line":685},[536,2234,1278],{"class":542},[536,2236,1281],{"class":545},[536,2238,2239],{"class":545}," 880a50ac-...\n",[514,2241,419],{"id":2242},"configuration",[450,2244,2245,2246,2249,2250,2252],{},"See the ",[503,2247,2248],{"href":420},"Configuration reference"," for all available options (",[454,2251,696],{},", middleware options, sampling, silent mode, etc.).",[514,2254,2256],{"id":2255},"drain-enrichers","Drain & Enrichers",[450,2258,2259],{},"Configure drain adapters and enrichers directly in the plugin options:",[526,2261,2263],{"className":608,"code":2262,"filename":610,"language":611,"meta":532,"style":532},"import { createAxiomDrain } from 'evlog\u002Faxiom'\nimport { createUserAgentEnricher } from 'evlog\u002Fenrichers'\n\nconst userAgent = createUserAgentEnricher()\n\napp.use(evlog({\n  drain: createAxiomDrain(),\n  enrich: (ctx) => {\n    userAgent(ctx)\n    ctx.event.region = process.env.FLY_REGION\n  },\n}))\n",[454,2264,2265,2285,2305,2309,2322,2326,2342,2356,2375,2386,2416,2421],{"__ignoreMap":532},[536,2266,2267,2269,2271,2274,2276,2278,2280,2283],{"class":538,"line":539},[536,2268,619],{"class":618},[536,2270,623],{"class":622},[536,2272,2273],{"class":626}," createAxiomDrain",[536,2275,630],{"class":622},[536,2277,633],{"class":618},[536,2279,636],{"class":622},[536,2281,2282],{"class":545},"evlog\u002Faxiom",[536,2284,642],{"class":622},[536,2286,2287,2289,2291,2294,2296,2298,2300,2303],{"class":538,"line":645},[536,2288,619],{"class":618},[536,2290,623],{"class":622},[536,2292,2293],{"class":626}," createUserAgentEnricher",[536,2295,630],{"class":622},[536,2297,633],{"class":618},[536,2299,636],{"class":622},[536,2301,2302],{"class":545},"evlog\u002Fenrichers",[536,2304,642],{"class":622},[536,2306,2307],{"class":538,"line":666},[536,2308,689],{"emptyLinePlaceholder":688},[536,2310,2311,2313,2316,2318,2320],{"class":538,"line":685},[536,2312,751],{"class":750},[536,2314,2315],{"class":626}," userAgent ",[536,2317,757],{"class":622},[536,2319,2293],{"class":695},[536,2321,765],{"class":626},[536,2323,2324],{"class":538,"line":692},[536,2325,689],{"emptyLinePlaceholder":688},[536,2327,2328,2330,2332,2334,2336,2338,2340],{"class":538,"line":705},[536,2329,942],{"class":626},[536,2331,826],{"class":622},[536,2333,774],{"class":695},[536,2335,699],{"class":626},[536,2337,661],{"class":695},[536,2339,699],{"class":626},[536,2341,702],{"class":622},[536,2343,2344,2347,2349,2351,2354],{"class":538,"line":733},[536,2345,2346],{"class":708},"  drain",[536,2348,712],{"class":622},[536,2350,2273],{"class":695},[536,2352,2353],{"class":626},"()",[536,2355,1951],{"class":622},[536,2357,2358,2361,2363,2366,2369,2371,2373],{"class":538,"line":742},[536,2359,2360],{"class":695},"  enrich",[536,2362,712],{"class":622},[536,2364,2365],{"class":622}," (",[536,2367,2368],{"class":807},"ctx",[536,2370,1348],{"class":622},[536,2372,814],{"class":750},[536,2374,817],{"class":622},[536,2376,2377,2380,2382,2384],{"class":538,"line":747},[536,2378,2379],{"class":695},"    userAgent",[536,2381,699],{"class":708},[536,2383,2368],{"class":626},[536,2385,739],{"class":708},[536,2387,2388,2391,2393,2396,2398,2401,2403,2406,2408,2411,2413],{"class":538,"line":768},[536,2389,2390],{"class":626},"    ctx",[536,2392,826],{"class":622},[536,2394,2395],{"class":626},"event",[536,2397,826],{"class":622},[536,2399,2400],{"class":626},"region",[536,2402,986],{"class":622},[536,2404,2405],{"class":626}," process",[536,2407,826],{"class":622},[536,2409,2410],{"class":626},"env",[536,2412,826],{"class":622},[536,2414,2415],{"class":626},"FLY_REGION\n",[536,2417,2418],{"class":538,"line":784},[536,2419,2420],{"class":622},"  },\n",[536,2422,2423,2425],{"class":538,"line":820},[536,2424,736],{"class":622},[536,2426,2427],{"class":626},"))\n",[518,2429,2431],{"id":2430},"pipeline-batching-retry","Pipeline (Batching & Retry)",[450,2433,2434,2435,2438],{},"For production, wrap your adapter with ",[454,2436,2437],{},"createDrainPipeline"," to batch events and retry on failure:",[526,2440,2442],{"className":608,"code":2441,"filename":610,"language":611,"meta":532,"style":532},"import type { DrainContext } from 'evlog'\nimport { createAxiomDrain } from 'evlog\u002Faxiom'\nimport { createDrainPipeline } from 'evlog\u002Fpipeline'\n\nconst pipeline = createDrainPipeline\u003CDrainContext>({\n  batch: { size: 50, intervalMs: 5000 },\n  retry: { maxAttempts: 3 },\n})\nconst drain = pipeline(createAxiomDrain())\n\napp.use(evlog({ drain }))\n",[454,2443,2444,2466,2484,2504,2508,2532,2561,2579,2585,2604,2608],{"__ignoreMap":532},[536,2445,2446,2448,2451,2453,2456,2458,2460,2462,2464],{"class":538,"line":539},[536,2447,619],{"class":618},[536,2449,2450],{"class":618}," type",[536,2452,623],{"class":622},[536,2454,2455],{"class":626}," DrainContext",[536,2457,630],{"class":622},[536,2459,633],{"class":618},[536,2461,636],{"class":622},[536,2463,661],{"class":545},[536,2465,642],{"class":622},[536,2467,2468,2470,2472,2474,2476,2478,2480,2482],{"class":538,"line":645},[536,2469,619],{"class":618},[536,2471,623],{"class":622},[536,2473,2273],{"class":626},[536,2475,630],{"class":622},[536,2477,633],{"class":618},[536,2479,636],{"class":622},[536,2481,2282],{"class":545},[536,2483,642],{"class":622},[536,2485,2486,2488,2490,2493,2495,2497,2499,2502],{"class":538,"line":666},[536,2487,619],{"class":618},[536,2489,623],{"class":622},[536,2491,2492],{"class":626}," createDrainPipeline",[536,2494,630],{"class":622},[536,2496,633],{"class":618},[536,2498,636],{"class":622},[536,2500,2501],{"class":545},"evlog\u002Fpipeline",[536,2503,642],{"class":622},[536,2505,2506],{"class":538,"line":685},[536,2507,689],{"emptyLinePlaceholder":688},[536,2509,2510,2512,2515,2517,2519,2522,2525,2528,2530],{"class":538,"line":692},[536,2511,751],{"class":750},[536,2513,2514],{"class":626}," pipeline ",[536,2516,757],{"class":622},[536,2518,2492],{"class":695},[536,2520,2521],{"class":622},"\u003C",[536,2523,2524],{"class":542},"DrainContext",[536,2526,2527],{"class":622},">",[536,2529,699],{"class":626},[536,2531,702],{"class":622},[536,2533,2534,2537,2539,2541,2544,2546,2549,2551,2554,2556,2559],{"class":538,"line":705},[536,2535,2536],{"class":708},"  batch",[536,2538,712],{"class":622},[536,2540,623],{"class":622},[536,2542,2543],{"class":708}," size",[536,2545,712],{"class":622},[536,2547,2548],{"class":891}," 50",[536,2550,801],{"class":622},[536,2552,2553],{"class":708}," intervalMs",[536,2555,712],{"class":622},[536,2557,2558],{"class":891}," 5000",[536,2560,730],{"class":622},[536,2562,2563,2566,2568,2570,2573,2575,2577],{"class":538,"line":733},[536,2564,2565],{"class":708},"  retry",[536,2567,712],{"class":622},[536,2569,623],{"class":622},[536,2571,2572],{"class":708}," maxAttempts",[536,2574,712],{"class":622},[536,2576,1903],{"class":891},[536,2578,730],{"class":622},[536,2580,2581,2583],{"class":538,"line":742},[536,2582,736],{"class":622},[536,2584,739],{"class":626},[536,2586,2587,2589,2592,2594,2597,2599,2602],{"class":538,"line":747},[536,2588,751],{"class":750},[536,2590,2591],{"class":626}," drain ",[536,2593,757],{"class":622},[536,2595,2596],{"class":695}," pipeline",[536,2598,699],{"class":626},[536,2600,2601],{"class":695},"createAxiomDrain",[536,2603,781],{"class":626},[536,2605,2606],{"class":538,"line":768},[536,2607,689],{"emptyLinePlaceholder":688},[536,2609,2610,2612,2614,2616,2618,2620,2622,2624,2626,2628],{"class":538,"line":784},[536,2611,942],{"class":626},[536,2613,826],{"class":622},[536,2615,774],{"class":695},[536,2617,699],{"class":626},[536,2619,661],{"class":695},[536,2621,699],{"class":626},[536,2623,834],{"class":622},[536,2625,2591],{"class":626},[536,2627,736],{"class":622},[536,2629,2427],{"class":626},[896,2631,2632,2633,2636,2637,2640],{"color":898,"icon":13},"Call ",[454,2634,2635],{},"drain.flush()"," on server shutdown to ensure all buffered events are sent. See the ",[503,2638,2639],{"href":410},"Pipeline docs"," for all options.",[514,2642,2644],{"id":2643},"tail-sampling","Tail Sampling",[450,2646,1290,2647,2650],{},[454,2648,2649],{},"keep"," to force-retain specific events regardless of head sampling:",[526,2652,2654],{"className":608,"code":2653,"filename":610,"language":611,"meta":532,"style":532},"app.use(evlog({\n  drain: createAxiomDrain(),\n  keep: (ctx) => {\n    if (ctx.duration && ctx.duration > 2000) ctx.shouldKeep = true\n  },\n}))\n",[454,2655,2656,2672,2684,2701,2745,2749],{"__ignoreMap":532},[536,2657,2658,2660,2662,2664,2666,2668,2670],{"class":538,"line":539},[536,2659,942],{"class":626},[536,2661,826],{"class":622},[536,2663,774],{"class":695},[536,2665,699],{"class":626},[536,2667,661],{"class":695},[536,2669,699],{"class":626},[536,2671,702],{"class":622},[536,2673,2674,2676,2678,2680,2682],{"class":538,"line":645},[536,2675,2346],{"class":708},[536,2677,712],{"class":622},[536,2679,2273],{"class":695},[536,2681,2353],{"class":626},[536,2683,1951],{"class":622},[536,2685,2686,2689,2691,2693,2695,2697,2699],{"class":538,"line":666},[536,2687,2688],{"class":695},"  keep",[536,2690,712],{"class":622},[536,2692,2365],{"class":622},[536,2694,2368],{"class":807},[536,2696,1348],{"class":622},[536,2698,814],{"class":750},[536,2700,817],{"class":622},[536,2702,2703,2706,2708,2710,2712,2715,2718,2721,2723,2725,2728,2731,2733,2735,2737,2740,2742],{"class":538,"line":685},[536,2704,2705],{"class":618},"    if",[536,2707,2365],{"class":708},[536,2709,2368],{"class":626},[536,2711,826],{"class":622},[536,2713,2714],{"class":626},"duration",[536,2716,2717],{"class":622}," &&",[536,2719,2720],{"class":626}," ctx",[536,2722,826],{"class":622},[536,2724,2714],{"class":626},[536,2726,2727],{"class":622}," >",[536,2729,2730],{"class":891}," 2000",[536,2732,1186],{"class":708},[536,2734,2368],{"class":626},[536,2736,826],{"class":622},[536,2738,2739],{"class":626},"shouldKeep",[536,2741,986],{"class":622},[536,2743,2744],{"class":866}," true\n",[536,2746,2747],{"class":538,"line":692},[536,2748,2420],{"class":622},[536,2750,2751,2753],{"class":538,"line":705},[536,2752,736],{"class":622},[536,2754,2427],{"class":626},[514,2756,2758],{"id":2757},"route-filtering","Route Filtering",[450,2760,2761,2762,2765,2766,2769],{},"Control which routes are logged with ",[454,2763,2764],{},"include"," and ",[454,2767,2768],{},"exclude"," patterns:",[526,2771,2773],{"className":608,"code":2772,"filename":610,"language":611,"meta":532,"style":532},"app.use(evlog({\n  include: ['\u002Fapi\u002F**'],\n  exclude: ['\u002F_internal\u002F**', '\u002Fhealth'],\n  routes: {\n    '\u002Fapi\u002Fauth\u002F**': { service: 'auth-service' },\n    '\u002Fapi\u002Fpayment\u002F**': { service: 'payment-service' },\n  },\n}))\n",[454,2774,2775,2791,2813,2841,2850,2877,2903,2907],{"__ignoreMap":532},[536,2776,2777,2779,2781,2783,2785,2787,2789],{"class":538,"line":539},[536,2778,942],{"class":626},[536,2780,826],{"class":622},[536,2782,774],{"class":695},[536,2784,699],{"class":626},[536,2786,661],{"class":695},[536,2788,699],{"class":626},[536,2790,702],{"class":622},[536,2792,2793,2796,2798,2801,2803,2806,2808,2811],{"class":538,"line":645},[536,2794,2795],{"class":708},"  include",[536,2797,712],{"class":622},[536,2799,2800],{"class":626}," [",[536,2802,727],{"class":622},[536,2804,2805],{"class":545},"\u002Fapi\u002F**",[536,2807,727],{"class":622},[536,2809,2810],{"class":626},"]",[536,2812,1951],{"class":622},[536,2814,2815,2818,2820,2822,2824,2827,2829,2831,2833,2835,2837,2839],{"class":538,"line":666},[536,2816,2817],{"class":708},"  exclude",[536,2819,712],{"class":622},[536,2821,2800],{"class":626},[536,2823,727],{"class":622},[536,2825,2826],{"class":545},"\u002F_internal\u002F**",[536,2828,727],{"class":622},[536,2830,801],{"class":622},[536,2832,636],{"class":622},[536,2834,796],{"class":545},[536,2836,727],{"class":622},[536,2838,2810],{"class":626},[536,2840,1951],{"class":622},[536,2842,2843,2846,2848],{"class":538,"line":685},[536,2844,2845],{"class":708},"  routes",[536,2847,712],{"class":622},[536,2849,817],{"class":622},[536,2851,2852,2855,2858,2860,2862,2864,2866,2868,2870,2873,2875],{"class":538,"line":692},[536,2853,2854],{"class":622},"    '",[536,2856,2857],{"class":708},"\u002Fapi\u002Fauth\u002F**",[536,2859,727],{"class":622},[536,2861,712],{"class":622},[536,2863,623],{"class":622},[536,2865,717],{"class":708},[536,2867,712],{"class":622},[536,2869,636],{"class":622},[536,2871,2872],{"class":545},"auth-service",[536,2874,727],{"class":622},[536,2876,730],{"class":622},[536,2878,2879,2881,2884,2886,2888,2890,2892,2894,2896,2899,2901],{"class":538,"line":705},[536,2880,2854],{"class":622},[536,2882,2883],{"class":708},"\u002Fapi\u002Fpayment\u002F**",[536,2885,727],{"class":622},[536,2887,712],{"class":622},[536,2889,623],{"class":622},[536,2891,717],{"class":708},[536,2893,712],{"class":622},[536,2895,636],{"class":622},[536,2897,2898],{"class":545},"payment-service",[536,2900,727],{"class":622},[536,2902,730],{"class":622},[536,2904,2905],{"class":538,"line":733},[536,2906,2420],{"class":622},[536,2908,2909,2911],{"class":538,"line":742},[536,2910,736],{"class":622},[536,2912,2427],{"class":626},[514,2914,2916],{"id":2915},"client-side-logging","Client-Side Logging",[450,2918,1290,2919,2922],{},[454,2920,2921],{},"evlog\u002Fhttp"," to send structured logs from any frontend to your Elysia server. This works with any client framework (React, Vue, Svelte, vanilla JS).",[518,2924,2926],{"id":2925},"browser-setup","Browser setup",[526,2928,2931],{"className":608,"code":2929,"filename":2930,"language":611,"meta":532,"style":532},"import { initLogger, log } from 'evlog'\nimport { createHttpLogDrain } from 'evlog\u002Fhttp'\n\nconst drain = createHttpLogDrain({\n  drain: { endpoint: '\u002Fv1\u002Fingest' },\n})\ninitLogger({ drain })\n\nlog.info({ action: 'page_view', path: location.pathname })\n","client.ts",[454,2932,2933,2955,2974,2978,2992,3014,3020,3034,3038],{"__ignoreMap":532},[536,2934,2935,2937,2939,2941,2943,2945,2947,2949,2951,2953],{"class":538,"line":539},[536,2936,619],{"class":618},[536,2938,623],{"class":622},[536,2940,652],{"class":626},[536,2942,801],{"class":622},[536,2944,808],{"class":626},[536,2946,630],{"class":622},[536,2948,633],{"class":618},[536,2950,636],{"class":622},[536,2952,661],{"class":545},[536,2954,642],{"class":622},[536,2956,2957,2959,2961,2964,2966,2968,2970,2972],{"class":538,"line":645},[536,2958,619],{"class":618},[536,2960,623],{"class":622},[536,2962,2963],{"class":626}," createHttpLogDrain",[536,2965,630],{"class":622},[536,2967,633],{"class":618},[536,2969,636],{"class":622},[536,2971,2921],{"class":545},[536,2973,642],{"class":622},[536,2975,2976],{"class":538,"line":666},[536,2977,689],{"emptyLinePlaceholder":688},[536,2979,2980,2982,2984,2986,2988,2990],{"class":538,"line":685},[536,2981,751],{"class":750},[536,2983,2591],{"class":626},[536,2985,757],{"class":622},[536,2987,2963],{"class":695},[536,2989,699],{"class":626},[536,2991,702],{"class":622},[536,2993,2994,2996,2998,3000,3003,3005,3007,3010,3012],{"class":538,"line":692},[536,2995,2346],{"class":708},[536,2997,712],{"class":622},[536,2999,623],{"class":622},[536,3001,3002],{"class":708}," endpoint",[536,3004,712],{"class":622},[536,3006,636],{"class":622},[536,3008,3009],{"class":545},"\u002Fv1\u002Fingest",[536,3011,727],{"class":622},[536,3013,730],{"class":622},[536,3015,3016,3018],{"class":538,"line":705},[536,3017,736],{"class":622},[536,3019,739],{"class":626},[536,3021,3022,3024,3026,3028,3030,3032],{"class":538,"line":733},[536,3023,696],{"class":695},[536,3025,699],{"class":626},[536,3027,834],{"class":622},[536,3029,2591],{"class":626},[536,3031,736],{"class":622},[536,3033,739],{"class":626},[536,3035,3036],{"class":538,"line":742},[536,3037,689],{"emptyLinePlaceholder":688},[536,3039,3040,3042,3044,3046,3048,3050,3053,3055,3057,3060,3062,3064,3067,3069,3072,3074,3077,3079],{"class":538,"line":747},[536,3041,460],{"class":626},[536,3043,826],{"class":622},[536,3045,898],{"class":695},[536,3047,699],{"class":626},[536,3049,834],{"class":622},[536,3051,3052],{"class":708}," action",[536,3054,712],{"class":622},[536,3056,636],{"class":622},[536,3058,3059],{"class":545},"page_view",[536,3061,727],{"class":622},[536,3063,801],{"class":622},[536,3065,3066],{"class":708}," path",[536,3068,712],{"class":622},[536,3070,3071],{"class":626}," location",[536,3073,826],{"class":622},[536,3075,3076],{"class":626},"pathname ",[536,3078,736],{"class":622},[536,3080,739],{"class":626},[518,3082,3084],{"id":3083},"ingest-endpoint","Ingest endpoint",[450,3086,3087,3088,3091],{},"Add a POST route to receive batched ",[454,3089,3090],{},"DrainContext[]"," from the browser:",[526,3093,3095],{"className":608,"code":3094,"filename":610,"language":611,"meta":532,"style":532},"import type { DrainContext } from 'evlog'\n\napp.post('\u002Fv1\u002Fingest', async ({ body }) => {\n  const batch = body as DrainContext[]\n  for (const ctx of batch) {\n    console.log('[BROWSER]', JSON.stringify(ctx.event))\n  }\n  return new Response(null, { status: 204 })\n})\n",[454,3096,3097,3117,3121,3152,3171,3191,3229,3234,3262],{"__ignoreMap":532},[536,3098,3099,3101,3103,3105,3107,3109,3111,3113,3115],{"class":538,"line":539},[536,3100,619],{"class":618},[536,3102,2450],{"class":618},[536,3104,623],{"class":622},[536,3106,2455],{"class":626},[536,3108,630],{"class":622},[536,3110,633],{"class":618},[536,3112,636],{"class":622},[536,3114,661],{"class":545},[536,3116,642],{"class":622},[536,3118,3119],{"class":538,"line":645},[536,3120,689],{"emptyLinePlaceholder":688},[536,3122,3123,3125,3127,3129,3131,3133,3135,3137,3139,3141,3143,3146,3148,3150],{"class":538,"line":666},[536,3124,942],{"class":626},[536,3126,826],{"class":622},[536,3128,1657],{"class":695},[536,3130,699],{"class":626},[536,3132,727],{"class":622},[536,3134,3009],{"class":545},[536,3136,727],{"class":622},[536,3138,801],{"class":622},[536,3140,960],{"class":750},[536,3142,804],{"class":622},[536,3144,3145],{"class":807}," body",[536,3147,811],{"class":622},[536,3149,814],{"class":750},[536,3151,817],{"class":622},[536,3153,3154,3156,3159,3161,3163,3166,3168],{"class":538,"line":685},[536,3155,980],{"class":750},[536,3157,3158],{"class":626}," batch",[536,3160,986],{"class":622},[536,3162,3145],{"class":626},[536,3164,3165],{"class":618}," as",[536,3167,2455],{"class":542},[536,3169,3170],{"class":708},"[]\n",[536,3172,3173,3176,3178,3180,3182,3185,3187,3189],{"class":538,"line":692},[536,3174,3175],{"class":618},"  for",[536,3177,2365],{"class":708},[536,3179,751],{"class":750},[536,3181,2720],{"class":626},[536,3183,3184],{"class":622}," of",[536,3186,3158],{"class":626},[536,3188,1186],{"class":708},[536,3190,702],{"class":622},[536,3192,3193,3196,3198,3200,3202,3204,3207,3209,3211,3214,3216,3219,3221,3223,3225,3227],{"class":538,"line":705},[536,3194,3195],{"class":626},"    console",[536,3197,826],{"class":622},[536,3199,460],{"class":695},[536,3201,699],{"class":708},[536,3203,727],{"class":622},[536,3205,3206],{"class":545},"[BROWSER]",[536,3208,727],{"class":622},[536,3210,801],{"class":622},[536,3212,3213],{"class":626}," JSON",[536,3215,826],{"class":622},[536,3217,3218],{"class":695},"stringify",[536,3220,699],{"class":708},[536,3222,2368],{"class":626},[536,3224,826],{"class":622},[536,3226,2395],{"class":626},[536,3228,2427],{"class":708},[536,3230,3231],{"class":538,"line":733},[536,3232,3233],{"class":622},"  }\n",[536,3235,3236,3238,3240,3243,3245,3248,3250,3253,3255,3258,3260],{"class":538,"line":742},[536,3237,1201],{"class":618},[536,3239,760],{"class":622},[536,3241,3242],{"class":695}," Response",[536,3244,699],{"class":708},[536,3246,3247],{"class":622},"null,",[536,3249,623],{"class":622},[536,3251,3252],{"class":708}," status",[536,3254,712],{"class":622},[536,3256,3257],{"class":891}," 204",[536,3259,630],{"class":622},[536,3261,739],{"class":708},[536,3263,3264,3266],{"class":538,"line":747},[536,3265,736],{"class":622},[536,3267,739],{"class":626},[896,3269,3272,3273,3276],{"color":3270,"icon":3271},"neutral","i-lucide-globe","See the full ",[503,3274,3275],{"href":410},"HTTP drain"," adapter docs for batching, retry, sendBeacon fallback, and authentication options.",[514,3278,3280],{"id":3279},"run-locally","Run Locally",[526,3282,3285],{"className":528,"code":3283,"filename":3284,"language":531,"meta":532,"style":532},"git clone https:\u002F\u002Fgithub.com\u002Fhugorcd\u002Fevlog.git\ncd evlog\npnpm install\npnpm run example:elysia\n","Terminal",[454,3286,3287,3298,3306,3313],{"__ignoreMap":532},[536,3288,3289,3292,3295],{"class":538,"line":539},[536,3290,3291],{"class":542},"git",[536,3293,3294],{"class":545}," clone",[536,3296,3297],{"class":545}," https:\u002F\u002Fgithub.com\u002Fhugorcd\u002Fevlog.git\n",[536,3299,3300,3303],{"class":538,"line":645},[536,3301,3302],{"class":695},"cd",[536,3304,3305],{"class":545}," evlog\n",[536,3307,3308,3310],{"class":538,"line":666},[536,3309,530],{"class":542},[536,3311,3312],{"class":545}," install\n",[536,3314,3315,3317,3320],{"class":538,"line":685},[536,3316,530],{"class":542},[536,3318,3319],{"class":545}," run",[536,3321,3322],{"class":545}," example:elysia\n",[450,3324,3325,3326,3330],{},"Open ",[503,3327,3328],{"href":3328,"rel":3329},"http:\u002F\u002Flocalhost:3000",[507]," to explore the interactive test UI.",[3332,3333,3334],"card-group",{},[3335,3336,3339],"card",{"icon":215,"title":3337,"to":3338},"Source Code","https:\u002F\u002Fgithub.com\u002Fhugorcd\u002Fevlog\u002Ftree\u002Fmain\u002Fexamples\u002Felysia","Browse the complete Elysia example source on GitHub.",[514,3341,3343],{"id":3342},"next-steps","Next Steps",[475,3345,3346,3351,3356,3361],{},[478,3347,3348,3350],{},[503,3349,46],{"href":47},": Design comprehensive events with context layering",[478,3352,3353,3355],{},[503,3354,90],{"href":95},": Send logs to Axiom, Sentry, PostHog, and more",[478,3357,3358,3360],{},[503,3359,61],{"href":62},": Control log volume with head and tail sampling",[478,3362,3363,3365,3366,1789,3368,1793,3370,3372],{},[503,3364,51],{"href":52},": Throw errors with ",[454,3367,1788],{},[454,3369,1792],{},[454,3371,1796],{}," fields",[3374,3375,3376],"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 .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 .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}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}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}",{"title":532,"searchDepth":645,"depth":645,"links":3378},[3379,3383,3384,3385,3387,3388,3389,3392,3393,3394,3398,3399],{"id":516,"depth":645,"text":25,"children":3380},[3381,3382],{"id":520,"depth":666,"text":521},{"id":604,"depth":666,"text":605},{"id":929,"depth":645,"text":46},{"id":1287,"depth":645,"text":464},{"id":1588,"depth":645,"text":3386},"Background work (log.fork)",{"id":1778,"depth":645,"text":1779},{"id":2242,"depth":645,"text":419},{"id":2255,"depth":645,"text":2256,"children":3390},[3391],{"id":2430,"depth":666,"text":2431},{"id":2643,"depth":645,"text":2644},{"id":2757,"depth":645,"text":2758},{"id":2915,"depth":645,"text":2916,"children":3395},[3396,3397],{"id":2925,"depth":666,"text":2926},{"id":3083,"depth":666,"text":3084},{"id":3279,"depth":645,"text":3280},{"id":3342,"depth":645,"text":3343},"Automatic wide events, structured errors, drain adapters, enrichers, and tail sampling in Elysia applications.","md",[3403],{"label":3337,"icon":3404,"to":3338,"color":3270,"variant":3405},"i-simple-icons-github","subtle",{},{"title":212,"icon":215},{"title":212,"description":3400},"A8LlpURGhS4s9DqtYxr3HnkboYRQNCjKkwzubT92sT8",[3411,3413],{"title":207,"path":208,"stem":209,"description":3412,"icon":210,"children":-1},"Automatic wide events, structured errors, drain adapters, enrichers, and tail sampling in Fastify applications.",{"title":217,"path":218,"stem":219,"description":3414,"icon":220,"children":-1},"Automatic wide events, structured errors, drain adapters, enrichers, and tail sampling in React Router applications.",1782925729365]