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