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