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