[{"data":1,"prerenderedAt":3681},["ShallowReactive",2],{"navigation_docs":3,"-getting-started-vs-other-loggers":454,"-getting-started-vs-other-loggers-surround":3676},[4,35,159,201,289,352,438],{"title":5,"path":6,"stem":7,"children":8,"page":34},"Getting Started","\u002Fgetting-started","1.getting-started",[9,14,19,24,29],{"title":10,"path":11,"stem":12,"icon":13},"Introduction","\u002Fgetting-started\u002Fintroduction","1.getting-started\u002F1.introduction","i-lucide-info",{"title":15,"path":16,"stem":17,"icon":18},"Installation","\u002Fgetting-started\u002Finstallation","1.getting-started\u002F2.installation","i-lucide-download",{"title":20,"path":21,"stem":22,"icon":23},"Quick Start","\u002Fgetting-started\u002Fquick-start","1.getting-started\u002F3.quick-start","i-lucide-zap",{"title":25,"path":26,"stem":27,"icon":28},"Agent Skills","\u002Fgetting-started\u002Fagent-skills","1.getting-started\u002F4.agent-skills","i-lucide-sparkles",{"title":30,"path":31,"stem":32,"icon":33},"vs Other Loggers","\u002Fgetting-started\u002Fvs-other-loggers","1.getting-started\u002F5.vs-other-loggers","i-lucide-scale",false,{"title":36,"path":37,"stem":38,"children":39,"page":34},"Logging","\u002Flogging","2.logging",[40,45,50,55,60,65,70,99,127],{"title":41,"path":42,"stem":43,"icon":44},"Overview","\u002Flogging\u002Foverview","2.logging\u002F0.overview","i-lucide-list",{"title":46,"path":47,"stem":48,"icon":49},"Simple Logging","\u002Flogging\u002Fsimple-logging","2.logging\u002F1.simple-logging","i-lucide-terminal",{"title":51,"path":52,"stem":53,"icon":54},"Wide Events","\u002Flogging\u002Fwide-events","2.logging\u002F2.wide-events","i-lucide-layers",{"title":56,"path":57,"stem":58,"icon":59},"Structured Errors","\u002Flogging\u002Fstructured-errors","2.logging\u002F3.structured-errors","i-lucide-shield-alert",{"title":61,"path":62,"stem":63,"icon":64},"Catalogs","\u002Flogging\u002Fcatalogs","2.logging\u002F4.catalogs","i-lucide-book-open",{"title":66,"path":67,"stem":68,"icon":69},"Client Logging","\u002Flogging\u002Fclient-logging","2.logging\u002F5.client-logging","i-lucide-monitor",{"title":71,"icon":72,"path":73,"stem":74,"children":75,"page":34},"AI SDK","i-simple-icons-vercel","\u002Flogging\u002Fai-sdk","2.logging\u002F6.ai-sdk",[76,79,84,89,94],{"title":41,"path":77,"stem":78,"icon":44},"\u002Flogging\u002Fai-sdk\u002Foverview","2.logging\u002F6.ai-sdk\u002F01.overview",{"title":80,"path":81,"stem":82,"icon":83},"Usage","\u002Flogging\u002Fai-sdk\u002Fusage","2.logging\u002F6.ai-sdk\u002F02.usage","i-lucide-code",{"title":85,"path":86,"stem":87,"icon":88},"Options","\u002Flogging\u002Fai-sdk\u002Foptions","2.logging\u002F6.ai-sdk\u002F03.options","i-lucide-sliders",{"title":90,"path":91,"stem":92,"icon":93},"Metadata","\u002Flogging\u002Fai-sdk\u002Fmetadata","2.logging\u002F6.ai-sdk\u002F04.metadata","i-lucide-database",{"title":95,"path":96,"stem":97,"icon":98},"Telemetry","\u002Flogging\u002Fai-sdk\u002Ftelemetry","2.logging\u002F6.ai-sdk\u002F05.telemetry","i-lucide-activity",{"title":100,"icon":101,"path":102,"stem":103,"children":104,"page":34},"Better Auth","i-simple-icons-betterauth","\u002Flogging\u002Fbetter-auth","2.logging\u002F7.better-auth",[105,108,113,118,122],{"title":41,"path":106,"stem":107,"icon":44},"\u002Flogging\u002Fbetter-auth\u002Foverview","2.logging\u002F7.better-auth\u002F01.overview",{"title":109,"path":110,"stem":111,"icon":112},"Identify User","\u002Flogging\u002Fbetter-auth\u002Fidentify-user","2.logging\u002F7.better-auth\u002F02.identify-user","i-lucide-user-check",{"title":114,"path":115,"stem":116,"icon":117},"Middleware","\u002Flogging\u002Fbetter-auth\u002Fmiddleware","2.logging\u002F7.better-auth\u002F03.middleware","i-lucide-shield",{"title":119,"path":120,"stem":121,"icon":69},"Client Sync","\u002Flogging\u002Fbetter-auth\u002Fclient-sync","2.logging\u002F7.better-auth\u002F04.client-sync",{"title":123,"path":124,"stem":125,"icon":126},"Performance","\u002Flogging\u002Fbetter-auth\u002Fperformance","2.logging\u002F7.better-auth\u002F05.performance","i-lucide-gauge",{"title":128,"icon":129,"path":130,"stem":131,"children":132,"page":34},"Audit Logs","i-lucide-shield-check","\u002Flogging\u002Faudit","2.logging\u002F8.audit",[133,136,141,146,151,155],{"title":41,"path":134,"stem":135,"icon":44},"\u002Flogging\u002Faudit\u002Foverview","2.logging\u002F8.audit\u002F01.overview",{"title":137,"path":138,"stem":139,"icon":140},"Schema","\u002Flogging\u002Faudit\u002Fschema","2.logging\u002F8.audit\u002F02.schema","i-lucide-file-text",{"title":142,"path":143,"stem":144,"icon":145},"Recording","\u002Flogging\u002Faudit\u002Frecording","2.logging\u002F8.audit\u002F03.recording","i-lucide-pen-line",{"title":147,"path":148,"stem":149,"icon":150},"Drains","\u002Flogging\u002Faudit\u002Fpipeline","2.logging\u002F8.audit\u002F04.pipeline","i-lucide-link",{"title":152,"path":153,"stem":154,"icon":129},"Compliance","\u002Flogging\u002Faudit\u002Fcompliance","2.logging\u002F8.audit\u002F05.compliance",{"title":156,"path":157,"stem":158,"icon":64},"Recipes","\u002Flogging\u002Faudit\u002Frecipes","2.logging\u002F8.audit\u002F06.recipes",{"title":160,"path":161,"stem":162,"children":163,"page":34},"Core Concepts","\u002Fcore-concepts","3.core-concepts",[164,169,174,179,184,188,191,196],{"title":165,"path":166,"stem":167,"icon":168},"Lifecycle","\u002Fcore-concepts\u002Flifecycle","3.core-concepts\u002F0.lifecycle","i-lucide-arrow-right-left",{"title":170,"path":171,"stem":172,"icon":173},"Configuration","\u002Fcore-concepts\u002Fconfiguration","3.core-concepts\u002F1.configuration","i-lucide-settings",{"title":175,"path":176,"stem":177,"icon":178},"Sampling","\u002Fcore-concepts\u002Fsampling","3.core-concepts\u002F2.sampling","i-lucide-filter",{"title":180,"path":181,"stem":182,"icon":183},"Typed Fields","\u002Fcore-concepts\u002Ftyped-fields","3.core-concepts\u002F3.typed-fields","i-simple-icons-typescript",{"title":185,"path":186,"stem":187,"icon":129},"Best Practices","\u002Fcore-concepts\u002Fbest-practices","3.core-concepts\u002F4.best-practices",{"title":123,"path":189,"stem":190,"icon":126},"\u002Fcore-concepts\u002Fperformance","3.core-concepts\u002F5.performance",{"title":192,"path":193,"stem":194,"icon":195},"Vite Plugin","\u002Fcore-concepts\u002Fvite-plugin","3.core-concepts\u002F6.vite-plugin","i-custom-vite",{"title":197,"path":198,"stem":199,"icon":200},"Auto-Redaction","\u002Fcore-concepts\u002Fredaction","3.core-concepts\u002F7.redaction","i-lucide-eye-off",{"title":202,"path":203,"stem":204,"children":205,"page":34},"Frameworks","\u002Fframeworks","4.frameworks",[206,210,215,220,225,230,235,240,245,250,255,260,265,270,274,279,284],{"title":41,"path":207,"stem":208,"icon":209},"\u002Fframeworks\u002Foverview","4.frameworks\u002F00.overview","i-lucide-layout-grid",{"title":211,"path":212,"stem":213,"icon":214},"Nuxt","\u002Fframeworks\u002Fnuxt","4.frameworks\u002F01.nuxt","i-simple-icons-nuxtdotjs",{"title":216,"path":217,"stem":218,"icon":219},"Next.js","\u002Fframeworks\u002Fnextjs","4.frameworks\u002F02.nextjs","i-simple-icons-nextdotjs",{"title":221,"path":222,"stem":223,"icon":224},"SvelteKit","\u002Fframeworks\u002Fsveltekit","4.frameworks\u002F03.sveltekit","i-simple-icons-svelte",{"title":226,"path":227,"stem":228,"icon":229},"Nitro","\u002Fframeworks\u002Fnitro","4.frameworks\u002F04.nitro","i-custom-nitro",{"title":231,"path":232,"stem":233,"icon":234},"TanStack Start","\u002Fframeworks\u002Ftanstack-start","4.frameworks\u002F05.tanstack-start","i-custom-tanstack",{"title":236,"path":237,"stem":238,"icon":239},"NestJS","\u002Fframeworks\u002Fnestjs","4.frameworks\u002F06.nestjs","i-simple-icons-nestjs",{"title":241,"path":242,"stem":243,"icon":244},"Express","\u002Fframeworks\u002Fexpress","4.frameworks\u002F07.express","i-simple-icons-express",{"title":246,"path":247,"stem":248,"icon":249},"Hono","\u002Fframeworks\u002Fhono","4.frameworks\u002F08.hono","i-simple-icons-hono",{"title":251,"path":252,"stem":253,"icon":254},"Fastify","\u002Fframeworks\u002Ffastify","4.frameworks\u002F09.fastify","i-simple-icons-fastify",{"title":256,"path":257,"stem":258,"icon":259},"Elysia","\u002Fframeworks\u002Felysia","4.frameworks\u002F10.elysia","i-custom-elysia",{"title":261,"path":262,"stem":263,"icon":264},"React Router","\u002Fframeworks\u002Freact-router","4.frameworks\u002F11.react-router","i-custom-reactrouter",{"title":266,"path":267,"stem":268,"icon":269},"Cloudflare Workers","\u002Fframeworks\u002Fcloudflare-workers","4.frameworks\u002F12.cloudflare-workers","i-simple-icons-cloudflare",{"title":271,"path":272,"stem":273,"icon":183},"Standalone","\u002Fframeworks\u002Fstandalone","4.frameworks\u002F13.standalone",{"title":275,"path":276,"stem":277,"icon":278},"Astro","\u002Fframeworks\u002Fastro","4.frameworks\u002F14.astro","i-simple-icons-astro",{"title":280,"path":281,"stem":282,"icon":283},"AWS Lambda","\u002Fframeworks\u002Faws-lambda","4.frameworks\u002F16.aws-lambda","i-custom-lambda",{"title":285,"path":286,"stem":287,"icon":288},"Custom Integration","\u002Fframeworks\u002Fcustom-integration","4.frameworks\u002F17.custom-integration","i-lucide-puzzle",{"title":290,"path":291,"stem":292,"children":293,"page":34},"Build on top","\u002Fbuild-on-top","5.build-on-top",[294,297,302,307,312,316,321,326,330,334,338,342,347],{"title":41,"path":295,"stem":296,"icon":54},"\u002Fbuild-on-top\u002Foverview","5.build-on-top\u002F0.overview",{"title":298,"path":299,"stem":300,"icon":301},"In-process stream","\u002Fbuild-on-top\u002Fin-process-stream","5.build-on-top\u002F1.in-process-stream","i-lucide-radio-tower",{"title":303,"path":304,"stem":305,"icon":306},"Fanout","\u002Fbuild-on-top\u002Ffanout-and-multi-drain","5.build-on-top\u002F10.fanout-and-multi-drain","i-lucide-share-2",{"title":308,"path":309,"stem":310,"icon":311},"Identity headers","\u002Fbuild-on-top\u002Fidentity-headers","5.build-on-top\u002F11.identity-headers","i-lucide-fingerprint",{"title":313,"path":314,"stem":315,"icon":288},"Custom framework","\u002Fbuild-on-top\u002Fcustom-framework","5.build-on-top\u002F12.custom-framework",{"title":317,"path":318,"stem":319,"icon":320},"Stream server","\u002Fbuild-on-top\u002Fstream-server","5.build-on-top\u002F2.stream-server","i-lucide-radio",{"title":322,"path":323,"stem":324,"icon":325},"FS reader","\u002Fbuild-on-top\u002Ffs-reader","5.build-on-top\u002F3.fs-reader","i-lucide-folder-search",{"title":156,"path":327,"stem":328,"icon":329},"\u002Fbuild-on-top\u002Fconsumer-recipes","5.build-on-top\u002F4.consumer-recipes","i-lucide-chef-hat",{"title":331,"path":332,"stem":333,"icon":288},"Plugins","\u002Fbuild-on-top\u002Fplugins","5.build-on-top\u002F5.plugins",{"title":335,"path":336,"stem":337,"icon":28},"Custom enrichers","\u002Fbuild-on-top\u002Fcustom-enrichers","5.build-on-top\u002F6.custom-enrichers",{"title":339,"path":340,"stem":341,"icon":178},"Tail sampling","\u002Fbuild-on-top\u002Ftail-sampling","5.build-on-top\u002F7.tail-sampling",{"title":343,"path":344,"stem":345,"icon":346},"Custom drains","\u002Fbuild-on-top\u002Fcustom-drains","5.build-on-top\u002F8.custom-drains","i-lucide-code-2",{"title":348,"path":349,"stem":350,"icon":351},"Drain pipeline","\u002Fbuild-on-top\u002Fdrain-pipeline","5.build-on-top\u002F9.drain-pipeline","i-lucide-workflow",{"title":353,"path":354,"stem":355,"children":356,"page":34},"Adapters","\u002Fadapters","6.adapters",[357,360,400,415],{"title":41,"path":358,"stem":359,"icon":44},"\u002Fadapters\u002Foverview","6.adapters\u002F01.overview",{"title":361,"path":362,"stem":363,"children":364,"page":34},"Cloud destinations","\u002Fadapters\u002Fcloud","6.adapters\u002F02.cloud",[365,370,375,380,385,390,395],{"title":366,"path":367,"stem":368,"icon":369},"Axiom","\u002Fadapters\u002Fcloud\u002Faxiom","6.adapters\u002F02.cloud\u002F01.axiom","i-custom-axiom",{"title":371,"path":372,"stem":373,"icon":374},"OTLP","\u002Fadapters\u002Fcloud\u002Fotlp","6.adapters\u002F02.cloud\u002F02.otlp","i-simple-icons-opentelemetry",{"title":376,"path":377,"stem":378,"icon":379},"PostHog","\u002Fadapters\u002Fcloud\u002Fposthog","6.adapters\u002F02.cloud\u002F03.posthog","i-simple-icons-posthog",{"title":381,"path":382,"stem":383,"icon":384},"Sentry","\u002Fadapters\u002Fcloud\u002Fsentry","6.adapters\u002F02.cloud\u002F04.sentry","i-simple-icons-sentry",{"title":386,"path":387,"stem":388,"icon":389},"Better Stack","\u002Fadapters\u002Fcloud\u002Fbetter-stack","6.adapters\u002F02.cloud\u002F05.better-stack","i-simple-icons-betterstack",{"title":391,"path":392,"stem":393,"icon":394},"Datadog","\u002Fadapters\u002Fcloud\u002Fdatadog","6.adapters\u002F02.cloud\u002F06.datadog","i-simple-icons-datadog",{"title":396,"path":397,"stem":398,"icon":399},"HyperDX","\u002Fadapters\u002Fcloud\u002Fhyperdx","6.adapters\u002F02.cloud\u002F07.hyperdx","i-custom-hyperdx",{"title":401,"path":402,"stem":403,"children":404,"page":34},"Self-hosted","\u002Fadapters\u002Fself-hosted","6.adapters\u002F03.self-hosted",[405,410],{"title":406,"path":407,"stem":408,"icon":409},"File System","\u002Fadapters\u002Fself-hosted\u002Ffs","6.adapters\u002F03.self-hosted\u002F01.fs","i-lucide-hard-drive",{"title":411,"path":412,"stem":413,"icon":414},"NuxtHub","\u002Fadapters\u002Fself-hosted\u002Fnuxthub","6.adapters\u002F03.self-hosted\u002F02.nuxthub","i-simple-icons-nuxt",{"title":416,"path":417,"stem":418,"children":419,"page":34},"Building blocks","\u002Fadapters\u002Fbuilding-blocks","6.adapters\u002F04.building-blocks",[420,424,429,433],{"title":421,"path":422,"stem":423,"icon":351},"Pipeline","\u002Fadapters\u002Fbuilding-blocks\u002Fpipeline","6.adapters\u002F04.building-blocks\u002F01.pipeline",{"title":425,"path":426,"stem":427,"icon":428},"HTTP","\u002Fadapters\u002Fbuilding-blocks\u002Fhttp","6.adapters\u002F04.building-blocks\u002F02.http","i-lucide-globe",{"title":430,"path":431,"stem":432,"icon":83},"Custom Adapters","\u002Fadapters\u002Fbuilding-blocks\u002Fcustom","6.adapters\u002F04.building-blocks\u002F03.custom",{"title":434,"path":435,"stem":436,"icon":437},"Toolkit","\u002Fadapters\u002Fbuilding-blocks\u002Ftoolkit","6.adapters\u002F04.building-blocks\u002F04.toolkit","i-lucide-blocks",{"title":439,"path":440,"stem":441,"children":442,"page":34},"Enrichers","\u002Fenrichers","7.enrichers",[443,446,450],{"title":41,"path":444,"stem":445,"icon":28},"\u002Fenrichers\u002Foverview","7.enrichers\u002F1.overview",{"title":447,"path":448,"stem":449,"icon":288},"Built-in","\u002Fenrichers\u002Fbuilt-in","7.enrichers\u002F2.built-in",{"title":451,"path":452,"stem":453,"icon":83},"Custom","\u002Fenrichers\u002Fcustom","7.enrichers\u002F3.custom",{"id":455,"title":456,"body":457,"description":3665,"extension":3666,"links":3667,"meta":3672,"navigation":3673,"path":31,"seo":3674,"stem":32,"__hash__":3675},"docs\u002F1.getting-started\u002F5.vs-other-loggers.md","evlog vs pino, winston, consola",{"type":458,"value":459,"toc":3644},"minimark",[460,477,482,534,538,545,554,559,836,840,1123,1127,1316,1336,1352,1356,1359,1366,1376,1508,1519,1526,1548,1552,1584,1590,1601,1605,1621,1625,1636,3119,3122,3529,3532,3579,3583,3586,3609,3613,3640],[461,462,463,464,468,469,472,473,476],"p",{},"evlog is a fully-featured general-purpose logger first, with wide events as a native extension of the same API. This page compares it head-to-head with the three loggers TypeScript developers usually consider — ",[465,466,467],"strong",{},"pino",", ",[465,470,471],{},"winston",", and ",[465,474,475],{},"consola"," — so you know exactly what you gain, what stays the same, and what (if anything) is missing today.",[478,479,481],"h2",{"id":480},"tldr","TL;DR",[483,484,485,503,514,520],"ul",{},[486,487,488,491,492,495,496,495,499,502],"li",{},[465,489,490],{},"Pick evlog over pino"," if you want the same throughput class with structured errors, redaction, and wide events built in — and you don't want to assemble ",[493,494,467],"code",{}," + ",[493,497,498],{},"pino-pretty",[493,500,501],{},"pino-http"," + custom transports yourself.",[486,504,505,508,509,513],{},[465,506,507],{},"Pick evlog over winston"," in any new TypeScript project. winston is older, slower (see ",[510,511,512],"a",{"href":189},"benchmarks","), and ships none of the modern features (typed events, redaction, structured errors, AI SDK integration).",[486,515,516,519],{},[465,517,518],{},"Pick evlog over consola"," as soon as your code leaves a CLI. consola is great for terminal pretty-printing but doesn't ship a drain pipeline, sampling, or wide events.",[486,521,522,525,526,529,530,533],{},[465,523,524],{},"Stay on pino"," only if you're on an extremely hot path that emits hundreds of thousands of fire-and-forget log lines per second to ",[493,527,528],{},"\u002Fdev\u002Fnull"," and you have a custom transport you don't want to port. evlog still wins the wide event lifecycle by 7.7x, but pino can edge it on raw ",[493,531,532],{},"info('hello world')"," throughput.",[478,535,537],{"id":536},"feature-comparison","Feature comparison",[461,539,540,541,544],{},"Three tables instead of one wall. The ",[465,542,543],{},"Winner"," column on the right tells you who wins each row at a glance; cells use semantic words (\"Built-in\", \"Manual\", \"via X\") instead of generic \"Yes\" so you can read the level of effort without reading the spec.",[546,547,549,550,553],"callout",{"color":548,"icon":13},"info","Hover (or tap on mobile) the ",[465,551,552],{},"info icon"," next to any feature name for a one-line explanation of what the row actually compares.",[555,556,558],"h3",{"id":557},"core-api","Core API",[560,561,562,585],"table",{},[563,564,565],"thead",{},[566,567,568,572,576,578,580,582],"tr",{},[569,570,571],"th",{},"Feature",[569,573,575],{"align":574},"center","evlog",[569,577,467],{"align":574},[569,579,475],{"align":574},[569,581,471],{"align":574},[569,583,543],{"align":584},"left",[586,587,588,610,632,654,672,695,715,735,755,775,796,816],"tbody",{},[566,589,590,598,601,603,605,607],{},[591,592,593],"td",{},[594,595,597],"feature-label",{"tip":596},"The four classic severities (debug \u002F info \u002F warn \u002F error) every logger ships, used for severity-based filtering.","Standard levels",[591,599,600],{"align":574},"Yes",[591,602,600],{"align":574},[591,604,600],{"align":574},[591,606,600],{"align":574},[591,608,609],{"align":584},"All",[566,611,612,618,621,623,625,627],{},[591,613,614],{},[594,615,617],{"tip":616},"Define extra severities like trace, notice, or fatal beyond the standard four — handy when migrating from a pipeline that depends on them.","Custom levels",[591,619,620],{"align":574},"No",[591,622,600],{"align":574},[591,624,600],{"align":574},[591,626,600],{"align":574},[591,628,629],{"align":584},[465,630,631],{},"pino, consola, winston",[566,633,634,640,642,644,647,649],{},[591,635,636],{},[594,637,639],{"tip":638},"Pass typed key\u002Fvalue objects on every log call instead of stuffing data into the message string. Required for queryable logs.","Structured fields per call",[591,641,600],{"align":574},[591,643,600],{"align":574},[591,645,646],{"align":574},"Partial",[591,648,600],{"align":574},[591,650,651],{"align":584},[465,652,653],{},"evlog, pino, winston",[566,655,656,662,664,666,668,670],{},[591,657,658],{},[594,659,661],{"tip":660},"Create a logger that inherits parent bindings (e.g. requestId, component) and auto-attaches them to every subsequent call.","Child loggers \u002F persistent bindings",[591,663,600],{"align":574},[591,665,600],{"align":574},[591,667,600],{"align":574},[591,669,600],{"align":574},[591,671,609],{"align":584},[566,673,674,680,682,685,687,690],{},[591,675,676],{},[594,677,679],{"tip":678},"Human-readable colored output during development, machine-parseable JSON in production. Switched automatically based on NODE_ENV.","Pretty in dev \u002F JSON in prod (auto)",[591,681,447],{"align":574},[591,683,684],{"align":574},"via pino-pretty",[591,686,447],{"align":574},[591,688,689],{"align":574},"Manual",[591,691,692],{"align":584},[465,693,694],{},"evlog, consola",[566,696,697,703,705,707,709,711],{},[591,698,699],{},[594,700,702],{"tip":701},"A separate runtime for the browser that strips Node.js APIs (process, fs) and ships a small bundle for client-side logging.","Browser-safe build",[591,704,600],{"align":574},[591,706,620],{"align":574},[591,708,600],{"align":574},[591,710,620],{"align":574},[591,712,713],{"align":584},[465,714,694],{},[566,716,717,723,725,727,729,731],{},[591,718,719],{},[594,720,722],{"tip":721},"Spin off a child wide event from the parent — used for batched operations or per-item processing inside one request, without losing correlation.","Sub-operation logger (log.fork)",[591,724,600],{"align":574},[591,726,620],{"align":574},[591,728,620],{"align":574},[591,730,620],{"align":574},[591,732,733],{"align":584},[465,734,575],{},[566,736,737,743,745,747,749,751],{},[591,738,739],{},[594,740,742],{"tip":741},"Every event carries a source field (server or client) automatically so you can split client-side errors from server-side ones in your dashboard.","Source distinction (server \u002F client)",[591,744,600],{"align":574},[591,746,620],{"align":574},[591,748,620],{"align":574},[591,750,620],{"align":574},[591,752,753],{"align":584},[465,754,575],{},[566,756,757,763,765,767,769,771],{},[591,758,759],{},[594,760,762],{"tip":761},"Toggle log levels on the fly (e.g. logger.level = 'debug') without a restart — useful for --verbose flags or hot-reload.","Runtime level mutation",[591,764,620],{"align":574},[591,766,600],{"align":574},[591,768,600],{"align":574},[591,770,600],{"align":574},[591,772,773],{"align":584},[465,774,631],{},[566,776,777,783,785,787,789,791],{},[591,778,779],{},[594,780,782],{"tip":781},"Pluggable transformers that turn typed objects (errors, requests, responses) into JSON. evlog handles common cases via redaction + createError instead of plugins.","Plugin \u002F serializer system",[591,784,620],{"align":574},[591,786,600],{"align":574},[591,788,620],{"align":574},[591,790,600],{"align":574},[591,792,793],{"align":584},[465,794,795],{},"pino, winston",[566,797,798,804,806,808,810,812],{},[591,799,800],{},[594,801,803],{"tip":802},"Accumulate context throughout a request and emit one typed event at the end — the wide-event observability pattern from Honeycomb \u002F Charity Majors.","Wide events (one per operation)",[591,805,600],{"align":574},[591,807,620],{"align":574},[591,809,620],{"align":574},[591,811,620],{"align":574},[591,813,814],{"align":584},[465,815,575],{},[566,817,818,824,826,828,830,832],{},[591,819,820],{},[594,821,823],{"tip":822},"Errors carry why (root cause), fix (actionable next step), and link (docs URL) fields that travel from server to client.","Structured errors (why \u002F fix \u002F link)",[591,825,600],{"align":574},[591,827,620],{"align":574},[591,829,620],{"align":574},[591,831,620],{"align":574},[591,833,834],{"align":584},[465,835,575],{},[555,837,839],{"id":838},"production-features","Production features",[560,841,842,858],{},[563,843,844],{},[566,845,846,848,850,852,854,856],{},[569,847,571],{},[569,849,575],{"align":574},[569,851,467],{"align":574},[569,853,475],{"align":574},[569,855,471],{"align":574},[569,857,543],{"align":584},[586,859,860,880,900,922,943,963,983,1003,1023,1043,1063,1083,1103],{},[566,861,862,868,870,872,874,876],{},[591,863,864],{},[594,865,867],{"tip":866},"Automatically masks fields like password, token, email, creditCard in production output. Configurable via a redact list.","Built-in PII redaction (auto in prod)",[591,869,447],{"align":574},[591,871,689],{"align":574},[591,873,620],{"align":574},[591,875,620],{"align":574},[591,877,878],{"align":584},[465,879,575],{},[566,881,882,888,890,892,894,896],{},[591,883,884],{},[594,885,887],{"tip":886},"Drop a percentage of low-importance events at emit time (head) or based on the final outcome like errors \u002F slow requests (tail).","Head + tail sampling",[591,889,447],{"align":574},[591,891,689],{"align":574},[591,893,620],{"align":574},[591,895,620],{"align":574},[591,897,898],{"align":584},[465,899,575],{},[566,901,902,908,911,914,916,918],{},[591,903,904],{},[594,905,907],{"tip":906},"Whether log shipping runs off the hot path. evlog uses fire-and-forget drains (with waitUntil on edge); pino \u002F winston use a worker thread for hard isolation.","Async I\u002FO for shipping logs",[591,909,910],{"align":574},"via drains",[591,912,913],{"align":574},"Worker thread",[591,915,620],{"align":574},[591,917,913],{"align":574},[591,919,920],{"align":584},[465,921,795],{},[566,923,924,930,932,935,937,939],{},[591,925,926],{},[594,927,929],{"tip":928},"Built-in batching, exponential retry on failure, and fan-out to multiple destinations — without writing transport plumbing yourself.","Drain pipeline (batch \u002F retry \u002F fan-out)",[591,931,447],{"align":574},[591,933,934],{"align":574},"via transports",[591,936,620],{"align":574},[591,938,934],{"align":574},[591,940,941],{"align":584},[465,942,575],{},[566,944,945,951,953,955,957,959],{},[591,946,947],{},[594,948,950],{"tip":949},"Send the same event to multiple destinations (e.g. Axiom + Sentry + your DB) in parallel without duplicating emit calls.","Multi-destination fan-out",[591,952,600],{"align":574},[591,954,600],{"align":574},[591,956,620],{"align":574},[591,958,600],{"align":574},[591,960,961],{"align":584},[465,962,653],{},[566,964,965,971,973,975,977,979],{},[591,966,967],{},[594,968,970],{"tip":969},"Append-only log of security-sensitive events (auth, billing, admin actions) with a hash chain so tampering can be detected after the fact.","Audit trail (tamper-evident chain)",[591,972,447],{"align":574},[591,974,620],{"align":574},[591,976,620],{"align":574},[591,978,620],{"align":574},[591,980,981],{"align":584},[465,982,575],{},[566,984,985,991,993,995,997,999],{},[591,986,987],{},[594,988,990],{"tip":989},"Auto-attach derived context like parsed user-agent, GeoIP, request size, and W3C traceparent without writing middleware.","Built-in enrichers (UA \u002F Geo \u002F Trace \u002F Size)",[591,992,447],{"align":574},[591,994,620],{"align":574},[591,996,620],{"align":574},[591,998,620],{"align":574},[591,1000,1001],{"align":584},[465,1002,575],{},[566,1004,1005,1011,1013,1015,1017,1019],{},[591,1006,1007],{},[594,1008,1010],{"tip":1009},"Strips authorization, cookie, x-api-key, set-cookie etc. before they reach an adapter — no risk of leaking auth tokens to your observability vendor.","Sensitive header filtering",[591,1012,447],{"align":574},[591,1014,689],{"align":574},[591,1016,620],{"align":574},[591,1018,689],{"align":574},[591,1020,1021],{"align":584},[465,1022,575],{},[566,1024,1025,1031,1033,1035,1037,1039],{},[591,1026,1027],{},[594,1028,1030],{"tip":1029},"Reads incoming W3C traceparent \u002F tracestate headers and propagates them through the wide event for distributed tracing correlation.","W3C trace context (traceparent)",[591,1032,447],{"align":574},[591,1034,620],{"align":574},[591,1036,620],{"align":574},[591,1038,620],{"align":574},[591,1040,1041],{"align":584},[465,1042,575],{},[566,1044,1045,1051,1053,1055,1057,1059],{},[591,1046,1047],{},[594,1048,1050],{"tip":1049},"Drop-in middleware for Vercel AI SDK that auto-tracks token usage, tool calls, streaming metrics, and cost per LLM call.","AI SDK integration (tokens \u002F tools \u002F streaming)",[591,1052,447],{"align":574},[591,1054,620],{"align":574},[591,1056,620],{"align":574},[591,1058,620],{"align":574},[591,1060,1061],{"align":584},[465,1062,575],{},[566,1064,1065,1071,1073,1075,1077,1079],{},[591,1066,1067],{},[594,1068,1070],{"tip":1069},"One-line plugin for Better Auth that emits wide events for sign-in, sign-up, password reset, session refresh, and revocation.","Better Auth integration",[591,1072,447],{"align":574},[591,1074,620],{"align":574},[591,1076,620],{"align":574},[591,1078,620],{"align":574},[591,1080,1081],{"align":584},[465,1082,575],{},[566,1084,1085,1091,1093,1095,1097,1099],{},[591,1086,1087],{},[594,1088,1090],{"tip":1089},"Store logs in your own NuxtHub-hosted database with automatic retention — no external observability vendor required.","Self-hosted storage (NuxtHub adapter)",[591,1092,447],{"align":574},[591,1094,620],{"align":574},[591,1096,620],{"align":574},[591,1098,620],{"align":574},[591,1100,1101],{"align":584},[465,1102,575],{},[566,1104,1105,1111,1113,1115,1117,1119],{},[591,1106,1107],{},[594,1108,1110],{"tip":1109},"First-class support for Cloudflare Workers and Vercel Edge with waitUntil() integration so drains finish before the runtime terminates.","Edge \u002F Workers runtime",[591,1112,447],{"align":574},[591,1114,646],{"align":574},[591,1116,620],{"align":574},[591,1118,620],{"align":574},[591,1120,1121],{"align":584},[465,1122,575],{},[555,1124,1126],{"id":1125},"footprint-and-ecosystem","Footprint and ecosystem",[560,1128,1129,1145],{},[563,1130,1131],{},[566,1132,1133,1135,1137,1139,1141,1143],{},[569,1134,571],{},[569,1136,575],{"align":574},[569,1138,467],{"align":574},[569,1140,475],{"align":574},[569,1142,471],{"align":574},[569,1144,543],{"align":584},[586,1146,1147,1168,1191,1215,1236,1256,1276,1296],{},[566,1148,1149,1155,1157,1160,1162,1164],{},[591,1150,1151],{},[594,1152,1154],{"tip":1153},"evlog itself ships no production deps. Adapters lazy-load their vendor SDKs only when imported.","Zero transitive dependencies",[591,1156,600],{"align":574},[591,1158,1159],{"align":574},"1 dep",[591,1161,620],{"align":574},[591,1163,620],{"align":574},[591,1165,1166],{"align":584},[465,1167,575],{},[566,1169,1170,1176,1179,1181,1184,1187],{},[591,1171,1172],{},[594,1173,1175],{"tip":1174},"Approximate gzipped size of the core logger when imported into a server bundle. Smaller is better for cold-start time on serverless.","Bundle size (gzip)",[591,1177,1178],{"align":574},"~6 kB",[591,1180,1178],{"align":574},[591,1182,1183],{"align":574},"~12 kB",[591,1185,1186],{"align":574},"~50 kB",[591,1188,1189],{"align":584},[465,1190,575],{},[566,1192,1193,1199,1202,1205,1208,1211],{},[591,1194,1195],{},[594,1196,1198],{"tip":1197},"How many full request lifecycles (start → set\u002Fset\u002Fset → emit) the logger can complete per second on a single core. See packages\u002Fevlog\u002Fbench\u002F for the methodology.","Wide event lifecycle throughput",[591,1200,1201],{"align":574},"1.58M ops\u002Fs",[591,1203,1204],{"align":574},"206K ops\u002Fs",[591,1206,1207],{"align":574},"n\u002Fa",[591,1209,1210],{"align":574},"112K ops\u002Fs",[591,1212,1213],{"align":584},[465,1214,575],{},[566,1216,1217,1223,1225,1228,1230,1232],{},[591,1218,1219],{},[594,1220,1222],{"tip":1221},"One-line installs for Nuxt, Nitro, Next.js, SvelteKit, TanStack Start, React Router, NestJS, Express, Hono, Fastify, Elysia, Cloudflare Workers, and Vercel Edge.","Framework auto-init (13+ integrations)",[591,1224,600],{"align":574},[591,1226,1227],{"align":574},"HTTP only",[591,1229,620],{"align":574},[591,1231,620],{"align":574},[591,1233,1234],{"align":584},[465,1235,575],{},[566,1237,1238,1244,1246,1248,1250,1252],{},[591,1239,1240],{},[594,1241,1243],{"tip":1242},"Browser logger that batches client-side events and ships them to your server over HTTP, where they merge into the wide event lifecycle.","Client → server log transport",[591,1245,600],{"align":574},[591,1247,620],{"align":574},[591,1249,620],{"align":574},[591,1251,620],{"align":574},[591,1253,1254],{"align":584},[465,1255,575],{},[566,1257,1258,1264,1266,1268,1270,1272],{},[591,1259,1260],{},[594,1261,1263],{"tip":1262},"Build-time console.log → log.info rewrite so you can adopt evlog without manually editing every file.","Vite plugin (auto-replace console.log)",[591,1265,600],{"align":574},[591,1267,620],{"align":574},[591,1269,620],{"align":574},[591,1271,620],{"align":574},[591,1273,1274],{"align":584},[465,1275,575],{},[566,1277,1278,1284,1286,1288,1290,1292],{},[591,1279,1280],{},[594,1281,1283],{"tip":1282},"Skip logging entirely for paths like \u002Fhealth or \u002Fmetrics using glob patterns — keeps your noise floor low without adding middleware.","Path filtering (include \u002F exclude globs)",[591,1285,447],{"align":574},[591,1287,689],{"align":574},[591,1289,620],{"align":574},[591,1291,689],{"align":574},[591,1293,1294],{"align":584},[465,1295,575],{},[566,1297,1298,1304,1306,1308,1310,1312],{},[591,1299,1300],{},[594,1301,1303],{"tip":1302},"Bundled .skill.md files so AI coding agents write evlog code in the right style without you teaching them every time.","AI agent skills (Cursor \u002F Claude \u002F ChatGPT)",[591,1305,600],{"align":574},[591,1307,620],{"align":574},[591,1309,620],{"align":574},[591,1311,620],{"align":574},[591,1313,1314],{"align":584},[465,1315,575],{},[461,1317,1318,1319,1322,1323,1326,1327,1330,1331,1335],{},"Counted up across the three tables (33 rows total): evlog wins ",[465,1320,1321],{},"23"," rows outright, ties on ",[465,1324,1325],{},"6",", and loses ",[465,1328,1329],{},"4"," — custom levels, runtime level mutation, plugin\u002Fserializer system, and async-I\u002FO on a worker thread. All four losses are documented in ",[510,1332,1334],{"href":1333},"#honest-gaps-today","Honest gaps"," below so you know what you're trading off.",[461,1337,1338,1339,1347,1348,1351],{},"See ",[510,1340,1344],{"href":1341,"rel":1342},"https:\u002F\u002Fgithub.com\u002Fhugorcd\u002Fevlog\u002Ftree\u002Fmain\u002Fpackages\u002Fevlog\u002Fbench",[1343],"nofollow",[493,1345,1346],{},"packages\u002Fevlog\u002Fbench\u002F"," for the open-source benchmarks behind the throughput numbers, and the ",[510,1349,1350],{"href":189},"Performance page"," for the full breakdown.",[478,1353,1355],{"id":1354},"honest-gaps-today","Honest gaps (today)",[461,1357,1358],{},"We'd rather you read this list than discover the limits the hard way. Each item is a potential future Linear ticket — none of them are currently blocking for the workloads we've shipped evlog on.",[555,1360,1362,1363],{"id":1361},"no-persistent-bindings-shorthand-on-log","No persistent-bindings shorthand on ",[493,1364,1365],{},"log.*",[461,1367,1368,1369,1372,1373,1375],{},"pino has ",[493,1370,1371],{},"log.child({ component: 'auth' })"," that returns a new logger inheriting both the parent's bindings and the child's. evlog's simple ",[493,1374,1365],{}," API is global; to attach persistent context you create a wide-event logger:",[1377,1378,1383],"pre",{"className":1379,"code":1380,"language":1381,"meta":1382,"style":1382},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { createLogger } from 'evlog'\n\nconst log = createLogger({ component: 'auth' })\nlog.set({ userId: 42 })\nlog.emit()\n","typescript","",[493,1384,1385,1417,1424,1466,1495],{"__ignoreMap":1382},[1386,1387,1390,1394,1398,1402,1405,1408,1411,1414],"span",{"class":1388,"line":1389},"line",1,[1386,1391,1393],{"class":1392},"s7zQu","import",[1386,1395,1397],{"class":1396},"sMK4o"," {",[1386,1399,1401],{"class":1400},"sTEyZ"," createLogger",[1386,1403,1404],{"class":1396}," }",[1386,1406,1407],{"class":1392}," from",[1386,1409,1410],{"class":1396}," '",[1386,1412,575],{"class":1413},"sfazB",[1386,1415,1416],{"class":1396},"'\n",[1386,1418,1420],{"class":1388,"line":1419},2,[1386,1421,1423],{"emptyLinePlaceholder":1422},true,"\n",[1386,1425,1427,1431,1434,1437,1440,1443,1446,1450,1453,1455,1458,1461,1463],{"class":1388,"line":1426},3,[1386,1428,1430],{"class":1429},"spNyl","const",[1386,1432,1433],{"class":1400}," log ",[1386,1435,1436],{"class":1396},"=",[1386,1438,1401],{"class":1439},"s2Zo4",[1386,1441,1442],{"class":1400},"(",[1386,1444,1445],{"class":1396},"{",[1386,1447,1449],{"class":1448},"swJcz"," component",[1386,1451,1452],{"class":1396},":",[1386,1454,1410],{"class":1396},[1386,1456,1457],{"class":1413},"auth",[1386,1459,1460],{"class":1396},"'",[1386,1462,1404],{"class":1396},[1386,1464,1465],{"class":1400},")\n",[1386,1467,1469,1472,1475,1478,1480,1482,1485,1487,1491,1493],{"class":1388,"line":1468},4,[1386,1470,1471],{"class":1400},"log",[1386,1473,1474],{"class":1396},".",[1386,1476,1477],{"class":1439},"set",[1386,1479,1442],{"class":1400},[1386,1481,1445],{"class":1396},[1386,1483,1484],{"class":1448}," userId",[1386,1486,1452],{"class":1396},[1386,1488,1490],{"class":1489},"sbssI"," 42",[1386,1492,1404],{"class":1396},[1386,1494,1465],{"class":1400},[1386,1496,1498,1500,1502,1505],{"class":1388,"line":1497},5,[1386,1499,1471],{"class":1400},[1386,1501,1474],{"class":1396},[1386,1503,1504],{"class":1439},"emit",[1386,1506,1507],{"class":1400},"()\n",[461,1509,1510,1511,1514,1515,1518],{},"Or, in framework integrations, the request middleware does it for you. This works but it's not the same ergonomic shape as ",[493,1512,1513],{},"pino.child",". A ",[493,1516,1517],{},"log.child(bindings)"," shorthand is a likely next addition.",[555,1520,1522,1525],{"id":1521},"minlevel-is-set-once-at-startup",[493,1523,1524],{},"minLevel"," is set once at startup",[461,1527,1528,1529,1531,1532,1535,1536,1539,1540,1543,1544,1547],{},"You configure ",[493,1530,1524],{}," in ",[493,1533,1534],{},"initLogger({ minLevel: 'info' })"," and that's it for the process lifetime. pino lets you mutate ",[493,1537,1538],{},"logger.level = 'debug'"," at runtime (handy for ",[493,1541,1542],{},"--verbose"," flags or hot-reload). The workaround today is to call ",[493,1545,1546],{},"initLogger"," again before locking — fine for CLIs that read flags before any logging, awkward for runtime toggles.",[555,1549,1551],{"id":1550},"no-custom-levels","No custom levels",[461,1553,1554,1555,1558,1559,1558,1561,1558,1564,1567,1568,468,1571,468,1574,1577,1578,1580,1581,1583],{},"evlog ships ",[493,1556,1557],{},"debug"," \u002F ",[493,1560,548],{},[493,1562,1563],{},"warn",[493,1565,1566],{},"error"," and that's it. pino, consola, and winston all let you define ",[493,1569,1570],{},"trace",[493,1572,1573],{},"notice",[493,1575,1576],{},"fatal",", etc. We chose four levels on purpose (most teams never use more than four), but if your existing pipeline depends on ",[493,1579,1576],{}," or ",[493,1582,1570],{}," you'll need to map them onto the closest evlog level.",[555,1585,1587,1588],{"id":1586},"no-multi-stream-transport-array-on-log","No multi-stream \u002F transport array on ",[493,1589,1365],{},[461,1591,1592,1593,1596,1597,1600],{},"pino lets you pipe a single log to multiple destinations via ",[493,1594,1595],{},"pino.multistream",". evlog does the same via ",[510,1598,1599],{"href":422},"the drain pipeline"," (one drain that fans out to N adapters, with batching and retry shared across all of them) — but the mental model is different. If you've structured your existing code around \"stream A is debug to stdout, stream B is warn+ to a file, stream C is error to Sentry\", you'll rebuild that as drain-level routing instead.",[555,1602,1604],{"id":1603},"no-formatter-serializer-plugin-system","No formatter \u002F serializer plugin system",[461,1606,1368,1607,1610,1611,495,1614,1617,1618,1474],{},[493,1608,1609],{},"serializers"," for converting common types (errors, requests, responses) into JSON. evlog handles the common cases via the redaction layer and the built-in error serialization (",[493,1612,1613],{},"createError",[493,1615,1616],{},"parseError","); for anything custom (e.g. masking a particular field or transforming a payload), you write it inside a custom drain or before calling ",[493,1619,1620],{},"log.set",[478,1622,1624],{"id":1623},"migrating-from","Migrating from",[461,1626,1627,1628,1631,1632,1635],{},"Pick the tab that matches your current logger. Each tab shows the ",[465,1629,1630],{},"before"," code in that library's own API. Underneath the tabs is the single ",[465,1633,1634],{},"after"," snippet — the same evlog code regardless of where you came from.",[1637,1638,1639,2076,2541,2853],"code-group",{},[1377,1640,1642],{"className":1379,"code":1641,"filename":467,"language":1381,"meta":1382,"style":1382},"import pino from 'pino'\n\nconst log = pino({ name: 'checkout' })\nconst child = log.child({ flow: 'checkout' })\n\nchild.info({ event: 'checkout_started' })\n\ntry {\n  const cart = await getCart(userId)\n  child.info({ cart: { items: cart.items.length, total: cart.total } }, 'cart loaded')\n\n  const charge = await stripe.charge(cart.total)\n  child.info({ stripe: { chargeId: charge.id } }, 'charge ok')\n\n  if (!charge.success) {\n    throw new Error(`Payment failed: ${charge.decline_reason}`)\n  }\n} catch (err) {\n  child.error({ err }, 'checkout failed')\n  throw err\n}\n",[493,1643,1644,1660,1664,1695,1731,1735,1764,1769,1778,1803,1869,1874,1905,1949,1954,1979,2014,2020,2034,2061,2070],{"__ignoreMap":1382},[1386,1645,1646,1648,1651,1654,1656,1658],{"class":1388,"line":1389},[1386,1647,1393],{"class":1392},[1386,1649,1650],{"class":1400}," pino ",[1386,1652,1653],{"class":1392},"from",[1386,1655,1410],{"class":1396},[1386,1657,467],{"class":1413},[1386,1659,1416],{"class":1396},[1386,1661,1662],{"class":1388,"line":1419},[1386,1663,1423],{"emptyLinePlaceholder":1422},[1386,1665,1666,1668,1670,1672,1675,1677,1679,1682,1684,1686,1689,1691,1693],{"class":1388,"line":1426},[1386,1667,1430],{"class":1429},[1386,1669,1433],{"class":1400},[1386,1671,1436],{"class":1396},[1386,1673,1674],{"class":1439}," pino",[1386,1676,1442],{"class":1400},[1386,1678,1445],{"class":1396},[1386,1680,1681],{"class":1448}," name",[1386,1683,1452],{"class":1396},[1386,1685,1410],{"class":1396},[1386,1687,1688],{"class":1413},"checkout",[1386,1690,1460],{"class":1396},[1386,1692,1404],{"class":1396},[1386,1694,1465],{"class":1400},[1386,1696,1697,1699,1702,1704,1707,1709,1712,1714,1716,1719,1721,1723,1725,1727,1729],{"class":1388,"line":1468},[1386,1698,1430],{"class":1429},[1386,1700,1701],{"class":1400}," child ",[1386,1703,1436],{"class":1396},[1386,1705,1706],{"class":1400}," log",[1386,1708,1474],{"class":1396},[1386,1710,1711],{"class":1439},"child",[1386,1713,1442],{"class":1400},[1386,1715,1445],{"class":1396},[1386,1717,1718],{"class":1448}," flow",[1386,1720,1452],{"class":1396},[1386,1722,1410],{"class":1396},[1386,1724,1688],{"class":1413},[1386,1726,1460],{"class":1396},[1386,1728,1404],{"class":1396},[1386,1730,1465],{"class":1400},[1386,1732,1733],{"class":1388,"line":1497},[1386,1734,1423],{"emptyLinePlaceholder":1422},[1386,1736,1738,1740,1742,1744,1746,1748,1751,1753,1755,1758,1760,1762],{"class":1388,"line":1737},6,[1386,1739,1711],{"class":1400},[1386,1741,1474],{"class":1396},[1386,1743,548],{"class":1439},[1386,1745,1442],{"class":1400},[1386,1747,1445],{"class":1396},[1386,1749,1750],{"class":1448}," event",[1386,1752,1452],{"class":1396},[1386,1754,1410],{"class":1396},[1386,1756,1757],{"class":1413},"checkout_started",[1386,1759,1460],{"class":1396},[1386,1761,1404],{"class":1396},[1386,1763,1465],{"class":1400},[1386,1765,1767],{"class":1388,"line":1766},7,[1386,1768,1423],{"emptyLinePlaceholder":1422},[1386,1770,1772,1775],{"class":1388,"line":1771},8,[1386,1773,1774],{"class":1392},"try",[1386,1776,1777],{"class":1396}," {\n",[1386,1779,1781,1784,1787,1790,1793,1796,1798,1801],{"class":1388,"line":1780},9,[1386,1782,1783],{"class":1429},"  const",[1386,1785,1786],{"class":1400}," cart",[1386,1788,1789],{"class":1396}," =",[1386,1791,1792],{"class":1392}," await",[1386,1794,1795],{"class":1439}," getCart",[1386,1797,1442],{"class":1448},[1386,1799,1800],{"class":1400},"userId",[1386,1802,1465],{"class":1448},[1386,1804,1806,1809,1811,1813,1815,1817,1819,1821,1823,1826,1828,1830,1832,1835,1837,1840,1843,1846,1848,1850,1852,1855,1857,1860,1862,1865,1867],{"class":1388,"line":1805},10,[1386,1807,1808],{"class":1400},"  child",[1386,1810,1474],{"class":1396},[1386,1812,548],{"class":1439},[1386,1814,1442],{"class":1448},[1386,1816,1445],{"class":1396},[1386,1818,1786],{"class":1448},[1386,1820,1452],{"class":1396},[1386,1822,1397],{"class":1396},[1386,1824,1825],{"class":1448}," items",[1386,1827,1452],{"class":1396},[1386,1829,1786],{"class":1400},[1386,1831,1474],{"class":1396},[1386,1833,1834],{"class":1400},"items",[1386,1836,1474],{"class":1396},[1386,1838,1839],{"class":1400},"length",[1386,1841,1842],{"class":1396},",",[1386,1844,1845],{"class":1448}," total",[1386,1847,1452],{"class":1396},[1386,1849,1786],{"class":1400},[1386,1851,1474],{"class":1396},[1386,1853,1854],{"class":1400},"total",[1386,1856,1404],{"class":1396},[1386,1858,1859],{"class":1396}," },",[1386,1861,1410],{"class":1396},[1386,1863,1864],{"class":1413},"cart loaded",[1386,1866,1460],{"class":1396},[1386,1868,1465],{"class":1448},[1386,1870,1872],{"class":1388,"line":1871},11,[1386,1873,1423],{"emptyLinePlaceholder":1422},[1386,1875,1877,1879,1882,1884,1886,1889,1891,1894,1896,1899,1901,1903],{"class":1388,"line":1876},12,[1386,1878,1783],{"class":1429},[1386,1880,1881],{"class":1400}," charge",[1386,1883,1789],{"class":1396},[1386,1885,1792],{"class":1392},[1386,1887,1888],{"class":1400}," stripe",[1386,1890,1474],{"class":1396},[1386,1892,1893],{"class":1439},"charge",[1386,1895,1442],{"class":1448},[1386,1897,1898],{"class":1400},"cart",[1386,1900,1474],{"class":1396},[1386,1902,1854],{"class":1400},[1386,1904,1465],{"class":1448},[1386,1906,1908,1910,1912,1914,1916,1918,1920,1922,1924,1927,1929,1931,1933,1936,1938,1940,1942,1945,1947],{"class":1388,"line":1907},13,[1386,1909,1808],{"class":1400},[1386,1911,1474],{"class":1396},[1386,1913,548],{"class":1439},[1386,1915,1442],{"class":1448},[1386,1917,1445],{"class":1396},[1386,1919,1888],{"class":1448},[1386,1921,1452],{"class":1396},[1386,1923,1397],{"class":1396},[1386,1925,1926],{"class":1448}," chargeId",[1386,1928,1452],{"class":1396},[1386,1930,1881],{"class":1400},[1386,1932,1474],{"class":1396},[1386,1934,1935],{"class":1400},"id",[1386,1937,1404],{"class":1396},[1386,1939,1859],{"class":1396},[1386,1941,1410],{"class":1396},[1386,1943,1944],{"class":1413},"charge ok",[1386,1946,1460],{"class":1396},[1386,1948,1465],{"class":1448},[1386,1950,1952],{"class":1388,"line":1951},14,[1386,1953,1423],{"emptyLinePlaceholder":1422},[1386,1955,1957,1960,1963,1966,1968,1970,1973,1976],{"class":1388,"line":1956},15,[1386,1958,1959],{"class":1392},"  if",[1386,1961,1962],{"class":1448}," (",[1386,1964,1965],{"class":1396},"!",[1386,1967,1893],{"class":1400},[1386,1969,1474],{"class":1396},[1386,1971,1972],{"class":1400},"success",[1386,1974,1975],{"class":1448},") ",[1386,1977,1978],{"class":1396},"{\n",[1386,1980,1982,1985,1988,1991,1993,1996,1999,2002,2004,2006,2009,2012],{"class":1388,"line":1981},16,[1386,1983,1984],{"class":1392},"    throw",[1386,1986,1987],{"class":1396}," new",[1386,1989,1990],{"class":1439}," Error",[1386,1992,1442],{"class":1448},[1386,1994,1995],{"class":1396},"`",[1386,1997,1998],{"class":1413},"Payment failed: ",[1386,2000,2001],{"class":1396},"${",[1386,2003,1893],{"class":1400},[1386,2005,1474],{"class":1396},[1386,2007,2008],{"class":1400},"decline_reason",[1386,2010,2011],{"class":1396},"}`",[1386,2013,1465],{"class":1448},[1386,2015,2017],{"class":1388,"line":2016},17,[1386,2018,2019],{"class":1396},"  }\n",[1386,2021,2023,2026,2029,2032],{"class":1388,"line":2022},18,[1386,2024,2025],{"class":1396},"}",[1386,2027,2028],{"class":1392}," catch",[1386,2030,2031],{"class":1400}," (err) ",[1386,2033,1978],{"class":1396},[1386,2035,2037,2039,2041,2043,2045,2047,2050,2052,2054,2057,2059],{"class":1388,"line":2036},19,[1386,2038,1808],{"class":1400},[1386,2040,1474],{"class":1396},[1386,2042,1566],{"class":1439},[1386,2044,1442],{"class":1448},[1386,2046,1445],{"class":1396},[1386,2048,2049],{"class":1400}," err",[1386,2051,1859],{"class":1396},[1386,2053,1410],{"class":1396},[1386,2055,2056],{"class":1413},"checkout failed",[1386,2058,1460],{"class":1396},[1386,2060,1465],{"class":1448},[1386,2062,2064,2067],{"class":1388,"line":2063},20,[1386,2065,2066],{"class":1392},"  throw",[1386,2068,2069],{"class":1400}," err\n",[1386,2071,2073],{"class":1388,"line":2072},21,[1386,2074,2075],{"class":1396},"}\n",[1377,2077,2079],{"className":1379,"code":2078,"filename":471,"language":1381,"meta":1382,"style":1382},"import { createLogger as createWinston, format, transports } from 'winston'\n\nconst log = createWinston({\n  defaultMeta: { service: 'checkout' },\n  format: format.combine(format.timestamp(), format.json()),\n  transports: [new transports.Console()],\n})\n\nlog.info({ event: 'checkout_started', flow: 'checkout' })\n\ntry {\n  const cart = await getCart(userId)\n  log.info({ flow: 'checkout', cart: { items: cart.items.length, total: cart.total } })\n\n  const charge = await stripe.charge(cart.total)\n  log.info({ flow: 'checkout', stripe: { chargeId: charge.id } })\n\n  if (!charge.success) {\n    throw new Error(`Payment failed: ${charge.decline_reason}`)\n  }\n} catch (err) {\n  log.error({ flow: 'checkout', err })\n  throw err\n}\n",[493,2080,2081,2115,2119,2133,2156,2196,2221,2227,2231,2269,2273,2279,2297,2360,2364,2390,2436,2440,2458,2484,2488,2498,2529,2536],{"__ignoreMap":1382},[1386,2082,2083,2085,2087,2089,2092,2095,2097,2100,2102,2105,2107,2109,2111,2113],{"class":1388,"line":1389},[1386,2084,1393],{"class":1392},[1386,2086,1397],{"class":1396},[1386,2088,1401],{"class":1400},[1386,2090,2091],{"class":1392}," as",[1386,2093,2094],{"class":1400}," createWinston",[1386,2096,1842],{"class":1396},[1386,2098,2099],{"class":1400}," format",[1386,2101,1842],{"class":1396},[1386,2103,2104],{"class":1400}," transports",[1386,2106,1404],{"class":1396},[1386,2108,1407],{"class":1392},[1386,2110,1410],{"class":1396},[1386,2112,471],{"class":1413},[1386,2114,1416],{"class":1396},[1386,2116,2117],{"class":1388,"line":1419},[1386,2118,1423],{"emptyLinePlaceholder":1422},[1386,2120,2121,2123,2125,2127,2129,2131],{"class":1388,"line":1426},[1386,2122,1430],{"class":1429},[1386,2124,1433],{"class":1400},[1386,2126,1436],{"class":1396},[1386,2128,2094],{"class":1439},[1386,2130,1442],{"class":1400},[1386,2132,1978],{"class":1396},[1386,2134,2135,2138,2140,2142,2145,2147,2149,2151,2153],{"class":1388,"line":1468},[1386,2136,2137],{"class":1448},"  defaultMeta",[1386,2139,1452],{"class":1396},[1386,2141,1397],{"class":1396},[1386,2143,2144],{"class":1448}," service",[1386,2146,1452],{"class":1396},[1386,2148,1410],{"class":1396},[1386,2150,1688],{"class":1413},[1386,2152,1460],{"class":1396},[1386,2154,2155],{"class":1396}," },\n",[1386,2157,2158,2161,2163,2165,2167,2170,2173,2175,2178,2181,2183,2185,2187,2190,2193],{"class":1388,"line":1497},[1386,2159,2160],{"class":1448},"  format",[1386,2162,1452],{"class":1396},[1386,2164,2099],{"class":1400},[1386,2166,1474],{"class":1396},[1386,2168,2169],{"class":1439},"combine",[1386,2171,2172],{"class":1400},"(format",[1386,2174,1474],{"class":1396},[1386,2176,2177],{"class":1439},"timestamp",[1386,2179,2180],{"class":1400},"()",[1386,2182,1842],{"class":1396},[1386,2184,2099],{"class":1400},[1386,2186,1474],{"class":1396},[1386,2188,2189],{"class":1439},"json",[1386,2191,2192],{"class":1400},"())",[1386,2194,2195],{"class":1396},",\n",[1386,2197,2198,2201,2203,2206,2209,2211,2213,2216,2219],{"class":1388,"line":1737},[1386,2199,2200],{"class":1448},"  transports",[1386,2202,1452],{"class":1396},[1386,2204,2205],{"class":1400}," [",[1386,2207,2208],{"class":1396},"new",[1386,2210,2104],{"class":1400},[1386,2212,1474],{"class":1396},[1386,2214,2215],{"class":1439},"Console",[1386,2217,2218],{"class":1400},"()]",[1386,2220,2195],{"class":1396},[1386,2222,2223,2225],{"class":1388,"line":1766},[1386,2224,2025],{"class":1396},[1386,2226,1465],{"class":1400},[1386,2228,2229],{"class":1388,"line":1771},[1386,2230,1423],{"emptyLinePlaceholder":1422},[1386,2232,2233,2235,2237,2239,2241,2243,2245,2247,2249,2251,2253,2255,2257,2259,2261,2263,2265,2267],{"class":1388,"line":1780},[1386,2234,1471],{"class":1400},[1386,2236,1474],{"class":1396},[1386,2238,548],{"class":1439},[1386,2240,1442],{"class":1400},[1386,2242,1445],{"class":1396},[1386,2244,1750],{"class":1448},[1386,2246,1452],{"class":1396},[1386,2248,1410],{"class":1396},[1386,2250,1757],{"class":1413},[1386,2252,1460],{"class":1396},[1386,2254,1842],{"class":1396},[1386,2256,1718],{"class":1448},[1386,2258,1452],{"class":1396},[1386,2260,1410],{"class":1396},[1386,2262,1688],{"class":1413},[1386,2264,1460],{"class":1396},[1386,2266,1404],{"class":1396},[1386,2268,1465],{"class":1400},[1386,2270,2271],{"class":1388,"line":1805},[1386,2272,1423],{"emptyLinePlaceholder":1422},[1386,2274,2275,2277],{"class":1388,"line":1871},[1386,2276,1774],{"class":1392},[1386,2278,1777],{"class":1396},[1386,2280,2281,2283,2285,2287,2289,2291,2293,2295],{"class":1388,"line":1876},[1386,2282,1783],{"class":1429},[1386,2284,1786],{"class":1400},[1386,2286,1789],{"class":1396},[1386,2288,1792],{"class":1392},[1386,2290,1795],{"class":1439},[1386,2292,1442],{"class":1448},[1386,2294,1800],{"class":1400},[1386,2296,1465],{"class":1448},[1386,2298,2299,2302,2304,2306,2308,2310,2312,2314,2316,2318,2320,2322,2324,2326,2328,2330,2332,2334,2336,2338,2340,2342,2344,2346,2348,2350,2352,2354,2356,2358],{"class":1388,"line":1907},[1386,2300,2301],{"class":1400},"  log",[1386,2303,1474],{"class":1396},[1386,2305,548],{"class":1439},[1386,2307,1442],{"class":1448},[1386,2309,1445],{"class":1396},[1386,2311,1718],{"class":1448},[1386,2313,1452],{"class":1396},[1386,2315,1410],{"class":1396},[1386,2317,1688],{"class":1413},[1386,2319,1460],{"class":1396},[1386,2321,1842],{"class":1396},[1386,2323,1786],{"class":1448},[1386,2325,1452],{"class":1396},[1386,2327,1397],{"class":1396},[1386,2329,1825],{"class":1448},[1386,2331,1452],{"class":1396},[1386,2333,1786],{"class":1400},[1386,2335,1474],{"class":1396},[1386,2337,1834],{"class":1400},[1386,2339,1474],{"class":1396},[1386,2341,1839],{"class":1400},[1386,2343,1842],{"class":1396},[1386,2345,1845],{"class":1448},[1386,2347,1452],{"class":1396},[1386,2349,1786],{"class":1400},[1386,2351,1474],{"class":1396},[1386,2353,1854],{"class":1400},[1386,2355,1404],{"class":1396},[1386,2357,1404],{"class":1396},[1386,2359,1465],{"class":1448},[1386,2361,2362],{"class":1388,"line":1951},[1386,2363,1423],{"emptyLinePlaceholder":1422},[1386,2365,2366,2368,2370,2372,2374,2376,2378,2380,2382,2384,2386,2388],{"class":1388,"line":1956},[1386,2367,1783],{"class":1429},[1386,2369,1881],{"class":1400},[1386,2371,1789],{"class":1396},[1386,2373,1792],{"class":1392},[1386,2375,1888],{"class":1400},[1386,2377,1474],{"class":1396},[1386,2379,1893],{"class":1439},[1386,2381,1442],{"class":1448},[1386,2383,1898],{"class":1400},[1386,2385,1474],{"class":1396},[1386,2387,1854],{"class":1400},[1386,2389,1465],{"class":1448},[1386,2391,2392,2394,2396,2398,2400,2402,2404,2406,2408,2410,2412,2414,2416,2418,2420,2422,2424,2426,2428,2430,2432,2434],{"class":1388,"line":1981},[1386,2393,2301],{"class":1400},[1386,2395,1474],{"class":1396},[1386,2397,548],{"class":1439},[1386,2399,1442],{"class":1448},[1386,2401,1445],{"class":1396},[1386,2403,1718],{"class":1448},[1386,2405,1452],{"class":1396},[1386,2407,1410],{"class":1396},[1386,2409,1688],{"class":1413},[1386,2411,1460],{"class":1396},[1386,2413,1842],{"class":1396},[1386,2415,1888],{"class":1448},[1386,2417,1452],{"class":1396},[1386,2419,1397],{"class":1396},[1386,2421,1926],{"class":1448},[1386,2423,1452],{"class":1396},[1386,2425,1881],{"class":1400},[1386,2427,1474],{"class":1396},[1386,2429,1935],{"class":1400},[1386,2431,1404],{"class":1396},[1386,2433,1404],{"class":1396},[1386,2435,1465],{"class":1448},[1386,2437,2438],{"class":1388,"line":2016},[1386,2439,1423],{"emptyLinePlaceholder":1422},[1386,2441,2442,2444,2446,2448,2450,2452,2454,2456],{"class":1388,"line":2022},[1386,2443,1959],{"class":1392},[1386,2445,1962],{"class":1448},[1386,2447,1965],{"class":1396},[1386,2449,1893],{"class":1400},[1386,2451,1474],{"class":1396},[1386,2453,1972],{"class":1400},[1386,2455,1975],{"class":1448},[1386,2457,1978],{"class":1396},[1386,2459,2460,2462,2464,2466,2468,2470,2472,2474,2476,2478,2480,2482],{"class":1388,"line":2036},[1386,2461,1984],{"class":1392},[1386,2463,1987],{"class":1396},[1386,2465,1990],{"class":1439},[1386,2467,1442],{"class":1448},[1386,2469,1995],{"class":1396},[1386,2471,1998],{"class":1413},[1386,2473,2001],{"class":1396},[1386,2475,1893],{"class":1400},[1386,2477,1474],{"class":1396},[1386,2479,2008],{"class":1400},[1386,2481,2011],{"class":1396},[1386,2483,1465],{"class":1448},[1386,2485,2486],{"class":1388,"line":2063},[1386,2487,2019],{"class":1396},[1386,2489,2490,2492,2494,2496],{"class":1388,"line":2072},[1386,2491,2025],{"class":1396},[1386,2493,2028],{"class":1392},[1386,2495,2031],{"class":1400},[1386,2497,1978],{"class":1396},[1386,2499,2501,2503,2505,2507,2509,2511,2513,2515,2517,2519,2521,2523,2525,2527],{"class":1388,"line":2500},22,[1386,2502,2301],{"class":1400},[1386,2504,1474],{"class":1396},[1386,2506,1566],{"class":1439},[1386,2508,1442],{"class":1448},[1386,2510,1445],{"class":1396},[1386,2512,1718],{"class":1448},[1386,2514,1452],{"class":1396},[1386,2516,1410],{"class":1396},[1386,2518,1688],{"class":1413},[1386,2520,1460],{"class":1396},[1386,2522,1842],{"class":1396},[1386,2524,2049],{"class":1400},[1386,2526,1404],{"class":1396},[1386,2528,1465],{"class":1448},[1386,2530,2532,2534],{"class":1388,"line":2531},23,[1386,2533,2066],{"class":1392},[1386,2535,2069],{"class":1400},[1386,2537,2539],{"class":1388,"line":2538},24,[1386,2540,2075],{"class":1396},[1377,2542,2544],{"className":1379,"code":2543,"filename":475,"language":1381,"meta":1382,"style":1382},"import { consola } from 'consola'\n\nconst log = consola.withTag('checkout')\n\nlog.info('Starting checkout flow')\n\ntry {\n  const cart = await getCart(userId)\n  log.info('cart loaded', { items: cart.items.length, total: cart.total })\n\n  const charge = await stripe.charge(cart.total)\n  log.info('charge ok', { chargeId: charge.id })\n\n  if (!charge.success) {\n    throw new Error(`Payment failed: ${charge.decline_reason}`)\n  }\n} catch (err) {\n  log.error('checkout failed', err)\n  throw err\n}\n",[493,2545,2546,2565,2569,2594,2598,2617,2621,2627,2645,2695,2699,2725,2759,2763,2781,2807,2811,2821,2843,2849],{"__ignoreMap":1382},[1386,2547,2548,2550,2552,2555,2557,2559,2561,2563],{"class":1388,"line":1389},[1386,2549,1393],{"class":1392},[1386,2551,1397],{"class":1396},[1386,2553,2554],{"class":1400}," consola",[1386,2556,1404],{"class":1396},[1386,2558,1407],{"class":1392},[1386,2560,1410],{"class":1396},[1386,2562,475],{"class":1413},[1386,2564,1416],{"class":1396},[1386,2566,2567],{"class":1388,"line":1419},[1386,2568,1423],{"emptyLinePlaceholder":1422},[1386,2570,2571,2573,2575,2577,2579,2581,2584,2586,2588,2590,2592],{"class":1388,"line":1426},[1386,2572,1430],{"class":1429},[1386,2574,1433],{"class":1400},[1386,2576,1436],{"class":1396},[1386,2578,2554],{"class":1400},[1386,2580,1474],{"class":1396},[1386,2582,2583],{"class":1439},"withTag",[1386,2585,1442],{"class":1400},[1386,2587,1460],{"class":1396},[1386,2589,1688],{"class":1413},[1386,2591,1460],{"class":1396},[1386,2593,1465],{"class":1400},[1386,2595,2596],{"class":1388,"line":1468},[1386,2597,1423],{"emptyLinePlaceholder":1422},[1386,2599,2600,2602,2604,2606,2608,2610,2613,2615],{"class":1388,"line":1497},[1386,2601,1471],{"class":1400},[1386,2603,1474],{"class":1396},[1386,2605,548],{"class":1439},[1386,2607,1442],{"class":1400},[1386,2609,1460],{"class":1396},[1386,2611,2612],{"class":1413},"Starting checkout flow",[1386,2614,1460],{"class":1396},[1386,2616,1465],{"class":1400},[1386,2618,2619],{"class":1388,"line":1737},[1386,2620,1423],{"emptyLinePlaceholder":1422},[1386,2622,2623,2625],{"class":1388,"line":1766},[1386,2624,1774],{"class":1392},[1386,2626,1777],{"class":1396},[1386,2628,2629,2631,2633,2635,2637,2639,2641,2643],{"class":1388,"line":1771},[1386,2630,1783],{"class":1429},[1386,2632,1786],{"class":1400},[1386,2634,1789],{"class":1396},[1386,2636,1792],{"class":1392},[1386,2638,1795],{"class":1439},[1386,2640,1442],{"class":1448},[1386,2642,1800],{"class":1400},[1386,2644,1465],{"class":1448},[1386,2646,2647,2649,2651,2653,2655,2657,2659,2661,2663,2665,2667,2669,2671,2673,2675,2677,2679,2681,2683,2685,2687,2689,2691,2693],{"class":1388,"line":1780},[1386,2648,2301],{"class":1400},[1386,2650,1474],{"class":1396},[1386,2652,548],{"class":1439},[1386,2654,1442],{"class":1448},[1386,2656,1460],{"class":1396},[1386,2658,1864],{"class":1413},[1386,2660,1460],{"class":1396},[1386,2662,1842],{"class":1396},[1386,2664,1397],{"class":1396},[1386,2666,1825],{"class":1448},[1386,2668,1452],{"class":1396},[1386,2670,1786],{"class":1400},[1386,2672,1474],{"class":1396},[1386,2674,1834],{"class":1400},[1386,2676,1474],{"class":1396},[1386,2678,1839],{"class":1400},[1386,2680,1842],{"class":1396},[1386,2682,1845],{"class":1448},[1386,2684,1452],{"class":1396},[1386,2686,1786],{"class":1400},[1386,2688,1474],{"class":1396},[1386,2690,1854],{"class":1400},[1386,2692,1404],{"class":1396},[1386,2694,1465],{"class":1448},[1386,2696,2697],{"class":1388,"line":1805},[1386,2698,1423],{"emptyLinePlaceholder":1422},[1386,2700,2701,2703,2705,2707,2709,2711,2713,2715,2717,2719,2721,2723],{"class":1388,"line":1871},[1386,2702,1783],{"class":1429},[1386,2704,1881],{"class":1400},[1386,2706,1789],{"class":1396},[1386,2708,1792],{"class":1392},[1386,2710,1888],{"class":1400},[1386,2712,1474],{"class":1396},[1386,2714,1893],{"class":1439},[1386,2716,1442],{"class":1448},[1386,2718,1898],{"class":1400},[1386,2720,1474],{"class":1396},[1386,2722,1854],{"class":1400},[1386,2724,1465],{"class":1448},[1386,2726,2727,2729,2731,2733,2735,2737,2739,2741,2743,2745,2747,2749,2751,2753,2755,2757],{"class":1388,"line":1876},[1386,2728,2301],{"class":1400},[1386,2730,1474],{"class":1396},[1386,2732,548],{"class":1439},[1386,2734,1442],{"class":1448},[1386,2736,1460],{"class":1396},[1386,2738,1944],{"class":1413},[1386,2740,1460],{"class":1396},[1386,2742,1842],{"class":1396},[1386,2744,1397],{"class":1396},[1386,2746,1926],{"class":1448},[1386,2748,1452],{"class":1396},[1386,2750,1881],{"class":1400},[1386,2752,1474],{"class":1396},[1386,2754,1935],{"class":1400},[1386,2756,1404],{"class":1396},[1386,2758,1465],{"class":1448},[1386,2760,2761],{"class":1388,"line":1907},[1386,2762,1423],{"emptyLinePlaceholder":1422},[1386,2764,2765,2767,2769,2771,2773,2775,2777,2779],{"class":1388,"line":1951},[1386,2766,1959],{"class":1392},[1386,2768,1962],{"class":1448},[1386,2770,1965],{"class":1396},[1386,2772,1893],{"class":1400},[1386,2774,1474],{"class":1396},[1386,2776,1972],{"class":1400},[1386,2778,1975],{"class":1448},[1386,2780,1978],{"class":1396},[1386,2782,2783,2785,2787,2789,2791,2793,2795,2797,2799,2801,2803,2805],{"class":1388,"line":1956},[1386,2784,1984],{"class":1392},[1386,2786,1987],{"class":1396},[1386,2788,1990],{"class":1439},[1386,2790,1442],{"class":1448},[1386,2792,1995],{"class":1396},[1386,2794,1998],{"class":1413},[1386,2796,2001],{"class":1396},[1386,2798,1893],{"class":1400},[1386,2800,1474],{"class":1396},[1386,2802,2008],{"class":1400},[1386,2804,2011],{"class":1396},[1386,2806,1465],{"class":1448},[1386,2808,2809],{"class":1388,"line":1981},[1386,2810,2019],{"class":1396},[1386,2812,2813,2815,2817,2819],{"class":1388,"line":2016},[1386,2814,2025],{"class":1396},[1386,2816,2028],{"class":1392},[1386,2818,2031],{"class":1400},[1386,2820,1978],{"class":1396},[1386,2822,2823,2825,2827,2829,2831,2833,2835,2837,2839,2841],{"class":1388,"line":2022},[1386,2824,2301],{"class":1400},[1386,2826,1474],{"class":1396},[1386,2828,1566],{"class":1439},[1386,2830,1442],{"class":1448},[1386,2832,1460],{"class":1396},[1386,2834,2056],{"class":1413},[1386,2836,1460],{"class":1396},[1386,2838,1842],{"class":1396},[1386,2840,2049],{"class":1400},[1386,2842,1465],{"class":1448},[1386,2844,2845,2847],{"class":1388,"line":2036},[1386,2846,2066],{"class":1392},[1386,2848,2069],{"class":1400},[1386,2850,2851],{"class":1388,"line":2063},[1386,2852,2075],{"class":1396},[1377,2854,2857],{"className":1379,"code":2855,"filename":2856,"language":1381,"meta":1382,"style":1382},"console.log('[checkout] Starting checkout flow')\n\ntry {\n  const cart = await getCart(userId)\n  console.log('[checkout] cart loaded', { items: cart.items.length, total: cart.total })\n\n  const charge = await stripe.charge(cart.total)\n  console.log('[checkout] charge ok', { chargeId: charge.id })\n\n  if (!charge.success) {\n    throw new Error(`Payment failed: ${charge.decline_reason}`)\n  }\n} catch (err) {\n  console.error('[checkout] failed', err)\n  throw err\n}\n","console.log",[493,2858,2859,2879,2883,2889,2907,2959,2963,2989,3024,3028,3046,3072,3076,3086,3109,3115],{"__ignoreMap":1382},[1386,2860,2861,2864,2866,2868,2870,2872,2875,2877],{"class":1388,"line":1389},[1386,2862,2863],{"class":1400},"console",[1386,2865,1474],{"class":1396},[1386,2867,1471],{"class":1439},[1386,2869,1442],{"class":1400},[1386,2871,1460],{"class":1396},[1386,2873,2874],{"class":1413},"[checkout] Starting checkout flow",[1386,2876,1460],{"class":1396},[1386,2878,1465],{"class":1400},[1386,2880,2881],{"class":1388,"line":1419},[1386,2882,1423],{"emptyLinePlaceholder":1422},[1386,2884,2885,2887],{"class":1388,"line":1426},[1386,2886,1774],{"class":1392},[1386,2888,1777],{"class":1396},[1386,2890,2891,2893,2895,2897,2899,2901,2903,2905],{"class":1388,"line":1468},[1386,2892,1783],{"class":1429},[1386,2894,1786],{"class":1400},[1386,2896,1789],{"class":1396},[1386,2898,1792],{"class":1392},[1386,2900,1795],{"class":1439},[1386,2902,1442],{"class":1448},[1386,2904,1800],{"class":1400},[1386,2906,1465],{"class":1448},[1386,2908,2909,2912,2914,2916,2918,2920,2923,2925,2927,2929,2931,2933,2935,2937,2939,2941,2943,2945,2947,2949,2951,2953,2955,2957],{"class":1388,"line":1497},[1386,2910,2911],{"class":1400},"  console",[1386,2913,1474],{"class":1396},[1386,2915,1471],{"class":1439},[1386,2917,1442],{"class":1448},[1386,2919,1460],{"class":1396},[1386,2921,2922],{"class":1413},"[checkout] cart loaded",[1386,2924,1460],{"class":1396},[1386,2926,1842],{"class":1396},[1386,2928,1397],{"class":1396},[1386,2930,1825],{"class":1448},[1386,2932,1452],{"class":1396},[1386,2934,1786],{"class":1400},[1386,2936,1474],{"class":1396},[1386,2938,1834],{"class":1400},[1386,2940,1474],{"class":1396},[1386,2942,1839],{"class":1400},[1386,2944,1842],{"class":1396},[1386,2946,1845],{"class":1448},[1386,2948,1452],{"class":1396},[1386,2950,1786],{"class":1400},[1386,2952,1474],{"class":1396},[1386,2954,1854],{"class":1400},[1386,2956,1404],{"class":1396},[1386,2958,1465],{"class":1448},[1386,2960,2961],{"class":1388,"line":1737},[1386,2962,1423],{"emptyLinePlaceholder":1422},[1386,2964,2965,2967,2969,2971,2973,2975,2977,2979,2981,2983,2985,2987],{"class":1388,"line":1766},[1386,2966,1783],{"class":1429},[1386,2968,1881],{"class":1400},[1386,2970,1789],{"class":1396},[1386,2972,1792],{"class":1392},[1386,2974,1888],{"class":1400},[1386,2976,1474],{"class":1396},[1386,2978,1893],{"class":1439},[1386,2980,1442],{"class":1448},[1386,2982,1898],{"class":1400},[1386,2984,1474],{"class":1396},[1386,2986,1854],{"class":1400},[1386,2988,1465],{"class":1448},[1386,2990,2991,2993,2995,2997,2999,3001,3004,3006,3008,3010,3012,3014,3016,3018,3020,3022],{"class":1388,"line":1771},[1386,2992,2911],{"class":1400},[1386,2994,1474],{"class":1396},[1386,2996,1471],{"class":1439},[1386,2998,1442],{"class":1448},[1386,3000,1460],{"class":1396},[1386,3002,3003],{"class":1413},"[checkout] charge ok",[1386,3005,1460],{"class":1396},[1386,3007,1842],{"class":1396},[1386,3009,1397],{"class":1396},[1386,3011,1926],{"class":1448},[1386,3013,1452],{"class":1396},[1386,3015,1881],{"class":1400},[1386,3017,1474],{"class":1396},[1386,3019,1935],{"class":1400},[1386,3021,1404],{"class":1396},[1386,3023,1465],{"class":1448},[1386,3025,3026],{"class":1388,"line":1780},[1386,3027,1423],{"emptyLinePlaceholder":1422},[1386,3029,3030,3032,3034,3036,3038,3040,3042,3044],{"class":1388,"line":1805},[1386,3031,1959],{"class":1392},[1386,3033,1962],{"class":1448},[1386,3035,1965],{"class":1396},[1386,3037,1893],{"class":1400},[1386,3039,1474],{"class":1396},[1386,3041,1972],{"class":1400},[1386,3043,1975],{"class":1448},[1386,3045,1978],{"class":1396},[1386,3047,3048,3050,3052,3054,3056,3058,3060,3062,3064,3066,3068,3070],{"class":1388,"line":1871},[1386,3049,1984],{"class":1392},[1386,3051,1987],{"class":1396},[1386,3053,1990],{"class":1439},[1386,3055,1442],{"class":1448},[1386,3057,1995],{"class":1396},[1386,3059,1998],{"class":1413},[1386,3061,2001],{"class":1396},[1386,3063,1893],{"class":1400},[1386,3065,1474],{"class":1396},[1386,3067,2008],{"class":1400},[1386,3069,2011],{"class":1396},[1386,3071,1465],{"class":1448},[1386,3073,3074],{"class":1388,"line":1876},[1386,3075,2019],{"class":1396},[1386,3077,3078,3080,3082,3084],{"class":1388,"line":1907},[1386,3079,2025],{"class":1396},[1386,3081,2028],{"class":1392},[1386,3083,2031],{"class":1400},[1386,3085,1978],{"class":1396},[1386,3087,3088,3090,3092,3094,3096,3098,3101,3103,3105,3107],{"class":1388,"line":1951},[1386,3089,2911],{"class":1400},[1386,3091,1474],{"class":1396},[1386,3093,1566],{"class":1439},[1386,3095,1442],{"class":1448},[1386,3097,1460],{"class":1396},[1386,3099,3100],{"class":1413},"[checkout] failed",[1386,3102,1460],{"class":1396},[1386,3104,1842],{"class":1396},[1386,3106,2049],{"class":1400},[1386,3108,1465],{"class":1448},[1386,3110,3111,3113],{"class":1388,"line":1956},[1386,3112,2066],{"class":1392},[1386,3114,2069],{"class":1400},[1386,3116,3117],{"class":1388,"line":1981},[1386,3118,2075],{"class":1396},[461,3120,3121],{},"All four become this — same code regardless of the source library:",[1377,3123,3126],{"className":1379,"code":3124,"filename":3125,"language":1381,"meta":1382,"style":1382},"import { initLogger, createLogger, createError } from 'evlog'\n\ninitLogger({ env: { service: 'checkout' } })\n\nconst log = createLogger({ flow: 'checkout' })\n\ntry {\n  const cart = await getCart(userId)\n  log.set({ cart: { items: cart.items.length, total: cart.total } })\n\n  const charge = await stripe.charge(cart.total)\n  log.set({ stripe: { chargeId: charge.id } })\n\n  if (!charge.success) {\n    throw createError({\n      message: 'Payment failed',\n      status: 402,\n      why: charge.decline_reason,\n      fix: 'Try a different payment method',\n    })\n  }\n} catch (err) {\n  log.error(err as Error)\n  throw err\n} finally {\n  log.emit()\n}\n","After (evlog)",[493,3127,3128,3156,3160,3191,3195,3223,3227,3233,3251,3301,3305,3331,3365,3369,3387,3397,3413,3425,3440,3456,3463,3467,3477,3497,3503,3513,3524],{"__ignoreMap":1382},[1386,3129,3130,3132,3134,3137,3139,3141,3143,3146,3148,3150,3152,3154],{"class":1388,"line":1389},[1386,3131,1393],{"class":1392},[1386,3133,1397],{"class":1396},[1386,3135,3136],{"class":1400}," initLogger",[1386,3138,1842],{"class":1396},[1386,3140,1401],{"class":1400},[1386,3142,1842],{"class":1396},[1386,3144,3145],{"class":1400}," createError",[1386,3147,1404],{"class":1396},[1386,3149,1407],{"class":1392},[1386,3151,1410],{"class":1396},[1386,3153,575],{"class":1413},[1386,3155,1416],{"class":1396},[1386,3157,3158],{"class":1388,"line":1419},[1386,3159,1423],{"emptyLinePlaceholder":1422},[1386,3161,3162,3164,3166,3168,3171,3173,3175,3177,3179,3181,3183,3185,3187,3189],{"class":1388,"line":1426},[1386,3163,1546],{"class":1439},[1386,3165,1442],{"class":1400},[1386,3167,1445],{"class":1396},[1386,3169,3170],{"class":1448}," env",[1386,3172,1452],{"class":1396},[1386,3174,1397],{"class":1396},[1386,3176,2144],{"class":1448},[1386,3178,1452],{"class":1396},[1386,3180,1410],{"class":1396},[1386,3182,1688],{"class":1413},[1386,3184,1460],{"class":1396},[1386,3186,1404],{"class":1396},[1386,3188,1404],{"class":1396},[1386,3190,1465],{"class":1400},[1386,3192,3193],{"class":1388,"line":1468},[1386,3194,1423],{"emptyLinePlaceholder":1422},[1386,3196,3197,3199,3201,3203,3205,3207,3209,3211,3213,3215,3217,3219,3221],{"class":1388,"line":1497},[1386,3198,1430],{"class":1429},[1386,3200,1433],{"class":1400},[1386,3202,1436],{"class":1396},[1386,3204,1401],{"class":1439},[1386,3206,1442],{"class":1400},[1386,3208,1445],{"class":1396},[1386,3210,1718],{"class":1448},[1386,3212,1452],{"class":1396},[1386,3214,1410],{"class":1396},[1386,3216,1688],{"class":1413},[1386,3218,1460],{"class":1396},[1386,3220,1404],{"class":1396},[1386,3222,1465],{"class":1400},[1386,3224,3225],{"class":1388,"line":1737},[1386,3226,1423],{"emptyLinePlaceholder":1422},[1386,3228,3229,3231],{"class":1388,"line":1766},[1386,3230,1774],{"class":1392},[1386,3232,1777],{"class":1396},[1386,3234,3235,3237,3239,3241,3243,3245,3247,3249],{"class":1388,"line":1771},[1386,3236,1783],{"class":1429},[1386,3238,1786],{"class":1400},[1386,3240,1789],{"class":1396},[1386,3242,1792],{"class":1392},[1386,3244,1795],{"class":1439},[1386,3246,1442],{"class":1448},[1386,3248,1800],{"class":1400},[1386,3250,1465],{"class":1448},[1386,3252,3253,3255,3257,3259,3261,3263,3265,3267,3269,3271,3273,3275,3277,3279,3281,3283,3285,3287,3289,3291,3293,3295,3297,3299],{"class":1388,"line":1780},[1386,3254,2301],{"class":1400},[1386,3256,1474],{"class":1396},[1386,3258,1477],{"class":1439},[1386,3260,1442],{"class":1448},[1386,3262,1445],{"class":1396},[1386,3264,1786],{"class":1448},[1386,3266,1452],{"class":1396},[1386,3268,1397],{"class":1396},[1386,3270,1825],{"class":1448},[1386,3272,1452],{"class":1396},[1386,3274,1786],{"class":1400},[1386,3276,1474],{"class":1396},[1386,3278,1834],{"class":1400},[1386,3280,1474],{"class":1396},[1386,3282,1839],{"class":1400},[1386,3284,1842],{"class":1396},[1386,3286,1845],{"class":1448},[1386,3288,1452],{"class":1396},[1386,3290,1786],{"class":1400},[1386,3292,1474],{"class":1396},[1386,3294,1854],{"class":1400},[1386,3296,1404],{"class":1396},[1386,3298,1404],{"class":1396},[1386,3300,1465],{"class":1448},[1386,3302,3303],{"class":1388,"line":1805},[1386,3304,1423],{"emptyLinePlaceholder":1422},[1386,3306,3307,3309,3311,3313,3315,3317,3319,3321,3323,3325,3327,3329],{"class":1388,"line":1871},[1386,3308,1783],{"class":1429},[1386,3310,1881],{"class":1400},[1386,3312,1789],{"class":1396},[1386,3314,1792],{"class":1392},[1386,3316,1888],{"class":1400},[1386,3318,1474],{"class":1396},[1386,3320,1893],{"class":1439},[1386,3322,1442],{"class":1448},[1386,3324,1898],{"class":1400},[1386,3326,1474],{"class":1396},[1386,3328,1854],{"class":1400},[1386,3330,1465],{"class":1448},[1386,3332,3333,3335,3337,3339,3341,3343,3345,3347,3349,3351,3353,3355,3357,3359,3361,3363],{"class":1388,"line":1876},[1386,3334,2301],{"class":1400},[1386,3336,1474],{"class":1396},[1386,3338,1477],{"class":1439},[1386,3340,1442],{"class":1448},[1386,3342,1445],{"class":1396},[1386,3344,1888],{"class":1448},[1386,3346,1452],{"class":1396},[1386,3348,1397],{"class":1396},[1386,3350,1926],{"class":1448},[1386,3352,1452],{"class":1396},[1386,3354,1881],{"class":1400},[1386,3356,1474],{"class":1396},[1386,3358,1935],{"class":1400},[1386,3360,1404],{"class":1396},[1386,3362,1404],{"class":1396},[1386,3364,1465],{"class":1448},[1386,3366,3367],{"class":1388,"line":1907},[1386,3368,1423],{"emptyLinePlaceholder":1422},[1386,3370,3371,3373,3375,3377,3379,3381,3383,3385],{"class":1388,"line":1951},[1386,3372,1959],{"class":1392},[1386,3374,1962],{"class":1448},[1386,3376,1965],{"class":1396},[1386,3378,1893],{"class":1400},[1386,3380,1474],{"class":1396},[1386,3382,1972],{"class":1400},[1386,3384,1975],{"class":1448},[1386,3386,1978],{"class":1396},[1386,3388,3389,3391,3393,3395],{"class":1388,"line":1956},[1386,3390,1984],{"class":1392},[1386,3392,3145],{"class":1439},[1386,3394,1442],{"class":1448},[1386,3396,1978],{"class":1396},[1386,3398,3399,3402,3404,3406,3409,3411],{"class":1388,"line":1981},[1386,3400,3401],{"class":1448},"      message",[1386,3403,1452],{"class":1396},[1386,3405,1410],{"class":1396},[1386,3407,3408],{"class":1413},"Payment failed",[1386,3410,1460],{"class":1396},[1386,3412,2195],{"class":1396},[1386,3414,3415,3418,3420,3423],{"class":1388,"line":2016},[1386,3416,3417],{"class":1448},"      status",[1386,3419,1452],{"class":1396},[1386,3421,3422],{"class":1489}," 402",[1386,3424,2195],{"class":1396},[1386,3426,3427,3430,3432,3434,3436,3438],{"class":1388,"line":2022},[1386,3428,3429],{"class":1448},"      why",[1386,3431,1452],{"class":1396},[1386,3433,1881],{"class":1400},[1386,3435,1474],{"class":1396},[1386,3437,2008],{"class":1400},[1386,3439,2195],{"class":1396},[1386,3441,3442,3445,3447,3449,3452,3454],{"class":1388,"line":2036},[1386,3443,3444],{"class":1448},"      fix",[1386,3446,1452],{"class":1396},[1386,3448,1410],{"class":1396},[1386,3450,3451],{"class":1413},"Try a different payment method",[1386,3453,1460],{"class":1396},[1386,3455,2195],{"class":1396},[1386,3457,3458,3461],{"class":1388,"line":2063},[1386,3459,3460],{"class":1396},"    }",[1386,3462,1465],{"class":1448},[1386,3464,3465],{"class":1388,"line":2072},[1386,3466,2019],{"class":1396},[1386,3468,3469,3471,3473,3475],{"class":1388,"line":2500},[1386,3470,2025],{"class":1396},[1386,3472,2028],{"class":1392},[1386,3474,2031],{"class":1400},[1386,3476,1978],{"class":1396},[1386,3478,3479,3481,3483,3485,3487,3490,3492,3495],{"class":1388,"line":2531},[1386,3480,2301],{"class":1400},[1386,3482,1474],{"class":1396},[1386,3484,1566],{"class":1439},[1386,3486,1442],{"class":1448},[1386,3488,3489],{"class":1400},"err",[1386,3491,2091],{"class":1392},[1386,3493,1990],{"class":3494},"sBMFI",[1386,3496,1465],{"class":1448},[1386,3498,3499,3501],{"class":1388,"line":2538},[1386,3500,2066],{"class":1392},[1386,3502,2069],{"class":1400},[1386,3504,3506,3508,3511],{"class":1388,"line":3505},25,[1386,3507,2025],{"class":1396},[1386,3509,3510],{"class":1392}," finally",[1386,3512,1777],{"class":1396},[1386,3514,3516,3518,3520,3522],{"class":1388,"line":3515},26,[1386,3517,2301],{"class":1400},[1386,3519,1474],{"class":1396},[1386,3521,1504],{"class":1439},[1386,3523,1507],{"class":1448},[1386,3525,3527],{"class":1388,"line":3526},27,[1386,3528,2075],{"class":1396},[461,3530,3531],{},"Three things changed in every migration:",[483,3533,3534,3547,3567],{},[486,3535,3536,3539,3540,3542,3543,3546],{},[465,3537,3538],{},"N log lines → 1 wide event."," The 3-4 calls per request become ",[493,3541,1620],{}," accumulations and one ",[493,3544,3545],{},"log.emit"," at the end. Your dashboard gets one queryable row instead of stitching by request id.",[486,3548,3549,3559,3560,3562,3563,3566],{},[465,3550,3551,3552,3555,3556,1474],{},"Errors carry ",[493,3553,3554],{},"why"," and ",[493,3557,3558],{},"fix"," Throwing ",[493,3561,1613],{}," instead of ",[493,3564,3565],{},"new Error"," means your client (and on-call) get actionable context, not just a stack.",[486,3568,3569,3572,3573,3575,3576,3578],{},[465,3570,3571],{},"Setup is one line."," No formatter wiring, no transport assembly, no ",[493,3574,498],{}," peer dep. ",[493,3577,1546],{}," once at boot and you're done.",[478,3580,3582],{"id":3581},"reverse-direction-when-not-to-pick-evlog","Reverse direction: when not to pick evlog",[461,3584,3585],{},"Be honest with yourself. Don't switch if:",[483,3587,3588,3599,3606],{},[486,3589,3590,3591,468,3593,468,3595,3598],{},"You ship a library that's already part of the pino ecosystem (",[493,3592,501],{},[493,3594,498],{},[493,3596,3597],{},"pino-multi-stream"," plugins) and would lose tooling.",[486,3600,3601,3602,3605],{},"You have a custom pino transport (e.g. a worker-thread Datadog forwarder you wrote in 2021) you don't want to re-implement as an evlog drain. Most of the ",[510,3603,3604],{"href":358},"built-in adapters"," cover the common destinations, but custom protocols mean a port.",[486,3607,3608],{},"You log only inside CLIs and use consola purely for the pretty terminal output. evlog's pretty output is good but not consola-grade for spinners, prompts, and box renders. Use both: evlog for events that go to a drain, consola for prompts \u002F TUIs.",[478,3610,3612],{"id":3611},"next-steps","Next Steps",[483,3614,3615,3623,3628,3634],{},[486,3616,3617,3619,3620,3622],{},[510,3618,46],{"href":47}," — the ",[493,3621,1365],{}," API, migration tabs, and patterns",[486,3624,3625,3627],{},[510,3626,51],{"href":52}," — what unlocks when you accumulate context per operation",[486,3629,3630,3633],{},[510,3631,3632],{"href":189},"Performance Benchmarks"," — the methodology behind the numbers above",[486,3635,3636,3639],{},[510,3637,3638],{"href":272},"Standalone TypeScript"," — scripts, workers, and libraries without a web framework",[3641,3642,3643],"style",{},"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 .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}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 .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 .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}",{"title":1382,"searchDepth":1419,"depth":1419,"links":3645},[3646,3647,3652,3662,3663,3664],{"id":480,"depth":1419,"text":481},{"id":536,"depth":1419,"text":537,"children":3648},[3649,3650,3651],{"id":557,"depth":1426,"text":558},{"id":838,"depth":1426,"text":839},{"id":1125,"depth":1426,"text":1126},{"id":1354,"depth":1419,"text":1355,"children":3653},[3654,3656,3658,3659,3661],{"id":1361,"depth":1426,"text":3655},"No persistent-bindings shorthand on log.*",{"id":1521,"depth":1426,"text":3657},"minLevel is set once at startup",{"id":1550,"depth":1426,"text":1551},{"id":1586,"depth":1426,"text":3660},"No multi-stream \u002F transport array on log.*",{"id":1603,"depth":1426,"text":1604},{"id":1623,"depth":1419,"text":1624},{"id":3581,"depth":1419,"text":3582},{"id":3611,"depth":1419,"text":3612},"Side-by-side comparison of evlog with pino, winston, and consola. Feature parity matrix, honest gaps, and migration snippets so you can switch with no surprises.","md",[3668,3671],{"label":3632,"icon":126,"to":189,"color":3669,"variant":3670},"neutral","subtle",{"label":46,"icon":49,"to":47,"color":3669,"variant":3670},{},{"title":30,"icon":33},{"title":456,"description":3665},"GAaHYaP5N6jSq886Fjp5xhUed9i6rswet1Rjt6n1T04",[3677,3679],{"title":25,"path":26,"stem":27,"description":3678,"icon":28,"children":-1},"AI-assisted code review and evlog adoption using Agent Skills. Let AI review your logging patterns and guide migration to wide events.",{"title":41,"path":42,"stem":43,"description":3680,"icon":44,"children":-1},"evlog gives you three ways to log. Simple one-liners, wide events that accumulate context, and auto-managed request logging. Choose the right one for your use case.",1778340937837]