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