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