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