[{"data":1,"prerenderedAt":2492},["ShallowReactive",2],{"navigation_docs":3,"-integrate-frameworks-standalone":528,"-integrate-frameworks-standalone-surround":2487},[4,29,76,122,304,435,496],{"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,431],{"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},"Enrichers","\u002Fuse-cases\u002Fenrichers","5.use-cases\u002F5.enrichers",{"title":432,"path":433,"stem":434},"eve","\u002Fuse-cases\u002Feve","5.use-cases\u002F5.eve",{"title":436,"path":437,"stem":438,"children":439,"page":28},"Extend","\u002Fextend","6.extend",[440,444,449,454,458,463,467,471,476,481,486,491],{"title":128,"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":448},"Diagnostics channel","\u002Fextend\u002Fdiagnostics-channel","6.extend\u002F11.diagnostics-channel",{"title":459,"path":460,"stem":461,"icon":462},"FS reader","\u002Fextend\u002Ffs-reader","6.extend\u002F2.fs-reader","i-lucide-folder-search",{"title":403,"path":464,"stem":465,"icon":466},"\u002Fextend\u002Fconsumer-recipes","6.extend\u002F3.consumer-recipes","i-lucide-chef-hat",{"title":468,"path":469,"stem":470},"Plugins","\u002Fextend\u002Fplugins","6.extend\u002F4.plugins",{"title":472,"path":473,"stem":474,"icon":475},"Custom enrichers","\u002Fextend\u002Fcustom-enrichers","6.extend\u002F5.custom-enrichers","i-lucide-sparkles",{"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,"icon":495},"Drain pipeline","\u002Fextend\u002Fdrain-pipeline","6.extend\u002F9.drain-pipeline","i-lucide-workflow",{"title":424,"path":497,"stem":498,"children":499,"page":28},"\u002Freference","7.reference",[500,504,507,512,516,520,524],{"title":501,"path":502,"stem":503},"Configuration","\u002Freference\u002Fconfiguration","7.reference\u002F1.configuration",{"title":370,"path":505,"stem":506,"icon":373},"\u002Freference\u002Fperformance","7.reference\u002F2.performance",{"title":508,"path":509,"stem":510,"icon":511},"Vite Plugin","\u002Freference\u002Fvite-plugin","7.reference\u002F3.vite-plugin","i-custom-vite",{"title":513,"path":514,"stem":515,"icon":376},"Best Practices","\u002Freference\u002Fbest-practices","7.reference\u002F4.best-practices",{"title":517,"path":518,"stem":519},"evlog vs pino, winston, consola","\u002Freference\u002Fvs-other-loggers","7.reference\u002F5.vs-other-loggers",{"title":521,"path":522,"stem":523,"icon":475},"Agent Skills","\u002Freference\u002Fagent-skills","7.reference\u002F6.agent-skills",{"title":525,"path":526,"stem":527},"Log cost","\u002Freference\u002Fcost","7.reference\u002F7.cost",{"id":529,"title":530,"body":531,"description":2480,"extension":2481,"links":2482,"meta":2483,"navigation":2484,"path":287,"seo":2485,"stem":288,"__hash__":2486},"docs\u002F4.integrate\u002Fframeworks\u002F13.standalone.md","Standalone TypeScript",{"type":532,"value":533,"toc":2468},"minimark",[534,547,561,604,608,613,684,688,1138,1146,1168,1172,1175,1183,1287,1295,1428,1435,1438,1441,1765,1823,1827,1834,2174,2177,2187,2191,2196,2413,2418,2428,2432,2464],[535,536,537,538,542,543,546],"p",{},"For scripts, CLI tools, queue workers, cron jobs, and any TypeScript process that doesn't use a web framework, evlog provides ",[539,540,541],"code",{},"createLogger"," and ",[539,544,545],{},"createRequestLogger"," from the core package.",[548,549,552,553,556,557,560],"callout",{"color":550,"icon":551},"neutral","i-lucide-globe","For scripts, queue workers, cron, and CLIs, this page is the reference. On Cloudflare Workers, prefer ",[554,555,281],"a",{"href":282}," (",[539,558,559],{},"createWorkersLogger",").",[562,563,566,569,591],"prompt",{":actions":564,"description":565,"icon":71},"[\"copy\",\"cursor\",\"claude\"]","Set up evlog in my TypeScript project",[535,567,568],{},"Set up evlog in my TypeScript project for scripts, workers, or CLI tools.",[570,571,572,576,579,582,585,588],"ul",{},[573,574,575],"li",{},"Install evlog: pnpm add evlog",[573,577,578],{},"Import initLogger and createLogger (or createRequestLogger) from 'evlog'",[573,580,581],{},"Call initLogger({ env: { service: 'my-script' } }) once at startup",[573,583,584],{},"Create a logger per logical operation with createLogger({ jobId, source })",[573,586,587],{},"Use log.set() to accumulate context as the operation progresses",[573,589,590],{},"Call log.emit() manually when the operation completes",[535,592,593,594,599,600],{},"Docs: ",[554,595,596],{"href":596,"rel":597},"https:\u002F\u002Fwww.evlog.dev\u002Fintegrate\u002Fframeworks\u002Fstandalone",[598],"nofollow","\nAdapters: ",[554,601,602],{"href":602,"rel":603},"https:\u002F\u002Fwww.evlog.dev\u002Fintegrate\u002Fadapters\u002Foverview",[598],[605,606,24],"h2",{"id":607},"quick-start",[609,610,612],"h3",{"id":611},"_1-install","1. Install",[614,615,616,641,655,669],"code-group",{},[617,618,624],"pre",{"className":619,"code":620,"filename":621,"language":622,"meta":623,"style":623},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","pnpm add evlog\n","pnpm","bash","",[539,625,626],{"__ignoreMap":623},[627,628,631,634,638],"span",{"class":629,"line":630},"line",1,[627,632,621],{"class":633},"sBMFI",[627,635,637],{"class":636},"sfazB"," add",[627,639,640],{"class":636}," evlog\n",[617,642,645],{"className":619,"code":643,"filename":644,"language":622,"meta":623,"style":623},"bun add evlog\n","bun",[539,646,647],{"__ignoreMap":623},[627,648,649,651,653],{"class":629,"line":630},[627,650,644],{"class":633},[627,652,637],{"class":636},[627,654,640],{"class":636},[617,656,659],{"className":619,"code":657,"filename":658,"language":622,"meta":623,"style":623},"yarn add evlog\n","yarn",[539,660,661],{"__ignoreMap":623},[627,662,663,665,667],{"class":629,"line":630},[627,664,658],{"class":633},[627,666,637],{"class":636},[627,668,640],{"class":636},[617,670,673],{"className":619,"code":671,"filename":672,"language":622,"meta":623,"style":623},"npm install evlog\n","npm",[539,674,675],{"__ignoreMap":623},[627,676,677,679,682],{"class":629,"line":630},[627,678,672],{"class":633},[627,680,681],{"class":636}," install",[627,683,640],{"class":636},[609,685,687],{"id":686},"_2-initialize-and-create-loggers","2. Initialize and create loggers",[617,689,694],{"className":690,"code":691,"filename":692,"language":693,"meta":623,"style":623},"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",[539,695,696,728,759,780,801,808,864,885,890,901,941,950,958,963,970,1002,1007,1067,1094,1110,1115,1121],{"__ignoreMap":623},[627,697,698,702,705,709,713,716,719,722,725],{"class":629,"line":630},[627,699,701],{"class":700},"s7zQu","import",[627,703,704],{"class":700}," type",[627,706,708],{"class":707},"sMK4o"," {",[627,710,712],{"class":711},"sTEyZ"," DrainContext",[627,714,715],{"class":707}," }",[627,717,718],{"class":700}," from",[627,720,721],{"class":707}," '",[627,723,724],{"class":636},"evlog",[627,726,727],{"class":707},"'\n",[627,729,731,733,735,738,741,744,746,749,751,753,755,757],{"class":629,"line":730},2,[627,732,701],{"class":700},[627,734,708],{"class":707},[627,736,737],{"class":711}," initLogger",[627,739,740],{"class":707},",",[627,742,743],{"class":711}," log",[627,745,740],{"class":707},[627,747,748],{"class":711}," createLogger",[627,750,715],{"class":707},[627,752,718],{"class":700},[627,754,721],{"class":707},[627,756,724],{"class":636},[627,758,727],{"class":707},[627,760,762,764,766,769,771,773,775,778],{"class":629,"line":761},3,[627,763,701],{"class":700},[627,765,708],{"class":707},[627,767,768],{"class":711}," createAxiomDrain",[627,770,715],{"class":707},[627,772,718],{"class":700},[627,774,721],{"class":707},[627,776,777],{"class":636},"evlog\u002Faxiom",[627,779,727],{"class":707},[627,781,783,785,787,790,792,794,796,799],{"class":629,"line":782},4,[627,784,701],{"class":700},[627,786,708],{"class":707},[627,788,789],{"class":711}," createDrainPipeline",[627,791,715],{"class":707},[627,793,718],{"class":700},[627,795,721],{"class":707},[627,797,798],{"class":636},"evlog\u002Fpipeline",[627,800,727],{"class":707},[627,802,804],{"class":629,"line":803},5,[627,805,807],{"emptyLinePlaceholder":806},true,"\n",[627,809,811,815,818,821,824,827,830,833,836,839,843,846,848,851,853,857,859,861],{"class":629,"line":810},6,[627,812,814],{"class":813},"spNyl","const",[627,816,817],{"class":711}," pipeline ",[627,819,820],{"class":707},"=",[627,822,789],{"class":823},"s2Zo4",[627,825,826],{"class":707},"\u003C",[627,828,829],{"class":633},"DrainContext",[627,831,832],{"class":707},">",[627,834,835],{"class":711},"(",[627,837,838],{"class":707},"{",[627,840,842],{"class":841},"swJcz"," batch",[627,844,845],{"class":707},":",[627,847,708],{"class":707},[627,849,850],{"class":841}," size",[627,852,845],{"class":707},[627,854,856],{"class":855},"sbssI"," 10",[627,858,715],{"class":707},[627,860,715],{"class":707},[627,862,863],{"class":711},")\n",[627,865,867,869,872,874,877,879,882],{"class":629,"line":866},7,[627,868,814],{"class":813},[627,870,871],{"class":711}," drain ",[627,873,820],{"class":707},[627,875,876],{"class":823}," pipeline",[627,878,835],{"class":711},[627,880,881],{"class":823},"createAxiomDrain",[627,883,884],{"class":711},"())\n",[627,886,888],{"class":629,"line":887},8,[627,889,807],{"emptyLinePlaceholder":806},[627,891,893,896,898],{"class":629,"line":892},9,[627,894,895],{"class":823},"initLogger",[627,897,835],{"class":711},[627,899,900],{"class":707},"{\n",[627,902,904,907,909,911,914,916,918,921,924,926,929,931,933,936,938],{"class":629,"line":903},10,[627,905,906],{"class":841},"  env",[627,908,845],{"class":707},[627,910,708],{"class":707},[627,912,913],{"class":841}," service",[627,915,845],{"class":707},[627,917,721],{"class":707},[627,919,920],{"class":636},"my-script",[627,922,923],{"class":707},"'",[627,925,740],{"class":707},[627,927,928],{"class":841}," environment",[627,930,845],{"class":707},[627,932,721],{"class":707},[627,934,935],{"class":636},"production",[627,937,923],{"class":707},[627,939,940],{"class":707}," },\n",[627,942,944,947],{"class":629,"line":943},11,[627,945,946],{"class":711},"  drain",[627,948,949],{"class":707},",\n",[627,951,953,956],{"class":629,"line":952},12,[627,954,955],{"class":707},"}",[627,957,863],{"class":711},[627,959,961],{"class":629,"line":960},13,[627,962,807],{"emptyLinePlaceholder":806},[627,964,966],{"class":629,"line":965},14,[627,967,969],{"class":968},"sHwdD","\u002F\u002F Every log is automatically drained\n",[627,971,973,976,979,982,984,986,989,991,993,996,998,1000],{"class":629,"line":972},15,[627,974,975],{"class":711},"log",[627,977,978],{"class":707},".",[627,980,981],{"class":823},"info",[627,983,835],{"class":711},[627,985,838],{"class":707},[627,987,988],{"class":841}," action",[627,990,845],{"class":707},[627,992,721],{"class":707},[627,994,995],{"class":636},"sync_started",[627,997,923],{"class":707},[627,999,715],{"class":707},[627,1001,863],{"class":711},[627,1003,1005],{"class":629,"line":1004},16,[627,1006,807],{"emptyLinePlaceholder":806},[627,1008,1010,1012,1015,1017,1019,1021,1023,1026,1028,1030,1033,1035,1037,1040,1042,1044,1047,1049,1051,1054,1056,1058,1061,1063,1065],{"class":629,"line":1009},17,[627,1011,814],{"class":813},[627,1013,1014],{"class":711}," syncLog ",[627,1016,820],{"class":707},[627,1018,748],{"class":823},[627,1020,835],{"class":711},[627,1022,838],{"class":707},[627,1024,1025],{"class":841}," jobId",[627,1027,845],{"class":707},[627,1029,721],{"class":707},[627,1031,1032],{"class":636},"sync-001",[627,1034,923],{"class":707},[627,1036,740],{"class":707},[627,1038,1039],{"class":841}," source",[627,1041,845],{"class":707},[627,1043,721],{"class":707},[627,1045,1046],{"class":636},"postgres",[627,1048,923],{"class":707},[627,1050,740],{"class":707},[627,1052,1053],{"class":841}," target",[627,1055,845],{"class":707},[627,1057,721],{"class":707},[627,1059,1060],{"class":636},"s3",[627,1062,923],{"class":707},[627,1064,715],{"class":707},[627,1066,863],{"class":711},[627,1068,1070,1073,1075,1078,1080,1082,1085,1087,1090,1092],{"class":629,"line":1069},18,[627,1071,1072],{"class":711},"syncLog",[627,1074,978],{"class":707},[627,1076,1077],{"class":823},"set",[627,1079,835],{"class":711},[627,1081,838],{"class":707},[627,1083,1084],{"class":841}," recordsSynced",[627,1086,845],{"class":707},[627,1088,1089],{"class":855}," 150",[627,1091,715],{"class":707},[627,1093,863],{"class":711},[627,1095,1097,1099,1101,1104,1107],{"class":629,"line":1096},19,[627,1098,1072],{"class":711},[627,1100,978],{"class":707},[627,1102,1103],{"class":823},"emit",[627,1105,1106],{"class":711},"() ",[627,1108,1109],{"class":968},"\u002F\u002F drained automatically\n",[627,1111,1113],{"class":629,"line":1112},20,[627,1114,807],{"emptyLinePlaceholder":806},[627,1116,1118],{"class":629,"line":1117},21,[627,1119,1120],{"class":968},"\u002F\u002F Flush remaining events before exit\n",[627,1122,1124,1127,1130,1132,1135],{"class":629,"line":1123},22,[627,1125,1126],{"class":700},"await",[627,1128,1129],{"class":711}," drain",[627,1131,978],{"class":707},[627,1133,1134],{"class":823},"flush",[627,1136,1137],{"class":711},"()\n",[548,1139,1141,1142,1145],{"color":981,"icon":1140},"i-lucide-info","Always call ",[539,1143,1144],{},"drain.flush()"," before the process exits to ensure all buffered events are sent.",[548,1147,1148,1152,1153,1159,1160,1163,1164,1167],{"color":981,"icon":511},[1149,1150,1151],"strong",{},"Using vite-node?"," The ",[554,1154,1155,1158],{"href":509},[539,1156,1157],{},"evlog\u002Fvite"," plugin"," replaces the ",[539,1161,1162],{},"initLogger()"," call with compile-time auto-initialization, strips ",[539,1165,1166],{},"log.debug()"," from production builds, and injects source locations.",[605,1169,1171],{"id":1170},"createlogger-vs-createrequestlogger","createLogger vs createRequestLogger",[535,1173,1174],{},"evlog provides two manual logger constructors:",[535,1176,1177,1182],{},[1149,1178,1179],{},[539,1180,1181],{},"createLogger(context)"," - For non-HTTP contexts (scripts, CLI, queues):",[617,1184,1187],{"className":690,"code":1185,"filename":1186,"language":693,"meta":623,"style":623},"import { createLogger } from 'evlog'\n\nconst log = createLogger({ jobId: 'migrate-001', source: 'postgres' })\nlog.set({ recordsProcessed: 500 })\nlog.emit()\n","scripts\u002Fjob.ts",[539,1188,1189,1207,1211,1253,1277],{"__ignoreMap":623},[627,1190,1191,1193,1195,1197,1199,1201,1203,1205],{"class":629,"line":630},[627,1192,701],{"class":700},[627,1194,708],{"class":707},[627,1196,748],{"class":711},[627,1198,715],{"class":707},[627,1200,718],{"class":700},[627,1202,721],{"class":707},[627,1204,724],{"class":636},[627,1206,727],{"class":707},[627,1208,1209],{"class":629,"line":730},[627,1210,807],{"emptyLinePlaceholder":806},[627,1212,1213,1215,1218,1220,1222,1224,1226,1228,1230,1232,1235,1237,1239,1241,1243,1245,1247,1249,1251],{"class":629,"line":761},[627,1214,814],{"class":813},[627,1216,1217],{"class":711}," log ",[627,1219,820],{"class":707},[627,1221,748],{"class":823},[627,1223,835],{"class":711},[627,1225,838],{"class":707},[627,1227,1025],{"class":841},[627,1229,845],{"class":707},[627,1231,721],{"class":707},[627,1233,1234],{"class":636},"migrate-001",[627,1236,923],{"class":707},[627,1238,740],{"class":707},[627,1240,1039],{"class":841},[627,1242,845],{"class":707},[627,1244,721],{"class":707},[627,1246,1046],{"class":636},[627,1248,923],{"class":707},[627,1250,715],{"class":707},[627,1252,863],{"class":711},[627,1254,1255,1257,1259,1261,1263,1265,1268,1270,1273,1275],{"class":629,"line":782},[627,1256,975],{"class":711},[627,1258,978],{"class":707},[627,1260,1077],{"class":823},[627,1262,835],{"class":711},[627,1264,838],{"class":707},[627,1266,1267],{"class":841}," recordsProcessed",[627,1269,845],{"class":707},[627,1271,1272],{"class":855}," 500",[627,1274,715],{"class":707},[627,1276,863],{"class":711},[627,1278,1279,1281,1283,1285],{"class":629,"line":803},[627,1280,975],{"class":711},[627,1282,978],{"class":707},[627,1284,1103],{"class":823},[627,1286,1137],{"class":711},[535,1288,1289,1294],{},[1149,1290,1291],{},[539,1292,1293],{},"createRequestLogger(requestMeta)"," - For HTTP-like contexts where you want method\u002Fpath\u002Fstatus tracking:",[617,1296,1299],{"className":690,"code":1297,"filename":1298,"language":693,"meta":623,"style":623},"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",[539,1300,1301,1320,1324,1338,1354,1370,1376,1418],{"__ignoreMap":623},[627,1302,1303,1305,1307,1310,1312,1314,1316,1318],{"class":629,"line":630},[627,1304,701],{"class":700},[627,1306,708],{"class":707},[627,1308,1309],{"class":711}," createRequestLogger",[627,1311,715],{"class":707},[627,1313,718],{"class":700},[627,1315,721],{"class":707},[627,1317,724],{"class":636},[627,1319,727],{"class":707},[627,1321,1322],{"class":629,"line":730},[627,1323,807],{"emptyLinePlaceholder":806},[627,1325,1326,1328,1330,1332,1334,1336],{"class":629,"line":761},[627,1327,814],{"class":813},[627,1329,1217],{"class":711},[627,1331,820],{"class":707},[627,1333,1309],{"class":823},[627,1335,835],{"class":711},[627,1337,900],{"class":707},[627,1339,1340,1343,1345,1347,1350,1352],{"class":629,"line":782},[627,1341,1342],{"class":841},"  method",[627,1344,845],{"class":707},[627,1346,721],{"class":707},[627,1348,1349],{"class":636},"POST",[627,1351,923],{"class":707},[627,1353,949],{"class":707},[627,1355,1356,1359,1361,1363,1366,1368],{"class":629,"line":803},[627,1357,1358],{"class":841},"  path",[627,1360,845],{"class":707},[627,1362,721],{"class":707},[627,1364,1365],{"class":636},"\u002Fwebhook\u002Fstripe",[627,1367,923],{"class":707},[627,1369,949],{"class":707},[627,1371,1372,1374],{"class":629,"line":810},[627,1373,955],{"class":707},[627,1375,863],{"class":711},[627,1377,1378,1380,1382,1384,1386,1388,1391,1393,1395,1398,1400,1402,1405,1407,1409,1412,1414,1416],{"class":629,"line":866},[627,1379,975],{"class":711},[627,1381,978],{"class":707},[627,1383,1077],{"class":823},[627,1385,835],{"class":711},[627,1387,838],{"class":707},[627,1389,1390],{"class":841}," event",[627,1392,845],{"class":707},[627,1394,721],{"class":707},[627,1396,1397],{"class":636},"invoice.paid",[627,1399,923],{"class":707},[627,1401,740],{"class":707},[627,1403,1404],{"class":841}," customerId",[627,1406,845],{"class":707},[627,1408,721],{"class":707},[627,1410,1411],{"class":636},"cus_123",[627,1413,923],{"class":707},[627,1415,715],{"class":707},[627,1417,863],{"class":711},[627,1419,1420,1422,1424,1426],{"class":629,"line":887},[627,1421,975],{"class":711},[627,1423,978],{"class":707},[627,1425,1103],{"class":823},[627,1427,1137],{"class":711},[535,1429,1430,1431,1434],{},"Both require manual ",[539,1432,1433],{},"log.emit()"," calls since there is no automatic lifecycle to hook into.",[605,1436,44],{"id":1437},"wide-events",[535,1439,1440],{},"Build up context progressively, then emit:",[617,1442,1445],{"className":690,"code":1443,"filename":1444,"language":693,"meta":623,"style":623},"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",[539,1446,1447,1469,1473,1481,1502,1508,1512,1542,1546,1577,1606,1610,1623,1643,1705,1713,1718,1722,1755],{"__ignoreMap":623},[627,1448,1449,1451,1453,1455,1457,1459,1461,1463,1465,1467],{"class":629,"line":630},[627,1450,701],{"class":700},[627,1452,708],{"class":707},[627,1454,737],{"class":711},[627,1456,740],{"class":707},[627,1458,748],{"class":711},[627,1460,715],{"class":707},[627,1462,718],{"class":700},[627,1464,721],{"class":707},[627,1466,724],{"class":636},[627,1468,727],{"class":707},[627,1470,1471],{"class":629,"line":730},[627,1472,807],{"emptyLinePlaceholder":806},[627,1474,1475,1477,1479],{"class":629,"line":761},[627,1476,895],{"class":823},[627,1478,835],{"class":711},[627,1480,900],{"class":707},[627,1482,1483,1485,1487,1489,1491,1493,1495,1498,1500],{"class":629,"line":782},[627,1484,906],{"class":841},[627,1486,845],{"class":707},[627,1488,708],{"class":707},[627,1490,913],{"class":841},[627,1492,845],{"class":707},[627,1494,721],{"class":707},[627,1496,1497],{"class":636},"migrate",[627,1499,923],{"class":707},[627,1501,940],{"class":707},[627,1503,1504,1506],{"class":629,"line":803},[627,1505,955],{"class":707},[627,1507,863],{"class":711},[627,1509,1510],{"class":629,"line":810},[627,1511,807],{"emptyLinePlaceholder":806},[627,1513,1514,1516,1518,1520,1522,1524,1526,1529,1531,1533,1536,1538,1540],{"class":629,"line":866},[627,1515,814],{"class":813},[627,1517,1217],{"class":711},[627,1519,820],{"class":707},[627,1521,748],{"class":823},[627,1523,835],{"class":711},[627,1525,838],{"class":707},[627,1527,1528],{"class":841}," task",[627,1530,845],{"class":707},[627,1532,721],{"class":707},[627,1534,1535],{"class":636},"user-migration",[627,1537,923],{"class":707},[627,1539,715],{"class":707},[627,1541,863],{"class":711},[627,1543,1544],{"class":629,"line":887},[627,1545,807],{"emptyLinePlaceholder":806},[627,1547,1548,1550,1553,1555,1558,1561,1563,1566,1568,1570,1573,1575],{"class":629,"line":892},[627,1549,814],{"class":813},[627,1551,1552],{"class":711}," users ",[627,1554,820],{"class":707},[627,1556,1557],{"class":700}," await",[627,1559,1560],{"class":711}," db",[627,1562,978],{"class":707},[627,1564,1565],{"class":823},"query",[627,1567,835],{"class":711},[627,1569,923],{"class":707},[627,1571,1572],{"class":636},"SELECT * FROM legacy_users",[627,1574,923],{"class":707},[627,1576,863],{"class":711},[627,1578,1579,1581,1583,1585,1587,1589,1592,1594,1597,1599,1602,1604],{"class":629,"line":903},[627,1580,975],{"class":711},[627,1582,978],{"class":707},[627,1584,1077],{"class":823},[627,1586,835],{"class":711},[627,1588,838],{"class":707},[627,1590,1591],{"class":841}," found",[627,1593,845],{"class":707},[627,1595,1596],{"class":711}," users",[627,1598,978],{"class":707},[627,1600,1601],{"class":711},"length ",[627,1603,955],{"class":707},[627,1605,863],{"class":711},[627,1607,1608],{"class":629,"line":943},[627,1609,807],{"emptyLinePlaceholder":806},[627,1611,1612,1615,1618,1620],{"class":629,"line":952},[627,1613,1614],{"class":813},"let",[627,1616,1617],{"class":711}," migrated ",[627,1619,820],{"class":707},[627,1621,1622],{"class":855}," 0\n",[627,1624,1625,1628,1630,1632,1635,1638,1641],{"class":629,"line":960},[627,1626,1627],{"class":700},"for",[627,1629,556],{"class":711},[627,1631,814],{"class":813},[627,1633,1634],{"class":711}," user ",[627,1636,1637],{"class":707},"of",[627,1639,1640],{"class":711}," users) ",[627,1642,900],{"class":707},[627,1644,1645,1648,1651,1653,1656,1658,1660,1663,1665,1668,1670,1673,1675,1678,1680,1682,1684,1687,1689,1692,1694,1696,1698,1701,1703],{"class":629,"line":965},[627,1646,1647],{"class":700},"  await",[627,1649,1650],{"class":711}," newDb",[627,1652,978],{"class":707},[627,1654,1655],{"class":823},"upsert",[627,1657,835],{"class":841},[627,1659,838],{"class":707},[627,1661,1662],{"class":841}," id",[627,1664,845],{"class":707},[627,1666,1667],{"class":711}," user",[627,1669,978],{"class":707},[627,1671,1672],{"class":711},"id",[627,1674,740],{"class":707},[627,1676,1677],{"class":841}," email",[627,1679,845],{"class":707},[627,1681,1667],{"class":711},[627,1683,978],{"class":707},[627,1685,1686],{"class":711},"email",[627,1688,740],{"class":707},[627,1690,1691],{"class":841}," plan",[627,1693,845],{"class":707},[627,1695,1667],{"class":711},[627,1697,978],{"class":707},[627,1699,1700],{"class":711},"plan",[627,1702,715],{"class":707},[627,1704,863],{"class":841},[627,1706,1707,1710],{"class":629,"line":972},[627,1708,1709],{"class":711},"  migrated",[627,1711,1712],{"class":707},"++\n",[627,1714,1715],{"class":629,"line":1004},[627,1716,1717],{"class":707},"}\n",[627,1719,1720],{"class":629,"line":1009},[627,1721,807],{"emptyLinePlaceholder":806},[627,1723,1724,1726,1728,1730,1732,1734,1737,1739,1742,1744,1746,1749,1751,1753],{"class":629,"line":1069},[627,1725,975],{"class":711},[627,1727,978],{"class":707},[627,1729,1077],{"class":823},[627,1731,835],{"class":711},[627,1733,838],{"class":707},[627,1735,1736],{"class":711}," migrated",[627,1738,740],{"class":707},[627,1740,1741],{"class":841}," status",[627,1743,845],{"class":707},[627,1745,721],{"class":707},[627,1747,1748],{"class":636},"complete",[627,1750,923],{"class":707},[627,1752,715],{"class":707},[627,1754,863],{"class":711},[627,1756,1757,1759,1761,1763],{"class":629,"line":1096},[627,1758,975],{"class":711},[627,1760,978],{"class":707},[627,1762,1103],{"class":823},[627,1764,1137],{"class":711},[617,1766,1769],{"className":619,"code":1767,"filename":1768,"language":622,"meta":623,"style":623},"14:58:15 INFO [migrate] user-migration\n  ├─ migrated: 1250\n  ├─ found: 1250\n  ├─ status: complete\n  └─ task: user-migration\n","Terminal output",[539,1770,1771,1782,1793,1802,1812],{"__ignoreMap":623},[627,1772,1773,1776,1779],{"class":629,"line":630},[627,1774,1775],{"class":633},"14:58:15",[627,1777,1778],{"class":636}," INFO",[627,1780,1781],{"class":711}," [migrate] user-migration\n",[627,1783,1784,1787,1790],{"class":629,"line":730},[627,1785,1786],{"class":633},"  ├─",[627,1788,1789],{"class":636}," migrated:",[627,1791,1792],{"class":855}," 1250\n",[627,1794,1795,1797,1800],{"class":629,"line":761},[627,1796,1786],{"class":633},[627,1798,1799],{"class":636}," found:",[627,1801,1792],{"class":855},[627,1803,1804,1806,1809],{"class":629,"line":782},[627,1805,1786],{"class":633},[627,1807,1808],{"class":636}," status:",[627,1810,1811],{"class":636}," complete\n",[627,1813,1814,1817,1820],{"class":629,"line":803},[627,1815,1816],{"class":633},"  └─",[627,1818,1819],{"class":636}," task:",[627,1821,1822],{"class":636}," user-migration\n",[605,1824,1826],{"id":1825},"error-handling","Error Handling",[535,1828,1829,1830,1833],{},"Use ",[539,1831,1832],{},"createError"," for structured errors:",[617,1835,1837],{"className":690,"code":1836,"filename":692,"language":693,"meta":623,"style":623},"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",[539,1838,1839,1863,1867,1875,1898,1921,1932,1948,1976,1992,1999,2004,2016,2062,2072,2076,2107,2153,2170],{"__ignoreMap":623},[627,1840,1841,1843,1845,1848,1850,1853,1855,1857,1859,1861],{"class":629,"line":630},[627,1842,701],{"class":700},[627,1844,708],{"class":707},[627,1846,1847],{"class":711}," createError",[627,1849,740],{"class":707},[627,1851,1852],{"class":711}," parseError",[627,1854,715],{"class":707},[627,1856,718],{"class":700},[627,1858,721],{"class":707},[627,1860,724],{"class":636},[627,1862,727],{"class":707},[627,1864,1865],{"class":629,"line":730},[627,1866,807],{"emptyLinePlaceholder":806},[627,1868,1869,1872],{"class":629,"line":761},[627,1870,1871],{"class":700},"try",[627,1873,1874],{"class":707}," {\n",[627,1876,1877,1880,1883,1886,1888,1891,1893,1896],{"class":629,"line":782},[627,1878,1879],{"class":813},"  const",[627,1881,1882],{"class":711}," result",[627,1884,1885],{"class":707}," =",[627,1887,1557],{"class":700},[627,1889,1890],{"class":711}," externalApi",[627,1892,978],{"class":707},[627,1894,1895],{"class":823},"sync",[627,1897,1137],{"class":841},[627,1899,1900,1903,1905,1908,1911,1913,1916,1919],{"class":629,"line":803},[627,1901,1902],{"class":700},"  if",[627,1904,556],{"class":841},[627,1906,1907],{"class":707},"!",[627,1909,1910],{"class":711},"result",[627,1912,978],{"class":707},[627,1914,1915],{"class":711},"ok",[627,1917,1918],{"class":841},") ",[627,1920,900],{"class":707},[627,1922,1923,1926,1928,1930],{"class":629,"line":810},[627,1924,1925],{"class":700},"    throw",[627,1927,1847],{"class":823},[627,1929,835],{"class":841},[627,1931,900],{"class":707},[627,1933,1934,1937,1939,1941,1944,1946],{"class":629,"line":866},[627,1935,1936],{"class":841},"      message",[627,1938,845],{"class":707},[627,1940,721],{"class":707},[627,1942,1943],{"class":636},"Sync failed",[627,1945,923],{"class":707},[627,1947,949],{"class":707},[627,1949,1950,1953,1955,1958,1961,1964,1966,1968,1971,1974],{"class":629,"line":887},[627,1951,1952],{"class":841},"      why",[627,1954,845],{"class":707},[627,1956,1957],{"class":707}," `",[627,1959,1960],{"class":636},"API returned ",[627,1962,1963],{"class":707},"${",[627,1965,1910],{"class":711},[627,1967,978],{"class":707},[627,1969,1970],{"class":711},"status",[627,1972,1973],{"class":707},"}`",[627,1975,949],{"class":707},[627,1977,1978,1981,1983,1985,1988,1990],{"class":629,"line":892},[627,1979,1980],{"class":841},"      fix",[627,1982,845],{"class":707},[627,1984,721],{"class":707},[627,1986,1987],{"class":636},"Check the API status page and retry",[627,1989,923],{"class":707},[627,1991,949],{"class":707},[627,1993,1994,1997],{"class":629,"line":903},[627,1995,1996],{"class":707},"    }",[627,1998,863],{"class":841},[627,2000,2001],{"class":629,"line":943},[627,2002,2003],{"class":707},"  }\n",[627,2005,2006,2008,2011,2014],{"class":629,"line":952},[627,2007,955],{"class":707},[627,2009,2010],{"class":700}," catch",[627,2012,2013],{"class":711}," (error) ",[627,2015,900],{"class":707},[627,2017,2018,2021,2023,2026,2028,2030,2033,2036,2039,2042,2045,2048,2050,2052,2055,2057,2059],{"class":629,"line":960},[627,2019,2020],{"class":711},"  log",[627,2022,978],{"class":707},[627,2024,2025],{"class":823},"error",[627,2027,835],{"class":841},[627,2029,2025],{"class":711},[627,2031,2032],{"class":707}," instanceof",[627,2034,2035],{"class":633}," Error",[627,2037,2038],{"class":707}," ?",[627,2040,2041],{"class":711}," error",[627,2043,2044],{"class":707}," :",[627,2046,2047],{"class":707}," new",[627,2049,2035],{"class":823},[627,2051,835],{"class":841},[627,2053,2054],{"class":823},"String",[627,2056,835],{"class":841},[627,2058,2025],{"class":711},[627,2060,2061],{"class":841},")))\n",[627,2063,2064,2066,2068,2070],{"class":629,"line":965},[627,2065,2020],{"class":711},[627,2067,978],{"class":707},[627,2069,1103],{"class":823},[627,2071,1137],{"class":841},[627,2073,2074],{"class":629,"line":972},[627,2075,807],{"emptyLinePlaceholder":806},[627,2077,2078,2080,2082,2085,2087,2090,2092,2095,2097,2099,2101,2103,2105],{"class":629,"line":1004},[627,2079,1879],{"class":813},[627,2081,708],{"class":707},[627,2083,2084],{"class":711}," message",[627,2086,740],{"class":707},[627,2088,2089],{"class":711}," why",[627,2091,740],{"class":707},[627,2093,2094],{"class":711}," fix",[627,2096,715],{"class":707},[627,2098,1885],{"class":707},[627,2100,1852],{"class":823},[627,2102,835],{"class":841},[627,2104,2025],{"class":711},[627,2106,863],{"class":841},[627,2108,2109,2112,2114,2116,2118,2121,2124,2126,2129,2132,2134,2137,2139,2141,2144,2146,2149,2151],{"class":629,"line":1009},[627,2110,2111],{"class":711},"  console",[627,2113,978],{"class":707},[627,2115,2025],{"class":823},[627,2117,835],{"class":841},[627,2119,2120],{"class":707},"`${",[627,2122,2123],{"class":711},"message",[627,2125,955],{"class":707},[627,2127,2128],{"class":711},"\\n",[627,2130,2131],{"class":636},"Why: ",[627,2133,1963],{"class":707},[627,2135,2136],{"class":711},"why",[627,2138,955],{"class":707},[627,2140,2128],{"class":711},[627,2142,2143],{"class":636},"Fix: ",[627,2145,1963],{"class":707},[627,2147,2148],{"class":711},"fix",[627,2150,1973],{"class":707},[627,2152,863],{"class":841},[627,2154,2155,2158,2160,2163,2165,2168],{"class":629,"line":1069},[627,2156,2157],{"class":711},"  process",[627,2159,978],{"class":707},[627,2161,2162],{"class":823},"exit",[627,2164,835],{"class":841},[627,2166,2167],{"class":855},"1",[627,2169,863],{"class":841},[627,2171,2172],{"class":629,"line":1096},[627,2173,1717],{"class":707},[605,2175,501],{"id":2176},"configuration",[535,2178,2179,2180,2183,2184,2186],{},"See the ",[554,2181,2182],{"href":502},"Configuration reference"," for all available options (",[539,2185,895],{},", middleware options, sampling, silent mode, etc.).",[605,2188,2190],{"id":2189},"drain-enrichers","Drain & Enrichers",[535,2192,2193,2194,845],{},"Configure drain in ",[539,2195,895],{},[617,2197,2200],{"className":690,"code":2198,"filename":2199,"language":693,"meta":623,"style":623},"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",[539,2201,2202,2222,2240,2258,2276,2280,2300,2328,2347,2353,2369,2373,2381,2401,2407],{"__ignoreMap":623},[627,2203,2204,2206,2208,2210,2212,2214,2216,2218,2220],{"class":629,"line":630},[627,2205,701],{"class":700},[627,2207,704],{"class":700},[627,2209,708],{"class":707},[627,2211,712],{"class":711},[627,2213,715],{"class":707},[627,2215,718],{"class":700},[627,2217,721],{"class":707},[627,2219,724],{"class":636},[627,2221,727],{"class":707},[627,2223,2224,2226,2228,2230,2232,2234,2236,2238],{"class":629,"line":730},[627,2225,701],{"class":700},[627,2227,708],{"class":707},[627,2229,737],{"class":711},[627,2231,715],{"class":707},[627,2233,718],{"class":700},[627,2235,721],{"class":707},[627,2237,724],{"class":636},[627,2239,727],{"class":707},[627,2241,2242,2244,2246,2248,2250,2252,2254,2256],{"class":629,"line":761},[627,2243,701],{"class":700},[627,2245,708],{"class":707},[627,2247,768],{"class":711},[627,2249,715],{"class":707},[627,2251,718],{"class":700},[627,2253,721],{"class":707},[627,2255,777],{"class":636},[627,2257,727],{"class":707},[627,2259,2260,2262,2264,2266,2268,2270,2272,2274],{"class":629,"line":782},[627,2261,701],{"class":700},[627,2263,708],{"class":707},[627,2265,789],{"class":711},[627,2267,715],{"class":707},[627,2269,718],{"class":700},[627,2271,721],{"class":707},[627,2273,798],{"class":636},[627,2275,727],{"class":707},[627,2277,2278],{"class":629,"line":803},[627,2279,807],{"emptyLinePlaceholder":806},[627,2281,2282,2284,2286,2288,2290,2292,2294,2296,2298],{"class":629,"line":810},[627,2283,814],{"class":813},[627,2285,817],{"class":711},[627,2287,820],{"class":707},[627,2289,789],{"class":823},[627,2291,826],{"class":707},[627,2293,829],{"class":633},[627,2295,832],{"class":707},[627,2297,835],{"class":711},[627,2299,900],{"class":707},[627,2301,2302,2305,2307,2309,2311,2313,2316,2318,2321,2323,2326],{"class":629,"line":866},[627,2303,2304],{"class":841},"  batch",[627,2306,845],{"class":707},[627,2308,708],{"class":707},[627,2310,850],{"class":841},[627,2312,845],{"class":707},[627,2314,2315],{"class":855}," 50",[627,2317,740],{"class":707},[627,2319,2320],{"class":841}," intervalMs",[627,2322,845],{"class":707},[627,2324,2325],{"class":855}," 5000",[627,2327,940],{"class":707},[627,2329,2330,2333,2335,2337,2340,2342,2345],{"class":629,"line":887},[627,2331,2332],{"class":841},"  retry",[627,2334,845],{"class":707},[627,2336,708],{"class":707},[627,2338,2339],{"class":841}," maxAttempts",[627,2341,845],{"class":707},[627,2343,2344],{"class":855}," 3",[627,2346,940],{"class":707},[627,2348,2349,2351],{"class":629,"line":892},[627,2350,955],{"class":707},[627,2352,863],{"class":711},[627,2354,2355,2357,2359,2361,2363,2365,2367],{"class":629,"line":903},[627,2356,814],{"class":813},[627,2358,871],{"class":711},[627,2360,820],{"class":707},[627,2362,876],{"class":823},[627,2364,835],{"class":711},[627,2366,881],{"class":823},[627,2368,884],{"class":711},[627,2370,2371],{"class":629,"line":943},[627,2372,807],{"emptyLinePlaceholder":806},[627,2374,2375,2377,2379],{"class":629,"line":952},[627,2376,895],{"class":823},[627,2378,835],{"class":711},[627,2380,900],{"class":707},[627,2382,2383,2385,2387,2389,2391,2393,2395,2397,2399],{"class":629,"line":960},[627,2384,906],{"class":841},[627,2386,845],{"class":707},[627,2388,708],{"class":707},[627,2390,913],{"class":841},[627,2392,845],{"class":707},[627,2394,721],{"class":707},[627,2396,920],{"class":636},[627,2398,923],{"class":707},[627,2400,940],{"class":707},[627,2402,2403,2405],{"class":629,"line":965},[627,2404,946],{"class":711},[627,2406,949],{"class":707},[627,2408,2409,2411],{"class":629,"line":972},[627,2410,955],{"class":707},[627,2412,863],{"class":711},[548,2414,2179,2415,2417],{"color":981,"icon":1140},[554,2416,133],{"href":138}," docs for all available drain adapters (Axiom, OTLP, PostHog, Sentry, Better Stack).",[548,2419,2421,2422,2427],{"color":550,"icon":2420},"i-lucide-arrow-right","See the full ",[554,2423,2426],{"href":2424,"rel":2425},"https:\u002F\u002Fgithub.com\u002Fhugorcd\u002Fevlog\u002Ftree\u002Fmain\u002Fexamples\u002Fbun-script",[598],"bun-script example"," for a complete working script.",[605,2429,2431],{"id":2430},"next-steps","Next Steps",[570,2433,2434,2439,2444,2449],{},[573,2435,2436,2438],{},[554,2437,44],{"href":45},": Design comprehensive events with context layering",[573,2440,2441,2443],{},[554,2442,133],{"href":138},": Send logs to Axiom, Sentry, PostHog, and more",[573,2445,2446,2448],{},[554,2447,59],{"href":60},": Control log volume with head and tail sampling",[573,2450,2451,2453,2454,2456,2457,2459,2460,2463],{},[554,2452,49],{"href":50},": Throw errors with ",[539,2455,2136],{},", ",[539,2458,2148],{},", and ",[539,2461,2462],{},"link"," fields",[2465,2466,2467],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}",{"title":623,"searchDepth":730,"depth":730,"links":2469},[2470,2474,2475,2476,2477,2478,2479],{"id":607,"depth":730,"text":24,"children":2471},[2472,2473],{"id":611,"depth":761,"text":612},{"id":686,"depth":761,"text":687},{"id":1170,"depth":730,"text":1171},{"id":1437,"depth":730,"text":44},{"id":1825,"depth":730,"text":1826},{"id":2176,"depth":730,"text":501},{"id":2189,"depth":730,"text":2190},{"id":2430,"depth":730,"text":2431},"Use evlog in standalone TypeScript scripts, CLI tools, queues, cron jobs, and any TypeScript process.","md",null,{},{"title":286,"icon":71},{"title":530,"description":2480},"Gk9bySGhka_17RhbySBzBUe_tDwJdjTNryaNIdS9EP4",[2488,2490],{"title":281,"path":282,"stem":283,"description":2489,"icon":284,"children":-1},"Wide events, structured errors, and logging in Cloudflare Workers and Durable Objects.",{"title":290,"path":291,"stem":292,"description":2491,"icon":293,"children":-1},"Wide events and structured errors in Astro server middleware.",1786793466570]