[{"data":1,"prerenderedAt":2509},["ShallowReactive",2],{"navigation_docs":3,"-frameworks-standalone":547,"-frameworks-standalone-surround":2504},[4,35,159,201,289,446,531],{"title":5,"path":6,"stem":7,"children":8,"page":34},"Getting Started","\u002Fgetting-started","1.getting-started",[9,14,19,24,29],{"title":10,"path":11,"stem":12,"icon":13},"Introduction","\u002Fgetting-started\u002Fintroduction","1.getting-started\u002F1.introduction","i-lucide-info",{"title":15,"path":16,"stem":17,"icon":18},"Installation","\u002Fgetting-started\u002Finstallation","1.getting-started\u002F2.installation","i-lucide-download",{"title":20,"path":21,"stem":22,"icon":23},"Quick Start","\u002Fgetting-started\u002Fquick-start","1.getting-started\u002F3.quick-start","i-lucide-zap",{"title":25,"path":26,"stem":27,"icon":28},"Agent Skills","\u002Fgetting-started\u002Fagent-skills","1.getting-started\u002F4.agent-skills","i-lucide-sparkles",{"title":30,"path":31,"stem":32,"icon":33},"vs Other Loggers","\u002Fgetting-started\u002Fvs-other-loggers","1.getting-started\u002F5.vs-other-loggers","i-lucide-scale",false,{"title":36,"path":37,"stem":38,"children":39,"page":34},"Logging","\u002Flogging","2.logging",[40,45,50,55,60,65,70,99,127],{"title":41,"path":42,"stem":43,"icon":44},"Overview","\u002Flogging\u002Foverview","2.logging\u002F0.overview","i-lucide-list",{"title":46,"path":47,"stem":48,"icon":49},"Simple Logging","\u002Flogging\u002Fsimple-logging","2.logging\u002F1.simple-logging","i-lucide-terminal",{"title":51,"path":52,"stem":53,"icon":54},"Wide Events","\u002Flogging\u002Fwide-events","2.logging\u002F2.wide-events","i-lucide-layers",{"title":56,"path":57,"stem":58,"icon":59},"Structured Errors","\u002Flogging\u002Fstructured-errors","2.logging\u002F3.structured-errors","i-lucide-shield-alert",{"title":61,"path":62,"stem":63,"icon":64},"Catalogs","\u002Flogging\u002Fcatalogs","2.logging\u002F4.catalogs","i-lucide-book-open",{"title":66,"path":67,"stem":68,"icon":69},"Client Logging","\u002Flogging\u002Fclient-logging","2.logging\u002F5.client-logging","i-lucide-monitor",{"title":71,"icon":72,"path":73,"stem":74,"children":75,"page":34},"AI SDK","i-simple-icons-vercel","\u002Flogging\u002Fai-sdk","2.logging\u002F6.ai-sdk",[76,79,84,89,94],{"title":41,"path":77,"stem":78,"icon":44},"\u002Flogging\u002Fai-sdk\u002Foverview","2.logging\u002F6.ai-sdk\u002F01.overview",{"title":80,"path":81,"stem":82,"icon":83},"Usage","\u002Flogging\u002Fai-sdk\u002Fusage","2.logging\u002F6.ai-sdk\u002F02.usage","i-lucide-code",{"title":85,"path":86,"stem":87,"icon":88},"Options","\u002Flogging\u002Fai-sdk\u002Foptions","2.logging\u002F6.ai-sdk\u002F03.options","i-lucide-sliders",{"title":90,"path":91,"stem":92,"icon":93},"Metadata","\u002Flogging\u002Fai-sdk\u002Fmetadata","2.logging\u002F6.ai-sdk\u002F04.metadata","i-lucide-database",{"title":95,"path":96,"stem":97,"icon":98},"Telemetry","\u002Flogging\u002Fai-sdk\u002Ftelemetry","2.logging\u002F6.ai-sdk\u002F05.telemetry","i-lucide-activity",{"title":100,"icon":101,"path":102,"stem":103,"children":104,"page":34},"Better Auth","i-simple-icons-betterauth","\u002Flogging\u002Fbetter-auth","2.logging\u002F7.better-auth",[105,108,113,118,122],{"title":41,"path":106,"stem":107,"icon":44},"\u002Flogging\u002Fbetter-auth\u002Foverview","2.logging\u002F7.better-auth\u002F01.overview",{"title":109,"path":110,"stem":111,"icon":112},"Identify User","\u002Flogging\u002Fbetter-auth\u002Fidentify-user","2.logging\u002F7.better-auth\u002F02.identify-user","i-lucide-user-check",{"title":114,"path":115,"stem":116,"icon":117},"Middleware","\u002Flogging\u002Fbetter-auth\u002Fmiddleware","2.logging\u002F7.better-auth\u002F03.middleware","i-lucide-shield",{"title":119,"path":120,"stem":121,"icon":69},"Client Sync","\u002Flogging\u002Fbetter-auth\u002Fclient-sync","2.logging\u002F7.better-auth\u002F04.client-sync",{"title":123,"path":124,"stem":125,"icon":126},"Performance","\u002Flogging\u002Fbetter-auth\u002Fperformance","2.logging\u002F7.better-auth\u002F05.performance","i-lucide-gauge",{"title":128,"icon":129,"path":130,"stem":131,"children":132,"page":34},"Audit Logs","i-lucide-shield-check","\u002Flogging\u002Faudit","2.logging\u002F8.audit",[133,136,141,146,151,155],{"title":41,"path":134,"stem":135,"icon":44},"\u002Flogging\u002Faudit\u002Foverview","2.logging\u002F8.audit\u002F01.overview",{"title":137,"path":138,"stem":139,"icon":140},"Schema","\u002Flogging\u002Faudit\u002Fschema","2.logging\u002F8.audit\u002F02.schema","i-lucide-file-text",{"title":142,"path":143,"stem":144,"icon":145},"Recording","\u002Flogging\u002Faudit\u002Frecording","2.logging\u002F8.audit\u002F03.recording","i-lucide-pen-line",{"title":147,"path":148,"stem":149,"icon":150},"Drains","\u002Flogging\u002Faudit\u002Fpipeline","2.logging\u002F8.audit\u002F04.pipeline","i-lucide-link",{"title":152,"path":153,"stem":154,"icon":129},"Compliance","\u002Flogging\u002Faudit\u002Fcompliance","2.logging\u002F8.audit\u002F05.compliance",{"title":156,"path":157,"stem":158,"icon":64},"Recipes","\u002Flogging\u002Faudit\u002Frecipes","2.logging\u002F8.audit\u002F06.recipes",{"title":160,"path":161,"stem":162,"children":163,"page":34},"Core Concepts","\u002Fcore-concepts","3.core-concepts",[164,169,174,179,184,188,191,196],{"title":165,"path":166,"stem":167,"icon":168},"Lifecycle","\u002Fcore-concepts\u002Flifecycle","3.core-concepts\u002F0.lifecycle","i-lucide-arrow-right-left",{"title":170,"path":171,"stem":172,"icon":173},"Configuration","\u002Fcore-concepts\u002Fconfiguration","3.core-concepts\u002F1.configuration","i-lucide-settings",{"title":175,"path":176,"stem":177,"icon":178},"Sampling","\u002Fcore-concepts\u002Fsampling","3.core-concepts\u002F2.sampling","i-lucide-filter",{"title":180,"path":181,"stem":182,"icon":183},"Typed Fields","\u002Fcore-concepts\u002Ftyped-fields","3.core-concepts\u002F3.typed-fields","i-simple-icons-typescript",{"title":185,"path":186,"stem":187,"icon":129},"Best Practices","\u002Fcore-concepts\u002Fbest-practices","3.core-concepts\u002F4.best-practices",{"title":123,"path":189,"stem":190,"icon":126},"\u002Fcore-concepts\u002Fperformance","3.core-concepts\u002F5.performance",{"title":192,"path":193,"stem":194,"icon":195},"Vite Plugin","\u002Fcore-concepts\u002Fvite-plugin","3.core-concepts\u002F6.vite-plugin","i-custom-vite",{"title":197,"path":198,"stem":199,"icon":200},"Auto-Redaction","\u002Fcore-concepts\u002Fredaction","3.core-concepts\u002F7.redaction","i-lucide-eye-off",{"title":202,"path":203,"stem":204,"children":205,"page":34},"Frameworks","\u002Fframeworks","4.frameworks",[206,210,215,220,225,230,235,240,245,250,255,260,265,270,274,279,284],{"title":41,"path":207,"stem":208,"icon":209},"\u002Fframeworks\u002Foverview","4.frameworks\u002F00.overview","i-lucide-layout-grid",{"title":211,"path":212,"stem":213,"icon":214},"Nuxt","\u002Fframeworks\u002Fnuxt","4.frameworks\u002F01.nuxt","i-simple-icons-nuxtdotjs",{"title":216,"path":217,"stem":218,"icon":219},"Next.js","\u002Fframeworks\u002Fnextjs","4.frameworks\u002F02.nextjs","i-simple-icons-nextdotjs",{"title":221,"path":222,"stem":223,"icon":224},"SvelteKit","\u002Fframeworks\u002Fsveltekit","4.frameworks\u002F03.sveltekit","i-simple-icons-svelte",{"title":226,"path":227,"stem":228,"icon":229},"Nitro","\u002Fframeworks\u002Fnitro","4.frameworks\u002F04.nitro","i-custom-nitro",{"title":231,"path":232,"stem":233,"icon":234},"TanStack Start","\u002Fframeworks\u002Ftanstack-start","4.frameworks\u002F05.tanstack-start","i-custom-tanstack",{"title":236,"path":237,"stem":238,"icon":239},"NestJS","\u002Fframeworks\u002Fnestjs","4.frameworks\u002F06.nestjs","i-simple-icons-nestjs",{"title":241,"path":242,"stem":243,"icon":244},"Express","\u002Fframeworks\u002Fexpress","4.frameworks\u002F07.express","i-simple-icons-express",{"title":246,"path":247,"stem":248,"icon":249},"Hono","\u002Fframeworks\u002Fhono","4.frameworks\u002F08.hono","i-simple-icons-hono",{"title":251,"path":252,"stem":253,"icon":254},"Fastify","\u002Fframeworks\u002Ffastify","4.frameworks\u002F09.fastify","i-simple-icons-fastify",{"title":256,"path":257,"stem":258,"icon":259},"Elysia","\u002Fframeworks\u002Felysia","4.frameworks\u002F10.elysia","i-custom-elysia",{"title":261,"path":262,"stem":263,"icon":264},"React Router","\u002Fframeworks\u002Freact-router","4.frameworks\u002F11.react-router","i-custom-reactrouter",{"title":266,"path":267,"stem":268,"icon":269},"Cloudflare Workers","\u002Fframeworks\u002Fcloudflare-workers","4.frameworks\u002F12.cloudflare-workers","i-simple-icons-cloudflare",{"title":271,"path":272,"stem":273,"icon":183},"Standalone","\u002Fframeworks\u002Fstandalone","4.frameworks\u002F13.standalone",{"title":275,"path":276,"stem":277,"icon":278},"Astro","\u002Fframeworks\u002Fastro","4.frameworks\u002F14.astro","i-simple-icons-astro",{"title":280,"path":281,"stem":282,"icon":283},"AWS Lambda","\u002Fframeworks\u002Faws-lambda","4.frameworks\u002F16.aws-lambda","i-custom-lambda",{"title":285,"path":286,"stem":287,"icon":288},"Custom Integration","\u002Fframeworks\u002Fcustom-integration","4.frameworks\u002F17.custom-integration","i-lucide-puzzle",{"title":290,"path":291,"stem":292,"children":293,"page":34},"Build on top","\u002Fbuild-on-top","5.build-on-top",[294,297,325,346,373,400,428],{"title":41,"path":295,"stem":296,"icon":54},"\u002Fbuild-on-top\u002Foverview","5.build-on-top\u002F0.overview",{"title":298,"path":299,"stem":300,"children":301,"page":34},"Observers","\u002Fbuild-on-top\u002Fobservers","5.build-on-top\u002Fobservers",[302,306,311,316,321],{"title":41,"path":303,"stem":304,"icon":305},"\u002Fbuild-on-top\u002Fobservers\u002Foverview","5.build-on-top\u002Fobservers\u002F1.overview","i-lucide-eye",{"title":307,"path":308,"stem":309,"icon":310},"Stream API","\u002Fbuild-on-top\u002Fobservers\u002Fin-process-stream","5.build-on-top\u002Fobservers\u002F2.in-process-stream","i-lucide-radio-tower",{"title":312,"path":313,"stem":314,"icon":315},"Stream server","\u002Fbuild-on-top\u002Fobservers\u002Fstream-server","5.build-on-top\u002Fobservers\u002F3.stream-server","i-lucide-radio",{"title":317,"path":318,"stem":319,"icon":320},"FS reader","\u002Fbuild-on-top\u002Fobservers\u002Ffs-reader","5.build-on-top\u002Fobservers\u002F4.fs-reader","i-lucide-folder-search",{"title":156,"path":322,"stem":323,"icon":324},"\u002Fbuild-on-top\u002Fobservers\u002Fconsumer-recipes","5.build-on-top\u002Fobservers\u002F5.consumer-recipes","i-lucide-chef-hat",{"title":326,"path":327,"stem":328,"children":329,"page":34},"Pipeline","\u002Fbuild-on-top\u002Fpipeline","5.build-on-top\u002Fpipeline",[330,334,338,342],{"title":41,"path":331,"stem":332,"icon":333},"\u002Fbuild-on-top\u002Fpipeline\u002Foverview","5.build-on-top\u002Fpipeline\u002F1.overview","i-lucide-workflow",{"title":335,"path":336,"stem":337,"icon":288},"Plugins","\u002Fbuild-on-top\u002Fpipeline\u002Fplugins","5.build-on-top\u002Fpipeline\u002F2.plugins",{"title":339,"path":340,"stem":341,"icon":28},"Custom enrichers","\u002Fbuild-on-top\u002Fpipeline\u002Fcustom-enrichers","5.build-on-top\u002Fpipeline\u002F3.custom-enrichers",{"title":343,"path":344,"stem":345,"icon":178},"Tail sampling","\u002Fbuild-on-top\u002Fpipeline\u002Ftail-sampling","5.build-on-top\u002Fpipeline\u002F4.tail-sampling",{"title":347,"path":348,"stem":349,"children":350,"page":34},"Scenarios","\u002Fbuild-on-top\u002Fscenarios","5.build-on-top\u002Fscenarios",[351,355,359,364,368],{"title":41,"path":352,"stem":353,"icon":354},"\u002Fbuild-on-top\u002Fscenarios\u002Foverview","5.build-on-top\u002Fscenarios\u002F0.overview","i-lucide-clipboard-list",{"title":356,"path":357,"stem":358,"icon":49},"Local debugging toolkit","\u002Fbuild-on-top\u002Fscenarios\u002Flocal-debugging-toolkit","5.build-on-top\u002Fscenarios\u002F1.local-debugging-toolkit",{"title":360,"path":361,"stem":362,"icon":363},"Tenant-aware logging","\u002Fbuild-on-top\u002Fscenarios\u002Ftenant-aware-logging","5.build-on-top\u002Fscenarios\u002F2.tenant-aware-logging","i-lucide-users",{"title":365,"path":366,"stem":367,"icon":129},"Compliance audit","\u002Fbuild-on-top\u002Fscenarios\u002Fcompliance-audit","5.build-on-top\u002Fscenarios\u002F3.compliance-audit",{"title":369,"path":370,"stem":371,"icon":372},"Cross-app error vocab","\u002Fbuild-on-top\u002Fscenarios\u002Fcross-app-error-vocab","5.build-on-top\u002Fscenarios\u002F4.cross-app-error-vocab","i-lucide-book",{"title":374,"path":375,"stem":376,"children":377,"page":34},"Shared packages","\u002Fbuild-on-top\u002Fshared","5.build-on-top\u002Fshared",[378,382,386,391,395],{"title":41,"path":379,"stem":380,"icon":381},"\u002Fbuild-on-top\u002Fshared\u002Foverview","5.build-on-top\u002Fshared\u002F1.overview","i-lucide-package",{"title":383,"path":384,"stem":385,"icon":381},"Catalogs as packages","\u002Fbuild-on-top\u002Fshared\u002Fcatalogs-as-packages","5.build-on-top\u002Fshared\u002F2.catalogs-as-packages",{"title":387,"path":388,"stem":389,"icon":390},"Drains as packages","\u002Fbuild-on-top\u002Fshared\u002Fdrains-as-packages","5.build-on-top\u002Fshared\u002F3.drains-as-packages","i-lucide-package-2",{"title":392,"path":393,"stem":394,"icon":28},"Enrichers as packages","\u002Fbuild-on-top\u002Fshared\u002Fenrichers-as-packages","5.build-on-top\u002Fshared\u002F4.enrichers-as-packages",{"title":396,"path":397,"stem":398,"icon":399},"Integration as package","\u002Fbuild-on-top\u002Fshared\u002Fintegration-as-package","5.build-on-top\u002Fshared\u002F5.integration-as-package","i-lucide-package-check",{"title":401,"path":402,"stem":403,"children":404,"page":34},"Sinks","\u002Fbuild-on-top\u002Fsinks","5.build-on-top\u002Fsinks",[405,409,414,418,423],{"title":41,"path":406,"stem":407,"icon":408},"\u002Fbuild-on-top\u002Fsinks\u002Foverview","5.build-on-top\u002Fsinks\u002F1.overview","i-lucide-arrow-up-from-line",{"title":410,"path":411,"stem":412,"icon":413},"Custom drains","\u002Fbuild-on-top\u002Fsinks\u002Fcustom-drains","5.build-on-top\u002Fsinks\u002F2.custom-drains","i-lucide-code-2",{"title":415,"path":416,"stem":417,"icon":333},"Drain pipeline","\u002Fbuild-on-top\u002Fsinks\u002Fdrain-pipeline","5.build-on-top\u002Fsinks\u002F3.drain-pipeline",{"title":419,"path":420,"stem":421,"icon":422},"Identity headers","\u002Fbuild-on-top\u002Fsinks\u002Fidentity-headers","5.build-on-top\u002Fsinks\u002F4.identity-headers","i-lucide-fingerprint",{"title":424,"path":425,"stem":426,"icon":427},"Fanout","\u002Fbuild-on-top\u002Fsinks\u002Ffanout-and-multi-drain","5.build-on-top\u002Fsinks\u002F5.fanout-and-multi-drain","i-lucide-share-2",{"title":429,"path":430,"stem":431,"children":432,"page":34},"Sources","\u002Fbuild-on-top\u002Fsources","5.build-on-top\u002Fsources",[433,437,441],{"title":41,"path":434,"stem":435,"icon":436},"\u002Fbuild-on-top\u002Fsources\u002Foverview","5.build-on-top\u002Fsources\u002F1.overview","i-lucide-arrow-down-to-line",{"title":438,"path":439,"stem":440,"icon":288},"Custom framework","\u002Fbuild-on-top\u002Fsources\u002Fcustom-framework","5.build-on-top\u002Fsources\u002F2.custom-framework",{"title":442,"path":443,"stem":444,"icon":445},"Middleware toolkit","\u002Fbuild-on-top\u002Fsources\u002Fmiddleware-toolkit","5.build-on-top\u002Fsources\u002F3.middleware-toolkit","i-lucide-wrench",{"title":447,"path":448,"stem":449,"children":450,"page":34},"Adapters","\u002Fadapters","6.adapters",[451,454,494,509],{"title":41,"path":452,"stem":453,"icon":44},"\u002Fadapters\u002Foverview","6.adapters\u002F01.overview",{"title":455,"path":456,"stem":457,"children":458,"page":34},"Cloud destinations","\u002Fadapters\u002Fcloud","6.adapters\u002F02.cloud",[459,464,469,474,479,484,489],{"title":460,"path":461,"stem":462,"icon":463},"Axiom","\u002Fadapters\u002Fcloud\u002Faxiom","6.adapters\u002F02.cloud\u002F01.axiom","i-custom-axiom",{"title":465,"path":466,"stem":467,"icon":468},"OTLP","\u002Fadapters\u002Fcloud\u002Fotlp","6.adapters\u002F02.cloud\u002F02.otlp","i-simple-icons-opentelemetry",{"title":470,"path":471,"stem":472,"icon":473},"PostHog","\u002Fadapters\u002Fcloud\u002Fposthog","6.adapters\u002F02.cloud\u002F03.posthog","i-simple-icons-posthog",{"title":475,"path":476,"stem":477,"icon":478},"Sentry","\u002Fadapters\u002Fcloud\u002Fsentry","6.adapters\u002F02.cloud\u002F04.sentry","i-simple-icons-sentry",{"title":480,"path":481,"stem":482,"icon":483},"Better Stack","\u002Fadapters\u002Fcloud\u002Fbetter-stack","6.adapters\u002F02.cloud\u002F05.better-stack","i-simple-icons-betterstack",{"title":485,"path":486,"stem":487,"icon":488},"Datadog","\u002Fadapters\u002Fcloud\u002Fdatadog","6.adapters\u002F02.cloud\u002F06.datadog","i-simple-icons-datadog",{"title":490,"path":491,"stem":492,"icon":493},"HyperDX","\u002Fadapters\u002Fcloud\u002Fhyperdx","6.adapters\u002F02.cloud\u002F07.hyperdx","i-custom-hyperdx",{"title":495,"path":496,"stem":497,"children":498,"page":34},"Self-hosted","\u002Fadapters\u002Fself-hosted","6.adapters\u002F03.self-hosted",[499,504],{"title":500,"path":501,"stem":502,"icon":503},"File System","\u002Fadapters\u002Fself-hosted\u002Ffs","6.adapters\u002F03.self-hosted\u002F01.fs","i-lucide-hard-drive",{"title":505,"path":506,"stem":507,"icon":508},"NuxtHub","\u002Fadapters\u002Fself-hosted\u002Fnuxthub","6.adapters\u002F03.self-hosted\u002F02.nuxthub","i-simple-icons-nuxt",{"title":510,"path":511,"stem":512,"children":513,"page":34},"Building blocks","\u002Fadapters\u002Fbuilding-blocks","6.adapters\u002F04.building-blocks",[514,517,522,526],{"title":326,"path":515,"stem":516,"icon":333},"\u002Fadapters\u002Fbuilding-blocks\u002Fpipeline","6.adapters\u002F04.building-blocks\u002F01.pipeline",{"title":518,"path":519,"stem":520,"icon":521},"HTTP","\u002Fadapters\u002Fbuilding-blocks\u002Fhttp","6.adapters\u002F04.building-blocks\u002F02.http","i-lucide-globe",{"title":523,"path":524,"stem":525,"icon":83},"Custom Adapters","\u002Fadapters\u002Fbuilding-blocks\u002Fcustom","6.adapters\u002F04.building-blocks\u002F03.custom",{"title":527,"path":528,"stem":529,"icon":530},"Toolkit","\u002Fadapters\u002Fbuilding-blocks\u002Ftoolkit","6.adapters\u002F04.building-blocks\u002F04.toolkit","i-lucide-blocks",{"title":532,"path":533,"stem":534,"children":535,"page":34},"Enrichers","\u002Fenrichers","7.enrichers",[536,539,543],{"title":41,"path":537,"stem":538,"icon":28},"\u002Fenrichers\u002Foverview","7.enrichers\u002F1.overview",{"title":540,"path":541,"stem":542,"icon":288},"Built-in","\u002Fenrichers\u002Fbuilt-in","7.enrichers\u002F2.built-in",{"title":544,"path":545,"stem":546,"icon":83},"Custom","\u002Fenrichers\u002Fcustom","7.enrichers\u002F3.custom",{"id":548,"title":549,"body":550,"description":2497,"extension":2498,"links":2499,"meta":2500,"navigation":2501,"path":272,"seo":2502,"stem":273,"__hash__":2503},"docs\u002F4.frameworks\u002F13.standalone.md","Standalone TypeScript",{"type":551,"value":552,"toc":2485},"minimark",[553,566,579,622,626,631,702,706,1156,1163,1185,1189,1192,1200,1304,1312,1445,1452,1455,1458,1782,1840,1844,1851,2191,2194,2204,2208,2213,2430,2435,2445,2449,2481],[554,555,556,557,561,562,565],"p",{},"For scripts, CLI tools, queue workers, cron jobs, and any TypeScript process that doesn't use a web framework, evlog provides ",[558,559,560],"code",{},"createLogger"," and ",[558,563,564],{},"createRequestLogger"," from the core package.",[567,568,570,571,574,575,578],"callout",{"color":569,"icon":521},"neutral","For scripts, queue workers, cron, and CLIs, this page is the reference. On Cloudflare Workers, prefer ",[572,573,266],"a",{"href":267}," (",[558,576,577],{},"createWorkersLogger",").",[580,581,584,587,609],"prompt",{":actions":582,"description":583,"icon":183},"[\"copy\",\"cursor\",\"windsurf\"]","Set up evlog in my TypeScript project",[554,585,586],{},"Set up evlog in my TypeScript project for scripts, workers, or CLI tools.",[588,589,590,594,597,600,603,606],"ul",{},[591,592,593],"li",{},"Install evlog: pnpm add evlog",[591,595,596],{},"Import initLogger and createLogger (or createRequestLogger) from 'evlog'",[591,598,599],{},"Call initLogger({ env: { service: 'my-script' } }) once at startup",[591,601,602],{},"Create a logger per logical operation with createLogger({ jobId, source })",[591,604,605],{},"Use log.set() to accumulate context as the operation progresses",[591,607,608],{},"Call log.emit() manually when the operation completes",[554,610,611,612,617,618],{},"Docs: ",[572,613,614],{"href":614,"rel":615},"https:\u002F\u002Fwww.evlog.dev\u002Fframeworks\u002Fstandalone",[616],"nofollow","\nAdapters: ",[572,619,620],{"href":620,"rel":621},"https:\u002F\u002Fwww.evlog.dev\u002Fadapters",[616],[623,624,20],"h2",{"id":625},"quick-start",[627,628,630],"h3",{"id":629},"_1-install","1. Install",[632,633,634,659,673,687],"code-group",{},[635,636,642],"pre",{"className":637,"code":638,"filename":639,"language":640,"meta":641,"style":641},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","pnpm add evlog\n","pnpm","bash","",[558,643,644],{"__ignoreMap":641},[645,646,649,652,656],"span",{"class":647,"line":648},"line",1,[645,650,639],{"class":651},"sBMFI",[645,653,655],{"class":654},"sfazB"," add",[645,657,658],{"class":654}," evlog\n",[635,660,663],{"className":637,"code":661,"filename":662,"language":640,"meta":641,"style":641},"bun add evlog\n","bun",[558,664,665],{"__ignoreMap":641},[645,666,667,669,671],{"class":647,"line":648},[645,668,662],{"class":651},[645,670,655],{"class":654},[645,672,658],{"class":654},[635,674,677],{"className":637,"code":675,"filename":676,"language":640,"meta":641,"style":641},"yarn add evlog\n","yarn",[558,678,679],{"__ignoreMap":641},[645,680,681,683,685],{"class":647,"line":648},[645,682,676],{"class":651},[645,684,655],{"class":654},[645,686,658],{"class":654},[635,688,691],{"className":637,"code":689,"filename":690,"language":640,"meta":641,"style":641},"npm install evlog\n","npm",[558,692,693],{"__ignoreMap":641},[645,694,695,697,700],{"class":647,"line":648},[645,696,690],{"class":651},[645,698,699],{"class":654}," install",[645,701,658],{"class":654},[627,703,705],{"id":704},"_2-initialize-and-create-loggers","2. Initialize and create loggers",[635,707,712],{"className":708,"code":709,"filename":710,"language":711,"meta":641,"style":641},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import type { DrainContext } from 'evlog'\nimport { initLogger, log, createLogger } from 'evlog'\nimport { createAxiomDrain } from 'evlog\u002Faxiom'\nimport { createDrainPipeline } from 'evlog\u002Fpipeline'\n\nconst pipeline = createDrainPipeline\u003CDrainContext>({ batch: { size: 10 } })\nconst drain = pipeline(createAxiomDrain())\n\ninitLogger({\n  env: { service: 'my-script', environment: 'production' },\n  drain,\n})\n\n\u002F\u002F Every log is automatically drained\nlog.info({ action: 'sync_started' })\n\nconst syncLog = createLogger({ jobId: 'sync-001', source: 'postgres', target: 's3' })\nsyncLog.set({ recordsSynced: 150 })\nsyncLog.emit() \u002F\u002F drained automatically\n\n\u002F\u002F Flush remaining events before exit\nawait drain.flush()\n","scripts\u002Fsync-job.ts","typescript",[558,713,714,746,777,798,819,826,882,903,908,919,959,968,976,981,988,1020,1025,1085,1112,1128,1133,1139],{"__ignoreMap":641},[645,715,716,720,723,727,731,734,737,740,743],{"class":647,"line":648},[645,717,719],{"class":718},"s7zQu","import",[645,721,722],{"class":718}," type",[645,724,726],{"class":725},"sMK4o"," {",[645,728,730],{"class":729},"sTEyZ"," DrainContext",[645,732,733],{"class":725}," }",[645,735,736],{"class":718}," from",[645,738,739],{"class":725}," '",[645,741,742],{"class":654},"evlog",[645,744,745],{"class":725},"'\n",[645,747,749,751,753,756,759,762,764,767,769,771,773,775],{"class":647,"line":748},2,[645,750,719],{"class":718},[645,752,726],{"class":725},[645,754,755],{"class":729}," initLogger",[645,757,758],{"class":725},",",[645,760,761],{"class":729}," log",[645,763,758],{"class":725},[645,765,766],{"class":729}," createLogger",[645,768,733],{"class":725},[645,770,736],{"class":718},[645,772,739],{"class":725},[645,774,742],{"class":654},[645,776,745],{"class":725},[645,778,780,782,784,787,789,791,793,796],{"class":647,"line":779},3,[645,781,719],{"class":718},[645,783,726],{"class":725},[645,785,786],{"class":729}," createAxiomDrain",[645,788,733],{"class":725},[645,790,736],{"class":718},[645,792,739],{"class":725},[645,794,795],{"class":654},"evlog\u002Faxiom",[645,797,745],{"class":725},[645,799,801,803,805,808,810,812,814,817],{"class":647,"line":800},4,[645,802,719],{"class":718},[645,804,726],{"class":725},[645,806,807],{"class":729}," createDrainPipeline",[645,809,733],{"class":725},[645,811,736],{"class":718},[645,813,739],{"class":725},[645,815,816],{"class":654},"evlog\u002Fpipeline",[645,818,745],{"class":725},[645,820,822],{"class":647,"line":821},5,[645,823,825],{"emptyLinePlaceholder":824},true,"\n",[645,827,829,833,836,839,842,845,848,851,854,857,861,864,866,869,871,875,877,879],{"class":647,"line":828},6,[645,830,832],{"class":831},"spNyl","const",[645,834,835],{"class":729}," pipeline ",[645,837,838],{"class":725},"=",[645,840,807],{"class":841},"s2Zo4",[645,843,844],{"class":725},"\u003C",[645,846,847],{"class":651},"DrainContext",[645,849,850],{"class":725},">",[645,852,853],{"class":729},"(",[645,855,856],{"class":725},"{",[645,858,860],{"class":859},"swJcz"," batch",[645,862,863],{"class":725},":",[645,865,726],{"class":725},[645,867,868],{"class":859}," size",[645,870,863],{"class":725},[645,872,874],{"class":873},"sbssI"," 10",[645,876,733],{"class":725},[645,878,733],{"class":725},[645,880,881],{"class":729},")\n",[645,883,885,887,890,892,895,897,900],{"class":647,"line":884},7,[645,886,832],{"class":831},[645,888,889],{"class":729}," drain ",[645,891,838],{"class":725},[645,893,894],{"class":841}," pipeline",[645,896,853],{"class":729},[645,898,899],{"class":841},"createAxiomDrain",[645,901,902],{"class":729},"())\n",[645,904,906],{"class":647,"line":905},8,[645,907,825],{"emptyLinePlaceholder":824},[645,909,911,914,916],{"class":647,"line":910},9,[645,912,913],{"class":841},"initLogger",[645,915,853],{"class":729},[645,917,918],{"class":725},"{\n",[645,920,922,925,927,929,932,934,936,939,942,944,947,949,951,954,956],{"class":647,"line":921},10,[645,923,924],{"class":859},"  env",[645,926,863],{"class":725},[645,928,726],{"class":725},[645,930,931],{"class":859}," service",[645,933,863],{"class":725},[645,935,739],{"class":725},[645,937,938],{"class":654},"my-script",[645,940,941],{"class":725},"'",[645,943,758],{"class":725},[645,945,946],{"class":859}," environment",[645,948,863],{"class":725},[645,950,739],{"class":725},[645,952,953],{"class":654},"production",[645,955,941],{"class":725},[645,957,958],{"class":725}," },\n",[645,960,962,965],{"class":647,"line":961},11,[645,963,964],{"class":729},"  drain",[645,966,967],{"class":725},",\n",[645,969,971,974],{"class":647,"line":970},12,[645,972,973],{"class":725},"}",[645,975,881],{"class":729},[645,977,979],{"class":647,"line":978},13,[645,980,825],{"emptyLinePlaceholder":824},[645,982,984],{"class":647,"line":983},14,[645,985,987],{"class":986},"sHwdD","\u002F\u002F Every log is automatically drained\n",[645,989,991,994,997,1000,1002,1004,1007,1009,1011,1014,1016,1018],{"class":647,"line":990},15,[645,992,993],{"class":729},"log",[645,995,996],{"class":725},".",[645,998,999],{"class":841},"info",[645,1001,853],{"class":729},[645,1003,856],{"class":725},[645,1005,1006],{"class":859}," action",[645,1008,863],{"class":725},[645,1010,739],{"class":725},[645,1012,1013],{"class":654},"sync_started",[645,1015,941],{"class":725},[645,1017,733],{"class":725},[645,1019,881],{"class":729},[645,1021,1023],{"class":647,"line":1022},16,[645,1024,825],{"emptyLinePlaceholder":824},[645,1026,1028,1030,1033,1035,1037,1039,1041,1044,1046,1048,1051,1053,1055,1058,1060,1062,1065,1067,1069,1072,1074,1076,1079,1081,1083],{"class":647,"line":1027},17,[645,1029,832],{"class":831},[645,1031,1032],{"class":729}," syncLog ",[645,1034,838],{"class":725},[645,1036,766],{"class":841},[645,1038,853],{"class":729},[645,1040,856],{"class":725},[645,1042,1043],{"class":859}," jobId",[645,1045,863],{"class":725},[645,1047,739],{"class":725},[645,1049,1050],{"class":654},"sync-001",[645,1052,941],{"class":725},[645,1054,758],{"class":725},[645,1056,1057],{"class":859}," source",[645,1059,863],{"class":725},[645,1061,739],{"class":725},[645,1063,1064],{"class":654},"postgres",[645,1066,941],{"class":725},[645,1068,758],{"class":725},[645,1070,1071],{"class":859}," target",[645,1073,863],{"class":725},[645,1075,739],{"class":725},[645,1077,1078],{"class":654},"s3",[645,1080,941],{"class":725},[645,1082,733],{"class":725},[645,1084,881],{"class":729},[645,1086,1088,1091,1093,1096,1098,1100,1103,1105,1108,1110],{"class":647,"line":1087},18,[645,1089,1090],{"class":729},"syncLog",[645,1092,996],{"class":725},[645,1094,1095],{"class":841},"set",[645,1097,853],{"class":729},[645,1099,856],{"class":725},[645,1101,1102],{"class":859}," recordsSynced",[645,1104,863],{"class":725},[645,1106,1107],{"class":873}," 150",[645,1109,733],{"class":725},[645,1111,881],{"class":729},[645,1113,1115,1117,1119,1122,1125],{"class":647,"line":1114},19,[645,1116,1090],{"class":729},[645,1118,996],{"class":725},[645,1120,1121],{"class":841},"emit",[645,1123,1124],{"class":729},"() ",[645,1126,1127],{"class":986},"\u002F\u002F drained automatically\n",[645,1129,1131],{"class":647,"line":1130},20,[645,1132,825],{"emptyLinePlaceholder":824},[645,1134,1136],{"class":647,"line":1135},21,[645,1137,1138],{"class":986},"\u002F\u002F Flush remaining events before exit\n",[645,1140,1142,1145,1148,1150,1153],{"class":647,"line":1141},22,[645,1143,1144],{"class":718},"await",[645,1146,1147],{"class":729}," drain",[645,1149,996],{"class":725},[645,1151,1152],{"class":841},"flush",[645,1154,1155],{"class":729},"()\n",[567,1157,1158,1159,1162],{"color":999,"icon":13},"Always call ",[558,1160,1161],{},"drain.flush()"," before the process exits to ensure all buffered events are sent.",[567,1164,1165,1169,1170,1176,1177,1180,1181,1184],{"color":999,"icon":195},[1166,1167,1168],"strong",{},"Using vite-node?"," The ",[572,1171,1172,1175],{"href":193},[558,1173,1174],{},"evlog\u002Fvite"," plugin"," replaces the ",[558,1178,1179],{},"initLogger()"," call with compile-time auto-initialization, strips ",[558,1182,1183],{},"log.debug()"," from production builds, and injects source locations.",[623,1186,1188],{"id":1187},"createlogger-vs-createrequestlogger","createLogger vs createRequestLogger",[554,1190,1191],{},"evlog provides two manual logger constructors:",[554,1193,1194,1199],{},[1166,1195,1196],{},[558,1197,1198],{},"createLogger(context)"," - For non-HTTP contexts (scripts, CLI, queues):",[635,1201,1204],{"className":708,"code":1202,"filename":1203,"language":711,"meta":641,"style":641},"import { createLogger } from 'evlog'\n\nconst log = createLogger({ jobId: 'migrate-001', source: 'postgres' })\nlog.set({ recordsProcessed: 500 })\nlog.emit()\n","scripts\u002Fjob.ts",[558,1205,1206,1224,1228,1270,1294],{"__ignoreMap":641},[645,1207,1208,1210,1212,1214,1216,1218,1220,1222],{"class":647,"line":648},[645,1209,719],{"class":718},[645,1211,726],{"class":725},[645,1213,766],{"class":729},[645,1215,733],{"class":725},[645,1217,736],{"class":718},[645,1219,739],{"class":725},[645,1221,742],{"class":654},[645,1223,745],{"class":725},[645,1225,1226],{"class":647,"line":748},[645,1227,825],{"emptyLinePlaceholder":824},[645,1229,1230,1232,1235,1237,1239,1241,1243,1245,1247,1249,1252,1254,1256,1258,1260,1262,1264,1266,1268],{"class":647,"line":779},[645,1231,832],{"class":831},[645,1233,1234],{"class":729}," log ",[645,1236,838],{"class":725},[645,1238,766],{"class":841},[645,1240,853],{"class":729},[645,1242,856],{"class":725},[645,1244,1043],{"class":859},[645,1246,863],{"class":725},[645,1248,739],{"class":725},[645,1250,1251],{"class":654},"migrate-001",[645,1253,941],{"class":725},[645,1255,758],{"class":725},[645,1257,1057],{"class":859},[645,1259,863],{"class":725},[645,1261,739],{"class":725},[645,1263,1064],{"class":654},[645,1265,941],{"class":725},[645,1267,733],{"class":725},[645,1269,881],{"class":729},[645,1271,1272,1274,1276,1278,1280,1282,1285,1287,1290,1292],{"class":647,"line":800},[645,1273,993],{"class":729},[645,1275,996],{"class":725},[645,1277,1095],{"class":841},[645,1279,853],{"class":729},[645,1281,856],{"class":725},[645,1283,1284],{"class":859}," recordsProcessed",[645,1286,863],{"class":725},[645,1288,1289],{"class":873}," 500",[645,1291,733],{"class":725},[645,1293,881],{"class":729},[645,1295,1296,1298,1300,1302],{"class":647,"line":821},[645,1297,993],{"class":729},[645,1299,996],{"class":725},[645,1301,1121],{"class":841},[645,1303,1155],{"class":729},[554,1305,1306,1311],{},[1166,1307,1308],{},[558,1309,1310],{},"createRequestLogger(requestMeta)"," - For HTTP-like contexts where you want method\u002Fpath\u002Fstatus tracking:",[635,1313,1316],{"className":708,"code":1314,"filename":1315,"language":711,"meta":641,"style":641},"import { createRequestLogger } from 'evlog'\n\nconst log = createRequestLogger({\n  method: 'POST',\n  path: '\u002Fwebhook\u002Fstripe',\n})\nlog.set({ event: 'invoice.paid', customerId: 'cus_123' })\nlog.emit()\n","scripts\u002Fwebhook-handler.ts",[558,1317,1318,1337,1341,1355,1371,1387,1393,1435],{"__ignoreMap":641},[645,1319,1320,1322,1324,1327,1329,1331,1333,1335],{"class":647,"line":648},[645,1321,719],{"class":718},[645,1323,726],{"class":725},[645,1325,1326],{"class":729}," createRequestLogger",[645,1328,733],{"class":725},[645,1330,736],{"class":718},[645,1332,739],{"class":725},[645,1334,742],{"class":654},[645,1336,745],{"class":725},[645,1338,1339],{"class":647,"line":748},[645,1340,825],{"emptyLinePlaceholder":824},[645,1342,1343,1345,1347,1349,1351,1353],{"class":647,"line":779},[645,1344,832],{"class":831},[645,1346,1234],{"class":729},[645,1348,838],{"class":725},[645,1350,1326],{"class":841},[645,1352,853],{"class":729},[645,1354,918],{"class":725},[645,1356,1357,1360,1362,1364,1367,1369],{"class":647,"line":800},[645,1358,1359],{"class":859},"  method",[645,1361,863],{"class":725},[645,1363,739],{"class":725},[645,1365,1366],{"class":654},"POST",[645,1368,941],{"class":725},[645,1370,967],{"class":725},[645,1372,1373,1376,1378,1380,1383,1385],{"class":647,"line":821},[645,1374,1375],{"class":859},"  path",[645,1377,863],{"class":725},[645,1379,739],{"class":725},[645,1381,1382],{"class":654},"\u002Fwebhook\u002Fstripe",[645,1384,941],{"class":725},[645,1386,967],{"class":725},[645,1388,1389,1391],{"class":647,"line":828},[645,1390,973],{"class":725},[645,1392,881],{"class":729},[645,1394,1395,1397,1399,1401,1403,1405,1408,1410,1412,1415,1417,1419,1422,1424,1426,1429,1431,1433],{"class":647,"line":884},[645,1396,993],{"class":729},[645,1398,996],{"class":725},[645,1400,1095],{"class":841},[645,1402,853],{"class":729},[645,1404,856],{"class":725},[645,1406,1407],{"class":859}," event",[645,1409,863],{"class":725},[645,1411,739],{"class":725},[645,1413,1414],{"class":654},"invoice.paid",[645,1416,941],{"class":725},[645,1418,758],{"class":725},[645,1420,1421],{"class":859}," customerId",[645,1423,863],{"class":725},[645,1425,739],{"class":725},[645,1427,1428],{"class":654},"cus_123",[645,1430,941],{"class":725},[645,1432,733],{"class":725},[645,1434,881],{"class":729},[645,1436,1437,1439,1441,1443],{"class":647,"line":905},[645,1438,993],{"class":729},[645,1440,996],{"class":725},[645,1442,1121],{"class":841},[645,1444,1155],{"class":729},[554,1446,1447,1448,1451],{},"Both require manual ",[558,1449,1450],{},"log.emit()"," calls since there is no automatic lifecycle to hook into.",[623,1453,51],{"id":1454},"wide-events",[554,1456,1457],{},"Build up context progressively, then emit:",[635,1459,1462],{"className":708,"code":1460,"filename":1461,"language":711,"meta":641,"style":641},"import { initLogger, createLogger } from 'evlog'\n\ninitLogger({\n  env: { service: 'migrate' },\n})\n\nconst log = createLogger({ task: 'user-migration' })\n\nconst users = await db.query('SELECT * FROM legacy_users')\nlog.set({ found: users.length })\n\nlet migrated = 0\nfor (const user of users) {\n  await newDb.upsert({ id: user.id, email: user.email, plan: user.plan })\n  migrated++\n}\n\nlog.set({ migrated, status: 'complete' })\nlog.emit()\n","scripts\u002Fmigrate-users.ts",[558,1463,1464,1486,1490,1498,1519,1525,1529,1559,1563,1594,1623,1627,1640,1660,1722,1730,1735,1739,1772],{"__ignoreMap":641},[645,1465,1466,1468,1470,1472,1474,1476,1478,1480,1482,1484],{"class":647,"line":648},[645,1467,719],{"class":718},[645,1469,726],{"class":725},[645,1471,755],{"class":729},[645,1473,758],{"class":725},[645,1475,766],{"class":729},[645,1477,733],{"class":725},[645,1479,736],{"class":718},[645,1481,739],{"class":725},[645,1483,742],{"class":654},[645,1485,745],{"class":725},[645,1487,1488],{"class":647,"line":748},[645,1489,825],{"emptyLinePlaceholder":824},[645,1491,1492,1494,1496],{"class":647,"line":779},[645,1493,913],{"class":841},[645,1495,853],{"class":729},[645,1497,918],{"class":725},[645,1499,1500,1502,1504,1506,1508,1510,1512,1515,1517],{"class":647,"line":800},[645,1501,924],{"class":859},[645,1503,863],{"class":725},[645,1505,726],{"class":725},[645,1507,931],{"class":859},[645,1509,863],{"class":725},[645,1511,739],{"class":725},[645,1513,1514],{"class":654},"migrate",[645,1516,941],{"class":725},[645,1518,958],{"class":725},[645,1520,1521,1523],{"class":647,"line":821},[645,1522,973],{"class":725},[645,1524,881],{"class":729},[645,1526,1527],{"class":647,"line":828},[645,1528,825],{"emptyLinePlaceholder":824},[645,1530,1531,1533,1535,1537,1539,1541,1543,1546,1548,1550,1553,1555,1557],{"class":647,"line":884},[645,1532,832],{"class":831},[645,1534,1234],{"class":729},[645,1536,838],{"class":725},[645,1538,766],{"class":841},[645,1540,853],{"class":729},[645,1542,856],{"class":725},[645,1544,1545],{"class":859}," task",[645,1547,863],{"class":725},[645,1549,739],{"class":725},[645,1551,1552],{"class":654},"user-migration",[645,1554,941],{"class":725},[645,1556,733],{"class":725},[645,1558,881],{"class":729},[645,1560,1561],{"class":647,"line":905},[645,1562,825],{"emptyLinePlaceholder":824},[645,1564,1565,1567,1570,1572,1575,1578,1580,1583,1585,1587,1590,1592],{"class":647,"line":910},[645,1566,832],{"class":831},[645,1568,1569],{"class":729}," users ",[645,1571,838],{"class":725},[645,1573,1574],{"class":718}," await",[645,1576,1577],{"class":729}," db",[645,1579,996],{"class":725},[645,1581,1582],{"class":841},"query",[645,1584,853],{"class":729},[645,1586,941],{"class":725},[645,1588,1589],{"class":654},"SELECT * FROM legacy_users",[645,1591,941],{"class":725},[645,1593,881],{"class":729},[645,1595,1596,1598,1600,1602,1604,1606,1609,1611,1614,1616,1619,1621],{"class":647,"line":921},[645,1597,993],{"class":729},[645,1599,996],{"class":725},[645,1601,1095],{"class":841},[645,1603,853],{"class":729},[645,1605,856],{"class":725},[645,1607,1608],{"class":859}," found",[645,1610,863],{"class":725},[645,1612,1613],{"class":729}," users",[645,1615,996],{"class":725},[645,1617,1618],{"class":729},"length ",[645,1620,973],{"class":725},[645,1622,881],{"class":729},[645,1624,1625],{"class":647,"line":961},[645,1626,825],{"emptyLinePlaceholder":824},[645,1628,1629,1632,1635,1637],{"class":647,"line":970},[645,1630,1631],{"class":831},"let",[645,1633,1634],{"class":729}," migrated ",[645,1636,838],{"class":725},[645,1638,1639],{"class":873}," 0\n",[645,1641,1642,1645,1647,1649,1652,1655,1658],{"class":647,"line":978},[645,1643,1644],{"class":718},"for",[645,1646,574],{"class":729},[645,1648,832],{"class":831},[645,1650,1651],{"class":729}," user ",[645,1653,1654],{"class":725},"of",[645,1656,1657],{"class":729}," users) ",[645,1659,918],{"class":725},[645,1661,1662,1665,1668,1670,1673,1675,1677,1680,1682,1685,1687,1690,1692,1695,1697,1699,1701,1704,1706,1709,1711,1713,1715,1718,1720],{"class":647,"line":983},[645,1663,1664],{"class":718},"  await",[645,1666,1667],{"class":729}," newDb",[645,1669,996],{"class":725},[645,1671,1672],{"class":841},"upsert",[645,1674,853],{"class":859},[645,1676,856],{"class":725},[645,1678,1679],{"class":859}," id",[645,1681,863],{"class":725},[645,1683,1684],{"class":729}," user",[645,1686,996],{"class":725},[645,1688,1689],{"class":729},"id",[645,1691,758],{"class":725},[645,1693,1694],{"class":859}," email",[645,1696,863],{"class":725},[645,1698,1684],{"class":729},[645,1700,996],{"class":725},[645,1702,1703],{"class":729},"email",[645,1705,758],{"class":725},[645,1707,1708],{"class":859}," plan",[645,1710,863],{"class":725},[645,1712,1684],{"class":729},[645,1714,996],{"class":725},[645,1716,1717],{"class":729},"plan",[645,1719,733],{"class":725},[645,1721,881],{"class":859},[645,1723,1724,1727],{"class":647,"line":990},[645,1725,1726],{"class":729},"  migrated",[645,1728,1729],{"class":725},"++\n",[645,1731,1732],{"class":647,"line":1022},[645,1733,1734],{"class":725},"}\n",[645,1736,1737],{"class":647,"line":1027},[645,1738,825],{"emptyLinePlaceholder":824},[645,1740,1741,1743,1745,1747,1749,1751,1754,1756,1759,1761,1763,1766,1768,1770],{"class":647,"line":1087},[645,1742,993],{"class":729},[645,1744,996],{"class":725},[645,1746,1095],{"class":841},[645,1748,853],{"class":729},[645,1750,856],{"class":725},[645,1752,1753],{"class":729}," migrated",[645,1755,758],{"class":725},[645,1757,1758],{"class":859}," status",[645,1760,863],{"class":725},[645,1762,739],{"class":725},[645,1764,1765],{"class":654},"complete",[645,1767,941],{"class":725},[645,1769,733],{"class":725},[645,1771,881],{"class":729},[645,1773,1774,1776,1778,1780],{"class":647,"line":1114},[645,1775,993],{"class":729},[645,1777,996],{"class":725},[645,1779,1121],{"class":841},[645,1781,1155],{"class":729},[635,1783,1786],{"className":637,"code":1784,"filename":1785,"language":640,"meta":641,"style":641},"14:58:15 INFO [migrate] user-migration\n  ├─ migrated: 1250\n  ├─ found: 1250\n  ├─ status: complete\n  └─ task: user-migration\n","Terminal output",[558,1787,1788,1799,1810,1819,1829],{"__ignoreMap":641},[645,1789,1790,1793,1796],{"class":647,"line":648},[645,1791,1792],{"class":651},"14:58:15",[645,1794,1795],{"class":654}," INFO",[645,1797,1798],{"class":729}," [migrate] user-migration\n",[645,1800,1801,1804,1807],{"class":647,"line":748},[645,1802,1803],{"class":651},"  ├─",[645,1805,1806],{"class":654}," migrated:",[645,1808,1809],{"class":873}," 1250\n",[645,1811,1812,1814,1817],{"class":647,"line":779},[645,1813,1803],{"class":651},[645,1815,1816],{"class":654}," found:",[645,1818,1809],{"class":873},[645,1820,1821,1823,1826],{"class":647,"line":800},[645,1822,1803],{"class":651},[645,1824,1825],{"class":654}," status:",[645,1827,1828],{"class":654}," complete\n",[645,1830,1831,1834,1837],{"class":647,"line":821},[645,1832,1833],{"class":651},"  └─",[645,1835,1836],{"class":654}," task:",[645,1838,1839],{"class":654}," user-migration\n",[623,1841,1843],{"id":1842},"error-handling","Error Handling",[554,1845,1846,1847,1850],{},"Use ",[558,1848,1849],{},"createError"," for structured errors:",[635,1852,1854],{"className":708,"code":1853,"filename":710,"language":711,"meta":641,"style":641},"import { createError, parseError } from 'evlog'\n\ntry {\n  const result = await externalApi.sync()\n  if (!result.ok) {\n    throw createError({\n      message: 'Sync failed',\n      why: `API returned ${result.status}`,\n      fix: 'Check the API status page and retry',\n    })\n  }\n} catch (error) {\n  log.error(error instanceof Error ? error : new Error(String(error)))\n  log.emit()\n\n  const { message, why, fix } = parseError(error)\n  console.error(`${message}\\nWhy: ${why}\\nFix: ${fix}`)\n  process.exit(1)\n}\n",[558,1855,1856,1880,1884,1892,1915,1938,1949,1965,1993,2009,2016,2021,2033,2079,2089,2093,2124,2170,2187],{"__ignoreMap":641},[645,1857,1858,1860,1862,1865,1867,1870,1872,1874,1876,1878],{"class":647,"line":648},[645,1859,719],{"class":718},[645,1861,726],{"class":725},[645,1863,1864],{"class":729}," createError",[645,1866,758],{"class":725},[645,1868,1869],{"class":729}," parseError",[645,1871,733],{"class":725},[645,1873,736],{"class":718},[645,1875,739],{"class":725},[645,1877,742],{"class":654},[645,1879,745],{"class":725},[645,1881,1882],{"class":647,"line":748},[645,1883,825],{"emptyLinePlaceholder":824},[645,1885,1886,1889],{"class":647,"line":779},[645,1887,1888],{"class":718},"try",[645,1890,1891],{"class":725}," {\n",[645,1893,1894,1897,1900,1903,1905,1908,1910,1913],{"class":647,"line":800},[645,1895,1896],{"class":831},"  const",[645,1898,1899],{"class":729}," result",[645,1901,1902],{"class":725}," =",[645,1904,1574],{"class":718},[645,1906,1907],{"class":729}," externalApi",[645,1909,996],{"class":725},[645,1911,1912],{"class":841},"sync",[645,1914,1155],{"class":859},[645,1916,1917,1920,1922,1925,1928,1930,1933,1936],{"class":647,"line":821},[645,1918,1919],{"class":718},"  if",[645,1921,574],{"class":859},[645,1923,1924],{"class":725},"!",[645,1926,1927],{"class":729},"result",[645,1929,996],{"class":725},[645,1931,1932],{"class":729},"ok",[645,1934,1935],{"class":859},") ",[645,1937,918],{"class":725},[645,1939,1940,1943,1945,1947],{"class":647,"line":828},[645,1941,1942],{"class":718},"    throw",[645,1944,1864],{"class":841},[645,1946,853],{"class":859},[645,1948,918],{"class":725},[645,1950,1951,1954,1956,1958,1961,1963],{"class":647,"line":884},[645,1952,1953],{"class":859},"      message",[645,1955,863],{"class":725},[645,1957,739],{"class":725},[645,1959,1960],{"class":654},"Sync failed",[645,1962,941],{"class":725},[645,1964,967],{"class":725},[645,1966,1967,1970,1972,1975,1978,1981,1983,1985,1988,1991],{"class":647,"line":905},[645,1968,1969],{"class":859},"      why",[645,1971,863],{"class":725},[645,1973,1974],{"class":725}," `",[645,1976,1977],{"class":654},"API returned ",[645,1979,1980],{"class":725},"${",[645,1982,1927],{"class":729},[645,1984,996],{"class":725},[645,1986,1987],{"class":729},"status",[645,1989,1990],{"class":725},"}`",[645,1992,967],{"class":725},[645,1994,1995,1998,2000,2002,2005,2007],{"class":647,"line":910},[645,1996,1997],{"class":859},"      fix",[645,1999,863],{"class":725},[645,2001,739],{"class":725},[645,2003,2004],{"class":654},"Check the API status page and retry",[645,2006,941],{"class":725},[645,2008,967],{"class":725},[645,2010,2011,2014],{"class":647,"line":921},[645,2012,2013],{"class":725},"    }",[645,2015,881],{"class":859},[645,2017,2018],{"class":647,"line":961},[645,2019,2020],{"class":725},"  }\n",[645,2022,2023,2025,2028,2031],{"class":647,"line":970},[645,2024,973],{"class":725},[645,2026,2027],{"class":718}," catch",[645,2029,2030],{"class":729}," (error) ",[645,2032,918],{"class":725},[645,2034,2035,2038,2040,2043,2045,2047,2050,2053,2056,2059,2062,2065,2067,2069,2072,2074,2076],{"class":647,"line":978},[645,2036,2037],{"class":729},"  log",[645,2039,996],{"class":725},[645,2041,2042],{"class":841},"error",[645,2044,853],{"class":859},[645,2046,2042],{"class":729},[645,2048,2049],{"class":725}," instanceof",[645,2051,2052],{"class":651}," Error",[645,2054,2055],{"class":725}," ?",[645,2057,2058],{"class":729}," error",[645,2060,2061],{"class":725}," :",[645,2063,2064],{"class":725}," new",[645,2066,2052],{"class":841},[645,2068,853],{"class":859},[645,2070,2071],{"class":841},"String",[645,2073,853],{"class":859},[645,2075,2042],{"class":729},[645,2077,2078],{"class":859},")))\n",[645,2080,2081,2083,2085,2087],{"class":647,"line":983},[645,2082,2037],{"class":729},[645,2084,996],{"class":725},[645,2086,1121],{"class":841},[645,2088,1155],{"class":859},[645,2090,2091],{"class":647,"line":990},[645,2092,825],{"emptyLinePlaceholder":824},[645,2094,2095,2097,2099,2102,2104,2107,2109,2112,2114,2116,2118,2120,2122],{"class":647,"line":1022},[645,2096,1896],{"class":831},[645,2098,726],{"class":725},[645,2100,2101],{"class":729}," message",[645,2103,758],{"class":725},[645,2105,2106],{"class":729}," why",[645,2108,758],{"class":725},[645,2110,2111],{"class":729}," fix",[645,2113,733],{"class":725},[645,2115,1902],{"class":725},[645,2117,1869],{"class":841},[645,2119,853],{"class":859},[645,2121,2042],{"class":729},[645,2123,881],{"class":859},[645,2125,2126,2129,2131,2133,2135,2138,2141,2143,2146,2149,2151,2154,2156,2158,2161,2163,2166,2168],{"class":647,"line":1027},[645,2127,2128],{"class":729},"  console",[645,2130,996],{"class":725},[645,2132,2042],{"class":841},[645,2134,853],{"class":859},[645,2136,2137],{"class":725},"`${",[645,2139,2140],{"class":729},"message",[645,2142,973],{"class":725},[645,2144,2145],{"class":729},"\\n",[645,2147,2148],{"class":654},"Why: ",[645,2150,1980],{"class":725},[645,2152,2153],{"class":729},"why",[645,2155,973],{"class":725},[645,2157,2145],{"class":729},[645,2159,2160],{"class":654},"Fix: ",[645,2162,1980],{"class":725},[645,2164,2165],{"class":729},"fix",[645,2167,1990],{"class":725},[645,2169,881],{"class":859},[645,2171,2172,2175,2177,2180,2182,2185],{"class":647,"line":1087},[645,2173,2174],{"class":729},"  process",[645,2176,996],{"class":725},[645,2178,2179],{"class":841},"exit",[645,2181,853],{"class":859},[645,2183,2184],{"class":873},"1",[645,2186,881],{"class":859},[645,2188,2189],{"class":647,"line":1114},[645,2190,1734],{"class":725},[623,2192,170],{"id":2193},"configuration",[554,2195,2196,2197,2200,2201,2203],{},"See the ",[572,2198,2199],{"href":171},"Configuration reference"," for all available options (",[558,2202,913],{},", middleware options, sampling, silent mode, etc.).",[623,2205,2207],{"id":2206},"drain-enrichers","Drain & Enrichers",[554,2209,2210,2211,863],{},"Configure drain in ",[558,2212,913],{},[635,2214,2217],{"className":708,"code":2215,"filename":2216,"language":711,"meta":641,"style":641},"import type { DrainContext } from 'evlog'\nimport { initLogger } 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\ninitLogger({\n  env: { service: 'my-script' },\n  drain,\n})\n","scripts\u002Finit-logger.ts",[558,2218,2219,2239,2257,2275,2293,2297,2317,2345,2364,2370,2386,2390,2398,2418,2424],{"__ignoreMap":641},[645,2220,2221,2223,2225,2227,2229,2231,2233,2235,2237],{"class":647,"line":648},[645,2222,719],{"class":718},[645,2224,722],{"class":718},[645,2226,726],{"class":725},[645,2228,730],{"class":729},[645,2230,733],{"class":725},[645,2232,736],{"class":718},[645,2234,739],{"class":725},[645,2236,742],{"class":654},[645,2238,745],{"class":725},[645,2240,2241,2243,2245,2247,2249,2251,2253,2255],{"class":647,"line":748},[645,2242,719],{"class":718},[645,2244,726],{"class":725},[645,2246,755],{"class":729},[645,2248,733],{"class":725},[645,2250,736],{"class":718},[645,2252,739],{"class":725},[645,2254,742],{"class":654},[645,2256,745],{"class":725},[645,2258,2259,2261,2263,2265,2267,2269,2271,2273],{"class":647,"line":779},[645,2260,719],{"class":718},[645,2262,726],{"class":725},[645,2264,786],{"class":729},[645,2266,733],{"class":725},[645,2268,736],{"class":718},[645,2270,739],{"class":725},[645,2272,795],{"class":654},[645,2274,745],{"class":725},[645,2276,2277,2279,2281,2283,2285,2287,2289,2291],{"class":647,"line":800},[645,2278,719],{"class":718},[645,2280,726],{"class":725},[645,2282,807],{"class":729},[645,2284,733],{"class":725},[645,2286,736],{"class":718},[645,2288,739],{"class":725},[645,2290,816],{"class":654},[645,2292,745],{"class":725},[645,2294,2295],{"class":647,"line":821},[645,2296,825],{"emptyLinePlaceholder":824},[645,2298,2299,2301,2303,2305,2307,2309,2311,2313,2315],{"class":647,"line":828},[645,2300,832],{"class":831},[645,2302,835],{"class":729},[645,2304,838],{"class":725},[645,2306,807],{"class":841},[645,2308,844],{"class":725},[645,2310,847],{"class":651},[645,2312,850],{"class":725},[645,2314,853],{"class":729},[645,2316,918],{"class":725},[645,2318,2319,2322,2324,2326,2328,2330,2333,2335,2338,2340,2343],{"class":647,"line":884},[645,2320,2321],{"class":859},"  batch",[645,2323,863],{"class":725},[645,2325,726],{"class":725},[645,2327,868],{"class":859},[645,2329,863],{"class":725},[645,2331,2332],{"class":873}," 50",[645,2334,758],{"class":725},[645,2336,2337],{"class":859}," intervalMs",[645,2339,863],{"class":725},[645,2341,2342],{"class":873}," 5000",[645,2344,958],{"class":725},[645,2346,2347,2350,2352,2354,2357,2359,2362],{"class":647,"line":905},[645,2348,2349],{"class":859},"  retry",[645,2351,863],{"class":725},[645,2353,726],{"class":725},[645,2355,2356],{"class":859}," maxAttempts",[645,2358,863],{"class":725},[645,2360,2361],{"class":873}," 3",[645,2363,958],{"class":725},[645,2365,2366,2368],{"class":647,"line":910},[645,2367,973],{"class":725},[645,2369,881],{"class":729},[645,2371,2372,2374,2376,2378,2380,2382,2384],{"class":647,"line":921},[645,2373,832],{"class":831},[645,2375,889],{"class":729},[645,2377,838],{"class":725},[645,2379,894],{"class":841},[645,2381,853],{"class":729},[645,2383,899],{"class":841},[645,2385,902],{"class":729},[645,2387,2388],{"class":647,"line":961},[645,2389,825],{"emptyLinePlaceholder":824},[645,2391,2392,2394,2396],{"class":647,"line":970},[645,2393,913],{"class":841},[645,2395,853],{"class":729},[645,2397,918],{"class":725},[645,2399,2400,2402,2404,2406,2408,2410,2412,2414,2416],{"class":647,"line":978},[645,2401,924],{"class":859},[645,2403,863],{"class":725},[645,2405,726],{"class":725},[645,2407,931],{"class":859},[645,2409,863],{"class":725},[645,2411,739],{"class":725},[645,2413,938],{"class":654},[645,2415,941],{"class":725},[645,2417,958],{"class":725},[645,2419,2420,2422],{"class":647,"line":983},[645,2421,964],{"class":729},[645,2423,967],{"class":725},[645,2425,2426,2428],{"class":647,"line":990},[645,2427,973],{"class":725},[645,2429,881],{"class":729},[567,2431,2196,2432,2434],{"color":999,"icon":13},[572,2433,447],{"href":452}," docs for all available drain adapters (Axiom, OTLP, PostHog, Sentry, Better Stack).",[567,2436,2438,2439,2444],{"color":569,"icon":2437},"i-lucide-arrow-right","See the full ",[572,2440,2443],{"href":2441,"rel":2442},"https:\u002F\u002Fgithub.com\u002Fhugorcd\u002Fevlog\u002Ftree\u002Fmain\u002Fexamples\u002Fbun-script",[616],"bun-script example"," for a complete working script.",[623,2446,2448],{"id":2447},"next-steps","Next Steps",[588,2450,2451,2456,2461,2466],{},[591,2452,2453,2455],{},[572,2454,51],{"href":52},": Design comprehensive events with context layering",[591,2457,2458,2460],{},[572,2459,447],{"href":452},": Send logs to Axiom, Sentry, PostHog, and more",[591,2462,2463,2465],{},[572,2464,175],{"href":176},": Control log volume with head and tail sampling",[591,2467,2468,2470,2471,2473,2474,2476,2477,2480],{},[572,2469,56],{"href":57},": Throw errors with ",[558,2472,2153],{},", ",[558,2475,2165],{},", and ",[558,2478,2479],{},"link"," fields",[2482,2483,2484],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}",{"title":641,"searchDepth":748,"depth":748,"links":2486},[2487,2491,2492,2493,2494,2495,2496],{"id":625,"depth":748,"text":20,"children":2488},[2489,2490],{"id":629,"depth":779,"text":630},{"id":704,"depth":779,"text":705},{"id":1187,"depth":748,"text":1188},{"id":1454,"depth":748,"text":51},{"id":1842,"depth":748,"text":1843},{"id":2193,"depth":748,"text":170},{"id":2206,"depth":748,"text":2207},{"id":2447,"depth":748,"text":2448},"Use evlog in standalone TypeScript scripts, CLI tools, queues, cron jobs, and any TypeScript process.","md",null,{},{"title":271,"icon":183},{"title":549,"description":2497},"T_ry9G5iw54j1Rz3a6ghk_H_ohvtLt2rZ2QFuMkiGMM",[2505,2507],{"title":266,"path":267,"stem":268,"description":2506,"icon":269,"children":-1},"Wide events, structured errors, and logging in Cloudflare Workers and Durable Objects.",{"title":275,"path":276,"stem":277,"description":2508,"icon":278,"children":-1},"Wide events and structured errors in Astro server middleware.",1778338242582]