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