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