[{"data":1,"prerenderedAt":4746},["ShallowReactive",2],{"navigation_docs":3,"-learn-wide-events":528,"-learn-wide-events-surround":4741},[4,29,76,122,304,435,496],{"title":5,"path":6,"stem":7,"children":8,"page":28},"Start","\u002Fstart","1.start",[9,13,18,23],{"title":10,"path":11,"stem":12},"Introduction","\u002Fstart\u002Fintroduction","1.start\u002F1.introduction",{"title":14,"path":15,"stem":16,"icon":17},"Why start with evlog","\u002Fstart\u002Fwhy-evlog","1.start\u002F2.why-evlog","i-lucide-rocket",{"title":19,"path":20,"stem":21,"icon":22},"Installation","\u002Fstart\u002Finstallation","1.start\u002F3.installation","i-lucide-download",{"title":24,"path":25,"stem":26,"icon":27},"Quick Start","\u002Fstart\u002Fquick-start","1.start\u002F4.quick-start","i-lucide-zap",false,{"title":30,"path":31,"stem":32,"children":33,"page":28},"Learn","\u002Flearn","2.learn",[34,38,43,48,53,58,62,67,72],{"title":35,"path":36,"stem":37},"Learn evlog","\u002Flearn\u002Foverview","2.learn\u002F0.overview",{"title":39,"path":40,"stem":41,"icon":42},"Simple Logging","\u002Flearn\u002Fsimple-logging","2.learn\u002F1.simple-logging","i-lucide-terminal",{"title":44,"path":45,"stem":46,"icon":47},"Wide Events","\u002Flearn\u002Fwide-events","2.learn\u002F2.wide-events","i-lucide-layers",{"title":49,"path":50,"stem":51,"icon":52},"Structured Errors","\u002Flearn\u002Fstructured-errors","2.learn\u002F3.structured-errors","i-lucide-shield-alert",{"title":54,"path":55,"stem":56,"icon":57},"Lifecycle","\u002Flearn\u002Flifecycle","2.learn\u002F4.lifecycle","i-lucide-arrow-right-left",{"title":59,"path":60,"stem":61},"Sampling","\u002Flearn\u002Fsampling","2.learn\u002F5.sampling",{"title":63,"path":64,"stem":65,"icon":66},"Auto-Redaction","\u002Flearn\u002Fredaction","2.learn\u002F6.redaction","i-lucide-eye-off",{"title":68,"path":69,"stem":70,"icon":71},"Typed Fields","\u002Flearn\u002Ftyped-fields","2.learn\u002F7.typed-fields","i-simple-icons-typescript",{"title":73,"path":74,"stem":75},"Catalogs","\u002Flearn\u002Fcatalogs","2.learn\u002F8.catalogs",{"title":77,"path":78,"stem":79,"children":80,"page":28},"CLI","\u002Fcli","3.cli",[81,85,90,95,99,103,108,113,118],{"title":82,"path":83,"stem":84},"evlog CLI","\u002Fcli\u002Foverview","3.cli\u002F0.overview",{"title":86,"path":87,"stem":88,"icon":89},"init","\u002Fcli\u002Finit","3.cli\u002F1.init","i-lucide-wand-sparkles",{"title":91,"path":92,"stem":93,"icon":94},"map","\u002Fcli\u002Fmap","3.cli\u002F2.map","i-lucide-radar",{"title":96,"path":97,"stem":98},"Map rules","\u002Fcli\u002Frules","3.cli\u002F3.rules",{"title":100,"path":101,"stem":102},"Map scoring","\u002Fcli\u002Fscoring","3.cli\u002F4.scoring",{"title":104,"path":105,"stem":106,"icon":107},"CI","\u002Fcli\u002Fci","3.cli\u002F5.ci","i-lucide-git-pull-request",{"title":109,"path":110,"stem":111,"icon":112},"doctor","\u002Fcli\u002Fdoctor","3.cli\u002F6.doctor","i-lucide-stethoscope",{"title":114,"path":115,"stem":116,"icon":117},"telemetry","\u002Fcli\u002Ftelemetry","3.cli\u002F7.telemetry","i-lucide-bar-chart-3",{"title":119,"path":120,"stem":121},"evlog agents","\u002Fcli\u002Fagents","3.cli\u002F8.agents",{"title":123,"path":124,"stem":125,"children":126,"page":28},"Integrate","\u002Fintegrate","4.integrate",[127,132,216],{"title":128,"path":129,"stem":130,"icon":131},"Overview","\u002Fintegrate\u002Foverview","4.integrate\u002F0.overview","i-lucide-plug",{"title":133,"path":134,"stem":135,"children":136,"page":28},"Adapters","\u002Fintegrate\u002Fadapters","4.integrate\u002Fadapters",[137,141,171,196],{"title":128,"path":138,"stem":139,"icon":140},"\u002Fintegrate\u002Fadapters\u002Foverview","4.integrate\u002Fadapters\u002F01.overview","i-lucide-list",{"title":142,"path":143,"stem":144,"children":145,"page":28},"Cloud","\u002Fintegrate\u002Fadapters\u002Fcloud","4.integrate\u002Fadapters\u002Fcloud",[146,151,156,161,166],{"title":147,"path":148,"stem":149,"icon":150},"Axiom","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Faxiom","4.integrate\u002Fadapters\u002Fcloud\u002F01.axiom","i-custom-axiom",{"title":152,"path":153,"stem":154,"icon":155},"PostHog","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fposthog","4.integrate\u002Fadapters\u002Fcloud\u002F02.posthog","i-simple-icons-posthog",{"title":157,"path":158,"stem":159,"icon":160},"Sentry","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fsentry","4.integrate\u002Fadapters\u002Fcloud\u002F03.sentry","i-simple-icons-sentry",{"title":162,"path":163,"stem":164,"icon":165},"Better Stack","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fbetter-stack","4.integrate\u002Fadapters\u002Fcloud\u002F04.better-stack","i-simple-icons-betterstack",{"title":167,"path":168,"stem":169,"icon":170},"Datadog","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fdatadog","4.integrate\u002Fadapters\u002Fcloud\u002F05.datadog","i-simple-icons-datadog",{"title":172,"path":173,"stem":174,"children":175,"page":28},"Cloud or Self-Hosted","\u002Fintegrate\u002Fadapters\u002Fhybrid","4.integrate\u002Fadapters\u002Fhybrid",[176,181,186,191],{"title":177,"path":178,"stem":179,"icon":180},"Grafana Loki","\u002Fintegrate\u002Fadapters\u002Fhybrid\u002Floki","4.integrate\u002Fadapters\u002Fhybrid\u002F01.loki","i-simple-icons-grafana",{"title":182,"path":183,"stem":184,"icon":185},"ClickHouse","\u002Fintegrate\u002Fadapters\u002Fhybrid\u002Fclickhouse","4.integrate\u002Fadapters\u002Fhybrid\u002F02.clickhouse","i-simple-icons-clickhouse",{"title":187,"path":188,"stem":189,"icon":190},"OTLP","\u002Fintegrate\u002Fadapters\u002Fhybrid\u002Fotlp","4.integrate\u002Fadapters\u002Fhybrid\u002F03.otlp","i-simple-icons-opentelemetry",{"title":192,"path":193,"stem":194,"icon":195},"HyperDX","\u002Fintegrate\u002Fadapters\u002Fhybrid\u002Fhyperdx","4.integrate\u002Fadapters\u002Fhybrid\u002F04.hyperdx","i-custom-hyperdx",{"title":197,"path":198,"stem":199,"children":200,"page":28},"Self-Hosted","\u002Fintegrate\u002Fadapters\u002Fself-hosted","4.integrate\u002Fadapters\u002Fself-hosted",[201,206,211],{"title":202,"path":203,"stem":204,"icon":205},"File System","\u002Fintegrate\u002Fadapters\u002Fself-hosted\u002Ffs","4.integrate\u002Fadapters\u002Fself-hosted\u002F01.fs","i-lucide-hard-drive",{"title":207,"path":208,"stem":209,"icon":210},"NuxtHub","\u002Fintegrate\u002Fadapters\u002Fself-hosted\u002Fnuxthub","4.integrate\u002Fadapters\u002Fself-hosted\u002F02.nuxthub","i-simple-icons-nuxt",{"title":212,"path":213,"stem":214,"icon":215},"Memory","\u002Fintegrate\u002Fadapters\u002Fself-hosted\u002Fmemory","4.integrate\u002Fadapters\u002Fself-hosted\u002F03.memory","i-lucide-cpu",{"title":217,"path":218,"stem":219,"children":220,"page":28},"Frameworks","\u002Fintegrate\u002Fframeworks","4.integrate\u002Fframeworks",[221,225,230,235,240,245,250,255,260,265,270,275,280,285,289,294,299],{"title":128,"path":222,"stem":223,"icon":224},"\u002Fintegrate\u002Fframeworks\u002Foverview","4.integrate\u002Fframeworks\u002F00.overview","i-lucide-layout-grid",{"title":226,"path":227,"stem":228,"icon":229},"Nuxt","\u002Fintegrate\u002Fframeworks\u002Fnuxt","4.integrate\u002Fframeworks\u002F01.nuxt","i-simple-icons-nuxtdotjs",{"title":231,"path":232,"stem":233,"icon":234},"Next.js","\u002Fintegrate\u002Fframeworks\u002Fnextjs","4.integrate\u002Fframeworks\u002F02.nextjs","i-simple-icons-nextdotjs",{"title":236,"path":237,"stem":238,"icon":239},"SvelteKit","\u002Fintegrate\u002Fframeworks\u002Fsveltekit","4.integrate\u002Fframeworks\u002F03.sveltekit","i-simple-icons-svelte",{"title":241,"path":242,"stem":243,"icon":244},"Nitro","\u002Fintegrate\u002Fframeworks\u002Fnitro","4.integrate\u002Fframeworks\u002F04.nitro","i-custom-nitro",{"title":246,"path":247,"stem":248,"icon":249},"TanStack Start","\u002Fintegrate\u002Fframeworks\u002Ftanstack-start","4.integrate\u002Fframeworks\u002F05.tanstack-start","i-custom-tanstack",{"title":251,"path":252,"stem":253,"icon":254},"NestJS","\u002Fintegrate\u002Fframeworks\u002Fnestjs","4.integrate\u002Fframeworks\u002F06.nestjs","i-simple-icons-nestjs",{"title":256,"path":257,"stem":258,"icon":259},"Express","\u002Fintegrate\u002Fframeworks\u002Fexpress","4.integrate\u002Fframeworks\u002F07.express","i-simple-icons-express",{"title":261,"path":262,"stem":263,"icon":264},"Hono","\u002Fintegrate\u002Fframeworks\u002Fhono","4.integrate\u002Fframeworks\u002F08.hono","i-simple-icons-hono",{"title":266,"path":267,"stem":268,"icon":269},"Fastify","\u002Fintegrate\u002Fframeworks\u002Ffastify","4.integrate\u002Fframeworks\u002F09.fastify","i-simple-icons-fastify",{"title":271,"path":272,"stem":273,"icon":274},"Elysia","\u002Fintegrate\u002Fframeworks\u002Felysia","4.integrate\u002Fframeworks\u002F10.elysia","i-custom-elysia",{"title":276,"path":277,"stem":278,"icon":279},"React Router","\u002Fintegrate\u002Fframeworks\u002Freact-router","4.integrate\u002Fframeworks\u002F11.react-router","i-custom-reactrouter",{"title":281,"path":282,"stem":283,"icon":284},"Cloudflare Workers","\u002Fintegrate\u002Fframeworks\u002Fcloudflare-workers","4.integrate\u002Fframeworks\u002F12.cloudflare-workers","i-simple-icons-cloudflare",{"title":286,"path":287,"stem":288,"icon":71},"Standalone","\u002Fintegrate\u002Fframeworks\u002Fstandalone","4.integrate\u002Fframeworks\u002F13.standalone",{"title":290,"path":291,"stem":292,"icon":293},"Astro","\u002Fintegrate\u002Fframeworks\u002Fastro","4.integrate\u002Fframeworks\u002F14.astro","i-simple-icons-astro",{"title":295,"path":296,"stem":297,"icon":298},"oRPC","\u002Fintegrate\u002Fframeworks\u002Forpc","4.integrate\u002Fframeworks\u002F15.orpc","i-lucide-network",{"title":300,"path":301,"stem":302,"icon":303},"AWS Lambda","\u002Fintegrate\u002Fframeworks\u002Faws-lambda","4.integrate\u002Fframeworks\u002F16.aws-lambda","i-custom-lambda",{"title":305,"path":306,"stem":307,"children":308,"page":28},"Use Cases","\u002Fuse-cases","5.use-cases",[309,312,317,346,374,407,427,431],{"title":305,"path":310,"stem":311},"\u002Fuse-cases\u002Foverview","5.use-cases\u002F0.overview",{"title":313,"path":314,"stem":315,"icon":316},"Client Logging","\u002Fuse-cases\u002Fclient-logging","5.use-cases\u002F1.client-logging","i-lucide-monitor",{"title":318,"icon":319,"path":320,"stem":321,"children":322,"page":28},"AI SDK","i-simple-icons-vercel","\u002Fuse-cases\u002Fai-sdk","5.use-cases\u002F2.ai-sdk",[323,326,331,336,341],{"title":128,"path":324,"stem":325,"icon":140},"\u002Fuse-cases\u002Fai-sdk\u002Foverview","5.use-cases\u002F2.ai-sdk\u002F01.overview",{"title":327,"path":328,"stem":329,"icon":330},"Usage","\u002Fuse-cases\u002Fai-sdk\u002Fusage","5.use-cases\u002F2.ai-sdk\u002F02.usage","i-lucide-code",{"title":332,"path":333,"stem":334,"icon":335},"Options","\u002Fuse-cases\u002Fai-sdk\u002Foptions","5.use-cases\u002F2.ai-sdk\u002F03.options","i-lucide-sliders",{"title":337,"path":338,"stem":339,"icon":340},"Metadata","\u002Fuse-cases\u002Fai-sdk\u002Fmetadata","5.use-cases\u002F2.ai-sdk\u002F04.metadata","i-lucide-database",{"title":342,"path":343,"stem":344,"icon":345},"Telemetry","\u002Fuse-cases\u002Fai-sdk\u002Ftelemetry","5.use-cases\u002F2.ai-sdk\u002F05.telemetry","i-lucide-activity",{"title":347,"icon":348,"path":349,"stem":350,"children":351,"page":28},"Better Auth","i-simple-icons-betterauth","\u002Fuse-cases\u002Fbetter-auth","5.use-cases\u002F3.better-auth",[352,355,360,365,369],{"title":128,"path":353,"stem":354,"icon":140},"\u002Fuse-cases\u002Fbetter-auth\u002Foverview","5.use-cases\u002F3.better-auth\u002F01.overview",{"title":356,"path":357,"stem":358,"icon":359},"Identify User","\u002Fuse-cases\u002Fbetter-auth\u002Fidentify-user","5.use-cases\u002F3.better-auth\u002F02.identify-user","i-lucide-user-check",{"title":361,"path":362,"stem":363,"icon":364},"Middleware","\u002Fuse-cases\u002Fbetter-auth\u002Fmiddleware","5.use-cases\u002F3.better-auth\u002F03.middleware","i-lucide-shield",{"title":366,"path":367,"stem":368,"icon":316},"Client Sync","\u002Fuse-cases\u002Fbetter-auth\u002Fclient-sync","5.use-cases\u002F3.better-auth\u002F04.client-sync",{"title":370,"path":371,"stem":372,"icon":373},"Performance","\u002Fuse-cases\u002Fbetter-auth\u002Fperformance","5.use-cases\u002F3.better-auth\u002F05.performance","i-lucide-gauge",{"title":375,"icon":376,"path":377,"stem":378,"children":379,"page":28},"Audit Logs","i-lucide-shield-check","\u002Fuse-cases\u002Faudit","5.use-cases\u002F4.audit",[380,383,388,393,398,402],{"title":128,"path":381,"stem":382,"icon":140},"\u002Fuse-cases\u002Faudit\u002Foverview","5.use-cases\u002F4.audit\u002F01.overview",{"title":384,"path":385,"stem":386,"icon":387},"Schema","\u002Fuse-cases\u002Faudit\u002Fschema","5.use-cases\u002F4.audit\u002F02.schema","i-lucide-file-text",{"title":389,"path":390,"stem":391,"icon":392},"Recording","\u002Fuse-cases\u002Faudit\u002Frecording","5.use-cases\u002F4.audit\u002F03.recording","i-lucide-pen-line",{"title":394,"path":395,"stem":396,"icon":397},"Drains","\u002Fuse-cases\u002Faudit\u002Fpipeline","5.use-cases\u002F4.audit\u002F04.pipeline","i-lucide-link",{"title":399,"path":400,"stem":401,"icon":376},"Compliance","\u002Fuse-cases\u002Faudit\u002Fcompliance","5.use-cases\u002F4.audit\u002F05.compliance",{"title":403,"path":404,"stem":405,"icon":406},"Recipes","\u002Fuse-cases\u002Faudit\u002Frecipes","5.use-cases\u002F4.audit\u002F06.recipes","i-lucide-book-open",{"title":342,"icon":373,"path":408,"stem":409,"children":410,"page":28},"\u002Fuse-cases\u002Ftelemetry","5.use-cases\u002F4.telemetry",[411,414,419,423],{"title":128,"path":412,"stem":413,"icon":140},"\u002Fuse-cases\u002Ftelemetry\u002Foverview","5.use-cases\u002F4.telemetry\u002F01.overview",{"title":415,"path":416,"stem":417,"icon":418},"Setup","\u002Fuse-cases\u002Ftelemetry\u002Fsetup","5.use-cases\u002F4.telemetry\u002F02.setup","i-lucide-wrench",{"title":420,"path":421,"stem":422},"Telemetry Ingest","\u002Fuse-cases\u002Ftelemetry\u002Fingest","5.use-cases\u002F4.telemetry\u002F03.ingest",{"title":424,"path":425,"stem":426,"icon":406},"Reference","\u002Fuse-cases\u002Ftelemetry\u002Freference","5.use-cases\u002F4.telemetry\u002F04.reference",{"title":428,"path":429,"stem":430},"Enrichers","\u002Fuse-cases\u002Fenrichers","5.use-cases\u002F5.enrichers",{"title":432,"path":433,"stem":434},"eve","\u002Fuse-cases\u002Feve","5.use-cases\u002F5.eve",{"title":436,"path":437,"stem":438,"children":439,"page":28},"Extend","\u002Fextend","6.extend",[440,444,449,454,458,463,467,471,476,481,486,491],{"title":128,"path":441,"stem":442,"icon":443},"\u002Fextend\u002Foverview","6.extend\u002F0.overview","i-lucide-blocks",{"title":445,"path":446,"stem":447,"icon":448},"Stream","\u002Fextend\u002Fstream","6.extend\u002F1.stream","i-lucide-radio-tower",{"title":450,"path":451,"stem":452,"icon":453},"Custom framework","\u002Fextend\u002Fcustom-framework","6.extend\u002F10.custom-framework","i-lucide-puzzle",{"title":455,"path":456,"stem":457,"icon":448},"Diagnostics channel","\u002Fextend\u002Fdiagnostics-channel","6.extend\u002F11.diagnostics-channel",{"title":459,"path":460,"stem":461,"icon":462},"FS reader","\u002Fextend\u002Ffs-reader","6.extend\u002F2.fs-reader","i-lucide-folder-search",{"title":403,"path":464,"stem":465,"icon":466},"\u002Fextend\u002Fconsumer-recipes","6.extend\u002F3.consumer-recipes","i-lucide-chef-hat",{"title":468,"path":469,"stem":470},"Plugins","\u002Fextend\u002Fplugins","6.extend\u002F4.plugins",{"title":472,"path":473,"stem":474,"icon":475},"Custom enrichers","\u002Fextend\u002Fcustom-enrichers","6.extend\u002F5.custom-enrichers","i-lucide-sparkles",{"title":477,"path":478,"stem":479,"icon":480},"Tail sampling","\u002Fextend\u002Ftail-sampling","6.extend\u002F6.tail-sampling","i-lucide-filter",{"title":482,"path":483,"stem":484,"icon":485},"Identity headers","\u002Fextend\u002Fidentity-headers","6.extend\u002F7.identity-headers","i-lucide-fingerprint",{"title":487,"path":488,"stem":489,"icon":490},"Custom drains","\u002Fextend\u002Fcustom-drains","6.extend\u002F8.custom-drains","i-lucide-share-2",{"title":492,"path":493,"stem":494,"icon":495},"Drain pipeline","\u002Fextend\u002Fdrain-pipeline","6.extend\u002F9.drain-pipeline","i-lucide-workflow",{"title":424,"path":497,"stem":498,"children":499,"page":28},"\u002Freference","7.reference",[500,504,507,512,516,520,524],{"title":501,"path":502,"stem":503},"Configuration","\u002Freference\u002Fconfiguration","7.reference\u002F1.configuration",{"title":370,"path":505,"stem":506,"icon":373},"\u002Freference\u002Fperformance","7.reference\u002F2.performance",{"title":508,"path":509,"stem":510,"icon":511},"Vite Plugin","\u002Freference\u002Fvite-plugin","7.reference\u002F3.vite-plugin","i-custom-vite",{"title":513,"path":514,"stem":515,"icon":376},"Best Practices","\u002Freference\u002Fbest-practices","7.reference\u002F4.best-practices",{"title":517,"path":518,"stem":519},"evlog vs pino, winston, consola","\u002Freference\u002Fvs-other-loggers","7.reference\u002F5.vs-other-loggers",{"title":521,"path":522,"stem":523,"icon":475},"Agent Skills","\u002Freference\u002Fagent-skills","7.reference\u002F6.agent-skills",{"title":525,"path":526,"stem":527},"Log cost","\u002Freference\u002Fcost","7.reference\u002F7.cost",{"id":529,"title":44,"body":530,"description":4731,"extension":4732,"links":4733,"meta":4737,"navigation":4738,"path":45,"seo":4739,"stem":46,"__hash__":4740},"docs\u002F2.learn\u002F2.wide-events.md",{"type":531,"value":532,"toc":4702},"minimark",[533,537,551,597,602,605,608,810,813,840,843,1342,1345,1349,1357,1364,1695,1702,1722,1931,1944,1951,1958,2154,2162,2166,2214,2233,2239,2264,2289,2296,2312,2319,2477,2481,2494,2498,2501,2699,2709,2713,2716,2804,2808,2811,2978,2982,2985,3161,3164,3168,3264,3268,3427,3431,3438,3835,3839,3842,4237,4241,4265,4350,4371,4375,4378,4672,4676,4698],[534,535,536],"p",{},"Wide events are the core concept behind evlog. Instead of scattering logs throughout your codebase, you accumulate context over any unit of work, whether a request, script, job, or workflow, and emit a single, comprehensive log event.",[538,539,542,543,547,548,550],"callout",{"color":540,"icon":541},"neutral","i-lucide-globe","Not running an HTTP framework? See ",[544,545,546],"a",{"href":287},"Standalone TypeScript"," and ",[544,549,281],{"href":282},", because wide events apply just as cleanly outside of request lifecycles.",[552,553,556,559,584],"prompt",{":actions":554,"description":555,"icon":47},"[\"copy\",\"cursor\",\"claude\"]","Convert my request handlers to wide events",[534,557,558],{},"Convert my existing request handlers from scattered logs to evlog wide events.",[560,561,562,566,569,572,575,578,581],"ul",{},[563,564,565],"li",{},"Find handlers that call console.log\u002Flogger.info multiple times per request",[563,567,568],{},"Replace those with a single useLogger(event) (or framework equivalent) at the top",[563,570,571],{},"Use log.set({ user, cart, payment, ... }) to accumulate context as the request progresses",[563,573,574],{},"Group related fields into nested objects (user, cart, payment) instead of flat keys",[563,576,577],{},"Remove redundant info-level logs once the wide event captures the same information",[563,579,580],{},"Keep error logs that capture distinct failure cases via log.error()",[563,582,583],{},"Trust the framework integration to auto-emit one wide event per request",[534,585,586,587,592,593],{},"Docs: ",[544,588,589],{"href":589,"rel":590},"https:\u002F\u002Fwww.evlog.dev\u002Flearn\u002Fwide-events",[591],"nofollow","\nBest practices: ",[544,594,595],{"href":595,"rel":596},"https:\u002F\u002Fwww.evlog.dev\u002Freference\u002Fbest-practices",[591],[598,599,601],"h2",{"id":600},"why-wide-events","Why Wide Events?",[603,604],"wide-event-collapse",{},[534,606,607],{},"Traditional logging creates noise:",[609,610,616],"pre",{"className":611,"code":612,"filename":613,"language":614,"meta":615,"style":615},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","logger.info('Job started')\nlogger.info('User authenticated', { userId: user.id })\nlogger.info('Fetching data', { source: 'postgres' })\nlogger.info('Processing records')\nlogger.info('Processing complete')\nlogger.info('Job finished', { duration: 234 })\n","src\u002Fservice.ts","typescript","",[617,618,619,651,695,735,755,775],"code",{"__ignoreMap":615},[620,621,624,628,632,636,639,642,646,648],"span",{"class":622,"line":623},"line",1,[620,625,627],{"class":626},"sTEyZ","logger",[620,629,631],{"class":630},"sMK4o",".",[620,633,635],{"class":634},"s2Zo4","info",[620,637,638],{"class":626},"(",[620,640,641],{"class":630},"'",[620,643,645],{"class":644},"sfazB","Job started",[620,647,641],{"class":630},[620,649,650],{"class":626},")\n",[620,652,654,656,658,660,662,664,667,669,672,675,679,682,685,687,690,693],{"class":622,"line":653},2,[620,655,627],{"class":626},[620,657,631],{"class":630},[620,659,635],{"class":634},[620,661,638],{"class":626},[620,663,641],{"class":630},[620,665,666],{"class":644},"User authenticated",[620,668,641],{"class":630},[620,670,671],{"class":630},",",[620,673,674],{"class":630}," {",[620,676,678],{"class":677},"swJcz"," userId",[620,680,681],{"class":630},":",[620,683,684],{"class":626}," user",[620,686,631],{"class":630},[620,688,689],{"class":626},"id ",[620,691,692],{"class":630},"}",[620,694,650],{"class":626},[620,696,698,700,702,704,706,708,711,713,715,717,720,722,725,728,730,733],{"class":622,"line":697},3,[620,699,627],{"class":626},[620,701,631],{"class":630},[620,703,635],{"class":634},[620,705,638],{"class":626},[620,707,641],{"class":630},[620,709,710],{"class":644},"Fetching data",[620,712,641],{"class":630},[620,714,671],{"class":630},[620,716,674],{"class":630},[620,718,719],{"class":677}," source",[620,721,681],{"class":630},[620,723,724],{"class":630}," '",[620,726,727],{"class":644},"postgres",[620,729,641],{"class":630},[620,731,732],{"class":630}," }",[620,734,650],{"class":626},[620,736,738,740,742,744,746,748,751,753],{"class":622,"line":737},4,[620,739,627],{"class":626},[620,741,631],{"class":630},[620,743,635],{"class":634},[620,745,638],{"class":626},[620,747,641],{"class":630},[620,749,750],{"class":644},"Processing records",[620,752,641],{"class":630},[620,754,650],{"class":626},[620,756,758,760,762,764,766,768,771,773],{"class":622,"line":757},5,[620,759,627],{"class":626},[620,761,631],{"class":630},[620,763,635],{"class":634},[620,765,638],{"class":626},[620,767,641],{"class":630},[620,769,770],{"class":644},"Processing complete",[620,772,641],{"class":630},[620,774,650],{"class":626},[620,776,778,780,782,784,786,788,791,793,795,797,800,802,806,808],{"class":622,"line":777},6,[620,779,627],{"class":626},[620,781,631],{"class":630},[620,783,635],{"class":634},[620,785,638],{"class":626},[620,787,641],{"class":630},[620,789,790],{"class":644},"Job finished",[620,792,641],{"class":630},[620,794,671],{"class":630},[620,796,674],{"class":630},[620,798,799],{"class":677}," duration",[620,801,681],{"class":630},[620,803,805],{"class":804},"sbssI"," 234",[620,807,732],{"class":630},[620,809,650],{"class":626},[534,811,812],{},"This approach has problems:",[560,814,815,822,828,834],{},[563,816,817,821],{},[818,819,820],"strong",{},"Scattered context",": Information is spread across multiple log lines",[563,823,824,827],{},[818,825,826],{},"Hard to correlate",": Matching logs to operations requires IDs everywhere",[563,829,830,833],{},[818,831,832],{},"Noise",": 10+ log lines per operation makes finding issues harder",[563,835,836,839],{},[818,837,838],{},"Incomplete",": Some logs might be missing if errors occur",[534,841,842],{},"Wide events solve this:",[844,845,846,1056,1227],"code-group",{},[609,847,850],{"className":611,"code":848,"filename":849,"language":614,"meta":615,"style":615},"import { useLogger } from 'evlog'\n\nconst log = useLogger(event)\n\nlog.set({ user: { id: 1, plan: 'pro' } })\nlog.set({ cart: { id: 42, items: 3, total: 9999 } })\nlog.set({ payment: { method: 'card', status: 'success' } })\n","server\u002Fapi\u002Fcheckout.post.ts",[617,851,852,876,882,899,903,952,1004],{"__ignoreMap":615},[620,853,854,858,860,863,865,868,870,873],{"class":622,"line":623},[620,855,857],{"class":856},"s7zQu","import",[620,859,674],{"class":630},[620,861,862],{"class":626}," useLogger",[620,864,732],{"class":630},[620,866,867],{"class":856}," from",[620,869,724],{"class":630},[620,871,872],{"class":644},"evlog",[620,874,875],{"class":630},"'\n",[620,877,878],{"class":622,"line":653},[620,879,881],{"emptyLinePlaceholder":880},true,"\n",[620,883,884,888,891,894,896],{"class":622,"line":697},[620,885,887],{"class":886},"spNyl","const",[620,889,890],{"class":626}," log ",[620,892,893],{"class":630},"=",[620,895,862],{"class":634},[620,897,898],{"class":626},"(event)\n",[620,900,901],{"class":622,"line":737},[620,902,881],{"emptyLinePlaceholder":880},[620,904,905,908,910,913,915,918,920,922,924,927,929,932,934,937,939,941,944,946,948,950],{"class":622,"line":757},[620,906,907],{"class":626},"log",[620,909,631],{"class":630},[620,911,912],{"class":634},"set",[620,914,638],{"class":626},[620,916,917],{"class":630},"{",[620,919,684],{"class":677},[620,921,681],{"class":630},[620,923,674],{"class":630},[620,925,926],{"class":677}," id",[620,928,681],{"class":630},[620,930,931],{"class":804}," 1",[620,933,671],{"class":630},[620,935,936],{"class":677}," plan",[620,938,681],{"class":630},[620,940,724],{"class":630},[620,942,943],{"class":644},"pro",[620,945,641],{"class":630},[620,947,732],{"class":630},[620,949,732],{"class":630},[620,951,650],{"class":626},[620,953,954,956,958,960,962,964,967,969,971,973,975,978,980,983,985,988,990,993,995,998,1000,1002],{"class":622,"line":777},[620,955,907],{"class":626},[620,957,631],{"class":630},[620,959,912],{"class":634},[620,961,638],{"class":626},[620,963,917],{"class":630},[620,965,966],{"class":677}," cart",[620,968,681],{"class":630},[620,970,674],{"class":630},[620,972,926],{"class":677},[620,974,681],{"class":630},[620,976,977],{"class":804}," 42",[620,979,671],{"class":630},[620,981,982],{"class":677}," items",[620,984,681],{"class":630},[620,986,987],{"class":804}," 3",[620,989,671],{"class":630},[620,991,992],{"class":677}," total",[620,994,681],{"class":630},[620,996,997],{"class":804}," 9999",[620,999,732],{"class":630},[620,1001,732],{"class":630},[620,1003,650],{"class":626},[620,1005,1007,1009,1011,1013,1015,1017,1020,1022,1024,1027,1029,1031,1034,1036,1038,1041,1043,1045,1048,1050,1052,1054],{"class":622,"line":1006},7,[620,1008,907],{"class":626},[620,1010,631],{"class":630},[620,1012,912],{"class":634},[620,1014,638],{"class":626},[620,1016,917],{"class":630},[620,1018,1019],{"class":677}," payment",[620,1021,681],{"class":630},[620,1023,674],{"class":630},[620,1025,1026],{"class":677}," method",[620,1028,681],{"class":630},[620,1030,724],{"class":630},[620,1032,1033],{"class":644},"card",[620,1035,641],{"class":630},[620,1037,671],{"class":630},[620,1039,1040],{"class":677}," status",[620,1042,681],{"class":630},[620,1044,724],{"class":630},[620,1046,1047],{"class":644},"success",[620,1049,641],{"class":630},[620,1051,732],{"class":630},[620,1053,732],{"class":630},[620,1055,650],{"class":626},[609,1057,1060],{"className":611,"code":1058,"filename":1059,"language":614,"meta":615,"style":615},"import { createLogger } from 'evlog'\n\nconst log = createLogger({ jobId: 'sync-001', queue: 'emails' })\n\nlog.set({ source: 'postgres', target: 's3' })\nlog.set({ records: { found: 1250, synced: 1250 } })\nlog.emit()\n","scripts\u002Fsync-data.ts",[617,1061,1062,1081,1085,1129,1133,1173,1215],{"__ignoreMap":615},[620,1063,1064,1066,1068,1071,1073,1075,1077,1079],{"class":622,"line":623},[620,1065,857],{"class":856},[620,1067,674],{"class":630},[620,1069,1070],{"class":626}," createLogger",[620,1072,732],{"class":630},[620,1074,867],{"class":856},[620,1076,724],{"class":630},[620,1078,872],{"class":644},[620,1080,875],{"class":630},[620,1082,1083],{"class":622,"line":653},[620,1084,881],{"emptyLinePlaceholder":880},[620,1086,1087,1089,1091,1093,1095,1097,1099,1102,1104,1106,1109,1111,1113,1116,1118,1120,1123,1125,1127],{"class":622,"line":697},[620,1088,887],{"class":886},[620,1090,890],{"class":626},[620,1092,893],{"class":630},[620,1094,1070],{"class":634},[620,1096,638],{"class":626},[620,1098,917],{"class":630},[620,1100,1101],{"class":677}," jobId",[620,1103,681],{"class":630},[620,1105,724],{"class":630},[620,1107,1108],{"class":644},"sync-001",[620,1110,641],{"class":630},[620,1112,671],{"class":630},[620,1114,1115],{"class":677}," queue",[620,1117,681],{"class":630},[620,1119,724],{"class":630},[620,1121,1122],{"class":644},"emails",[620,1124,641],{"class":630},[620,1126,732],{"class":630},[620,1128,650],{"class":626},[620,1130,1131],{"class":622,"line":737},[620,1132,881],{"emptyLinePlaceholder":880},[620,1134,1135,1137,1139,1141,1143,1145,1147,1149,1151,1153,1155,1157,1160,1162,1164,1167,1169,1171],{"class":622,"line":757},[620,1136,907],{"class":626},[620,1138,631],{"class":630},[620,1140,912],{"class":634},[620,1142,638],{"class":626},[620,1144,917],{"class":630},[620,1146,719],{"class":677},[620,1148,681],{"class":630},[620,1150,724],{"class":630},[620,1152,727],{"class":644},[620,1154,641],{"class":630},[620,1156,671],{"class":630},[620,1158,1159],{"class":677}," target",[620,1161,681],{"class":630},[620,1163,724],{"class":630},[620,1165,1166],{"class":644},"s3",[620,1168,641],{"class":630},[620,1170,732],{"class":630},[620,1172,650],{"class":626},[620,1174,1175,1177,1179,1181,1183,1185,1188,1190,1192,1195,1197,1200,1202,1205,1207,1209,1211,1213],{"class":622,"line":777},[620,1176,907],{"class":626},[620,1178,631],{"class":630},[620,1180,912],{"class":634},[620,1182,638],{"class":626},[620,1184,917],{"class":630},[620,1186,1187],{"class":677}," records",[620,1189,681],{"class":630},[620,1191,674],{"class":630},[620,1193,1194],{"class":677}," found",[620,1196,681],{"class":630},[620,1198,1199],{"class":804}," 1250",[620,1201,671],{"class":630},[620,1203,1204],{"class":677}," synced",[620,1206,681],{"class":630},[620,1208,1199],{"class":804},[620,1210,732],{"class":630},[620,1212,732],{"class":630},[620,1214,650],{"class":626},[620,1216,1217,1219,1221,1224],{"class":622,"line":1006},[620,1218,907],{"class":626},[620,1220,631],{"class":630},[620,1222,1223],{"class":634},"emit",[620,1225,1226],{"class":626},"()\n",[609,1228,1233],{"className":1229,"code":1230,"filename":1231,"language":1232,"meta":615,"style":615},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","[INFO] POST \u002Fapi\u002Fcheckout (234ms)\n  user: { id: 1, plan: 'pro' }\n  cart: { id: 42, items: 3, total: 9999 }\n  payment: { method: 'card', status: 'success' }\n  status: 200\n","Output","bash",[617,1234,1235,1255,1280,1305,1334],{"__ignoreMap":615},[620,1236,1237,1240,1243,1246,1249,1253],{"class":622,"line":623},[620,1238,1239],{"class":630},"[",[620,1241,1242],{"class":626},"INFO",[620,1244,1245],{"class":630},"]",[620,1247,1248],{"class":626}," POST \u002Fapi\u002Fcheckout (",[620,1250,1252],{"class":1251},"sBMFI","234ms",[620,1254,650],{"class":626},[620,1256,1257,1260,1262,1265,1268,1271,1273,1275,1277],{"class":622,"line":653},[620,1258,1259],{"class":1251},"  user:",[620,1261,674],{"class":644},[620,1263,1264],{"class":644}," id:",[620,1266,1267],{"class":644}," 1,",[620,1269,1270],{"class":644}," plan:",[620,1272,724],{"class":630},[620,1274,943],{"class":644},[620,1276,641],{"class":630},[620,1278,1279],{"class":644}," }\n",[620,1281,1282,1285,1287,1289,1292,1295,1298,1301,1303],{"class":622,"line":697},[620,1283,1284],{"class":1251},"  cart:",[620,1286,674],{"class":644},[620,1288,1264],{"class":644},[620,1290,1291],{"class":644}," 42,",[620,1293,1294],{"class":644}," items:",[620,1296,1297],{"class":644}," 3,",[620,1299,1300],{"class":644}," total:",[620,1302,997],{"class":804},[620,1304,1279],{"class":644},[620,1306,1307,1310,1312,1315,1317,1319,1321,1323,1326,1328,1330,1332],{"class":622,"line":737},[620,1308,1309],{"class":1251},"  payment:",[620,1311,674],{"class":644},[620,1313,1314],{"class":644}," method:",[620,1316,724],{"class":630},[620,1318,1033],{"class":644},[620,1320,641],{"class":630},[620,1322,671],{"class":644},[620,1324,1325],{"class":644}," status:",[620,1327,724],{"class":630},[620,1329,1047],{"class":644},[620,1331,641],{"class":630},[620,1333,1279],{"class":644},[620,1335,1336,1339],{"class":622,"line":757},[620,1337,1338],{"class":1251},"  status:",[620,1340,1341],{"class":804}," 200\n",[534,1343,1344],{},"One log, all context. Everything you need to understand what happened.",[598,1346,1348],{"id":1347},"accumulate-context-emit-once","Accumulate context, emit once",[1350,1351,1353,1356],"h3",{"id":1352},"createlogger-general-purpose",[617,1354,1355],{},"createLogger"," (General Purpose)",[534,1358,1359,1360,1363],{},"Use ",[617,1361,1362],{},"createLogger()"," for scripts, background jobs, queue workers, cron jobs, or any operation where you manage the lifecycle:",[609,1365,1368],{"className":611,"code":1366,"filename":1367,"language":614,"meta":615,"style":615},"import { initLogger, createLogger } from 'evlog'\n\ninitLogger({ env: { service: 'migrate' } })\n\nconst log = createLogger({ task: 'user-migration' })\n\nconst users = await db.query('SELECT * FROM legacy_users')\nlog.set({ found: users.length })\n\nlet migrated = 0\nfor (const user of users) {\n  await newDb.upsert({ id: user.id, email: user.email, plan: user.plan })\n  migrated++\n}\n\nlog.set({ migrated, status: 'complete' })\nlog.emit()\n","scripts\u002Fmigrate-users.ts",[617,1369,1370,1393,1397,1431,1435,1465,1469,1500,1529,1534,1548,1571,1631,1640,1646,1651,1684],{"__ignoreMap":615},[620,1371,1372,1374,1376,1379,1381,1383,1385,1387,1389,1391],{"class":622,"line":623},[620,1373,857],{"class":856},[620,1375,674],{"class":630},[620,1377,1378],{"class":626}," initLogger",[620,1380,671],{"class":630},[620,1382,1070],{"class":626},[620,1384,732],{"class":630},[620,1386,867],{"class":856},[620,1388,724],{"class":630},[620,1390,872],{"class":644},[620,1392,875],{"class":630},[620,1394,1395],{"class":622,"line":653},[620,1396,881],{"emptyLinePlaceholder":880},[620,1398,1399,1402,1404,1406,1409,1411,1413,1416,1418,1420,1423,1425,1427,1429],{"class":622,"line":697},[620,1400,1401],{"class":634},"initLogger",[620,1403,638],{"class":626},[620,1405,917],{"class":630},[620,1407,1408],{"class":677}," env",[620,1410,681],{"class":630},[620,1412,674],{"class":630},[620,1414,1415],{"class":677}," service",[620,1417,681],{"class":630},[620,1419,724],{"class":630},[620,1421,1422],{"class":644},"migrate",[620,1424,641],{"class":630},[620,1426,732],{"class":630},[620,1428,732],{"class":630},[620,1430,650],{"class":626},[620,1432,1433],{"class":622,"line":737},[620,1434,881],{"emptyLinePlaceholder":880},[620,1436,1437,1439,1441,1443,1445,1447,1449,1452,1454,1456,1459,1461,1463],{"class":622,"line":757},[620,1438,887],{"class":886},[620,1440,890],{"class":626},[620,1442,893],{"class":630},[620,1444,1070],{"class":634},[620,1446,638],{"class":626},[620,1448,917],{"class":630},[620,1450,1451],{"class":677}," task",[620,1453,681],{"class":630},[620,1455,724],{"class":630},[620,1457,1458],{"class":644},"user-migration",[620,1460,641],{"class":630},[620,1462,732],{"class":630},[620,1464,650],{"class":626},[620,1466,1467],{"class":622,"line":777},[620,1468,881],{"emptyLinePlaceholder":880},[620,1470,1471,1473,1476,1478,1481,1484,1486,1489,1491,1493,1496,1498],{"class":622,"line":1006},[620,1472,887],{"class":886},[620,1474,1475],{"class":626}," users ",[620,1477,893],{"class":630},[620,1479,1480],{"class":856}," await",[620,1482,1483],{"class":626}," db",[620,1485,631],{"class":630},[620,1487,1488],{"class":634},"query",[620,1490,638],{"class":626},[620,1492,641],{"class":630},[620,1494,1495],{"class":644},"SELECT * FROM legacy_users",[620,1497,641],{"class":630},[620,1499,650],{"class":626},[620,1501,1503,1505,1507,1509,1511,1513,1515,1517,1520,1522,1525,1527],{"class":622,"line":1502},8,[620,1504,907],{"class":626},[620,1506,631],{"class":630},[620,1508,912],{"class":634},[620,1510,638],{"class":626},[620,1512,917],{"class":630},[620,1514,1194],{"class":677},[620,1516,681],{"class":630},[620,1518,1519],{"class":626}," users",[620,1521,631],{"class":630},[620,1523,1524],{"class":626},"length ",[620,1526,692],{"class":630},[620,1528,650],{"class":626},[620,1530,1532],{"class":622,"line":1531},9,[620,1533,881],{"emptyLinePlaceholder":880},[620,1535,1537,1540,1543,1545],{"class":622,"line":1536},10,[620,1538,1539],{"class":886},"let",[620,1541,1542],{"class":626}," migrated ",[620,1544,893],{"class":630},[620,1546,1547],{"class":804}," 0\n",[620,1549,1551,1554,1557,1559,1562,1565,1568],{"class":622,"line":1550},11,[620,1552,1553],{"class":856},"for",[620,1555,1556],{"class":626}," (",[620,1558,887],{"class":886},[620,1560,1561],{"class":626}," user ",[620,1563,1564],{"class":630},"of",[620,1566,1567],{"class":626}," users) ",[620,1569,1570],{"class":630},"{\n",[620,1572,1574,1577,1580,1582,1585,1587,1589,1591,1593,1595,1597,1600,1602,1605,1607,1609,1611,1614,1616,1618,1620,1622,1624,1627,1629],{"class":622,"line":1573},12,[620,1575,1576],{"class":856},"  await",[620,1578,1579],{"class":626}," newDb",[620,1581,631],{"class":630},[620,1583,1584],{"class":634},"upsert",[620,1586,638],{"class":677},[620,1588,917],{"class":630},[620,1590,926],{"class":677},[620,1592,681],{"class":630},[620,1594,684],{"class":626},[620,1596,631],{"class":630},[620,1598,1599],{"class":626},"id",[620,1601,671],{"class":630},[620,1603,1604],{"class":677}," email",[620,1606,681],{"class":630},[620,1608,684],{"class":626},[620,1610,631],{"class":630},[620,1612,1613],{"class":626},"email",[620,1615,671],{"class":630},[620,1617,936],{"class":677},[620,1619,681],{"class":630},[620,1621,684],{"class":626},[620,1623,631],{"class":630},[620,1625,1626],{"class":626},"plan",[620,1628,732],{"class":630},[620,1630,650],{"class":677},[620,1632,1634,1637],{"class":622,"line":1633},13,[620,1635,1636],{"class":626},"  migrated",[620,1638,1639],{"class":630},"++\n",[620,1641,1643],{"class":622,"line":1642},14,[620,1644,1645],{"class":630},"}\n",[620,1647,1649],{"class":622,"line":1648},15,[620,1650,881],{"emptyLinePlaceholder":880},[620,1652,1654,1656,1658,1660,1662,1664,1667,1669,1671,1673,1675,1678,1680,1682],{"class":622,"line":1653},16,[620,1655,907],{"class":626},[620,1657,631],{"class":630},[620,1659,912],{"class":634},[620,1661,638],{"class":626},[620,1663,917],{"class":630},[620,1665,1666],{"class":626}," migrated",[620,1668,671],{"class":630},[620,1670,1040],{"class":677},[620,1672,681],{"class":630},[620,1674,724],{"class":630},[620,1676,1677],{"class":644},"complete",[620,1679,641],{"class":630},[620,1681,732],{"class":630},[620,1683,650],{"class":626},[620,1685,1687,1689,1691,1693],{"class":622,"line":1686},17,[620,1688,907],{"class":626},[620,1690,631],{"class":630},[620,1692,1223],{"class":634},[620,1694,1226],{"class":626},[1350,1696,1698,1701],{"id":1697},"createrequestlogger-http-contexts",[617,1699,1700],{},"createRequestLogger"," (HTTP Contexts)",[534,1703,1359,1704,1707,1708,1710,1711,1714,1715,1718,1719,681],{},[617,1705,1706],{},"createRequestLogger()"," when working with HTTP requests outside of a framework integration. It's a thin wrapper around ",[617,1709,1355],{}," that pre-populates ",[617,1712,1713],{},"method",", ",[617,1716,1717],{},"path",", and ",[617,1720,1721],{},"requestId",[609,1723,1726],{"className":611,"code":1724,"filename":1725,"language":614,"meta":615,"style":615},"import { initLogger, createRequestLogger } from 'evlog'\n\ninitLogger({ env: { service: 'my-worker' } })\n\nconst log = createRequestLogger({ method: 'POST', path: '\u002Fapi\u002Fcheckout' })\n\nlog.set({ user: { id: 1, plan: 'pro' } })\nlog.set({ cart: { items: 3, total: 9999 } })\n\nlog.emit()\n","src\u002Fworker.ts",[617,1727,1728,1751,1755,1786,1790,1833,1837,1879,1917,1921],{"__ignoreMap":615},[620,1729,1730,1732,1734,1736,1738,1741,1743,1745,1747,1749],{"class":622,"line":623},[620,1731,857],{"class":856},[620,1733,674],{"class":630},[620,1735,1378],{"class":626},[620,1737,671],{"class":630},[620,1739,1740],{"class":626}," createRequestLogger",[620,1742,732],{"class":630},[620,1744,867],{"class":856},[620,1746,724],{"class":630},[620,1748,872],{"class":644},[620,1750,875],{"class":630},[620,1752,1753],{"class":622,"line":653},[620,1754,881],{"emptyLinePlaceholder":880},[620,1756,1757,1759,1761,1763,1765,1767,1769,1771,1773,1775,1778,1780,1782,1784],{"class":622,"line":697},[620,1758,1401],{"class":634},[620,1760,638],{"class":626},[620,1762,917],{"class":630},[620,1764,1408],{"class":677},[620,1766,681],{"class":630},[620,1768,674],{"class":630},[620,1770,1415],{"class":677},[620,1772,681],{"class":630},[620,1774,724],{"class":630},[620,1776,1777],{"class":644},"my-worker",[620,1779,641],{"class":630},[620,1781,732],{"class":630},[620,1783,732],{"class":630},[620,1785,650],{"class":626},[620,1787,1788],{"class":622,"line":737},[620,1789,881],{"emptyLinePlaceholder":880},[620,1791,1792,1794,1796,1798,1800,1802,1804,1806,1808,1810,1813,1815,1817,1820,1822,1824,1827,1829,1831],{"class":622,"line":757},[620,1793,887],{"class":886},[620,1795,890],{"class":626},[620,1797,893],{"class":630},[620,1799,1740],{"class":634},[620,1801,638],{"class":626},[620,1803,917],{"class":630},[620,1805,1026],{"class":677},[620,1807,681],{"class":630},[620,1809,724],{"class":630},[620,1811,1812],{"class":644},"POST",[620,1814,641],{"class":630},[620,1816,671],{"class":630},[620,1818,1819],{"class":677}," path",[620,1821,681],{"class":630},[620,1823,724],{"class":630},[620,1825,1826],{"class":644},"\u002Fapi\u002Fcheckout",[620,1828,641],{"class":630},[620,1830,732],{"class":630},[620,1832,650],{"class":626},[620,1834,1835],{"class":622,"line":777},[620,1836,881],{"emptyLinePlaceholder":880},[620,1838,1839,1841,1843,1845,1847,1849,1851,1853,1855,1857,1859,1861,1863,1865,1867,1869,1871,1873,1875,1877],{"class":622,"line":1006},[620,1840,907],{"class":626},[620,1842,631],{"class":630},[620,1844,912],{"class":634},[620,1846,638],{"class":626},[620,1848,917],{"class":630},[620,1850,684],{"class":677},[620,1852,681],{"class":630},[620,1854,674],{"class":630},[620,1856,926],{"class":677},[620,1858,681],{"class":630},[620,1860,931],{"class":804},[620,1862,671],{"class":630},[620,1864,936],{"class":677},[620,1866,681],{"class":630},[620,1868,724],{"class":630},[620,1870,943],{"class":644},[620,1872,641],{"class":630},[620,1874,732],{"class":630},[620,1876,732],{"class":630},[620,1878,650],{"class":626},[620,1880,1881,1883,1885,1887,1889,1891,1893,1895,1897,1899,1901,1903,1905,1907,1909,1911,1913,1915],{"class":622,"line":1502},[620,1882,907],{"class":626},[620,1884,631],{"class":630},[620,1886,912],{"class":634},[620,1888,638],{"class":626},[620,1890,917],{"class":630},[620,1892,966],{"class":677},[620,1894,681],{"class":630},[620,1896,674],{"class":630},[620,1898,982],{"class":677},[620,1900,681],{"class":630},[620,1902,987],{"class":804},[620,1904,671],{"class":630},[620,1906,992],{"class":677},[620,1908,681],{"class":630},[620,1910,997],{"class":804},[620,1912,732],{"class":630},[620,1914,732],{"class":630},[620,1916,650],{"class":626},[620,1918,1919],{"class":622,"line":1531},[620,1920,881],{"emptyLinePlaceholder":880},[620,1922,1923,1925,1927,1929],{"class":622,"line":1536},[620,1924,907],{"class":626},[620,1926,631],{"class":630},[620,1928,1223],{"class":634},[620,1930,1226],{"class":626},[538,1932,1934,1935,547,1937,1939,1940,1943],{"color":635,"icon":1933},"i-lucide-info","Both ",[617,1936,1355],{},[617,1938,1700],{}," require a manual ",[617,1941,1942],{},"log.emit()"," call. The event won't be emitted until you call it.",[1350,1945,1947,1950],{"id":1946},"uselogger-retrieving-the-request-logger",[617,1948,1949],{},"useLogger"," (Retrieving the Request Logger)",[534,1952,1953,1954,1957],{},"When using a framework integration (Nuxt, Hono, Express, etc.), the middleware creates a wide event logger automatically on each request. ",[617,1955,1956],{},"useLogger(event)"," retrieves that logger from the request context:",[609,1959,1961],{"className":611,"code":1960,"filename":849,"language":614,"meta":615,"style":615},"import { useLogger } from 'evlog'\n\nexport default defineEventHandler(async (event) => {\n  const log = useLogger(event)\n\n  log.set({ user: { id: 1, plan: 'pro' } })\n  log.set({ cart: { items: 3, total: 9999 } })\n\n  return { success: true }\n  \u002F\u002F auto-emitted on response end\n})\n",[617,1962,1963,1981,1985,2016,2035,2039,2082,2120,2124,2142,2148],{"__ignoreMap":615},[620,1964,1965,1967,1969,1971,1973,1975,1977,1979],{"class":622,"line":623},[620,1966,857],{"class":856},[620,1968,674],{"class":630},[620,1970,862],{"class":626},[620,1972,732],{"class":630},[620,1974,867],{"class":856},[620,1976,724],{"class":630},[620,1978,872],{"class":644},[620,1980,875],{"class":630},[620,1982,1983],{"class":622,"line":653},[620,1984,881],{"emptyLinePlaceholder":880},[620,1986,1987,1990,1993,1996,1998,2001,2003,2007,2010,2013],{"class":622,"line":697},[620,1988,1989],{"class":856},"export",[620,1991,1992],{"class":856}," default",[620,1994,1995],{"class":634}," defineEventHandler",[620,1997,638],{"class":626},[620,1999,2000],{"class":886},"async",[620,2002,1556],{"class":630},[620,2004,2006],{"class":2005},"sHdIc","event",[620,2008,2009],{"class":630},")",[620,2011,2012],{"class":886}," =>",[620,2014,2015],{"class":630}," {\n",[620,2017,2018,2021,2024,2027,2029,2031,2033],{"class":622,"line":737},[620,2019,2020],{"class":886},"  const",[620,2022,2023],{"class":626}," log",[620,2025,2026],{"class":630}," =",[620,2028,862],{"class":634},[620,2030,638],{"class":677},[620,2032,2006],{"class":626},[620,2034,650],{"class":677},[620,2036,2037],{"class":622,"line":757},[620,2038,881],{"emptyLinePlaceholder":880},[620,2040,2041,2044,2046,2048,2050,2052,2054,2056,2058,2060,2062,2064,2066,2068,2070,2072,2074,2076,2078,2080],{"class":622,"line":777},[620,2042,2043],{"class":626},"  log",[620,2045,631],{"class":630},[620,2047,912],{"class":634},[620,2049,638],{"class":677},[620,2051,917],{"class":630},[620,2053,684],{"class":677},[620,2055,681],{"class":630},[620,2057,674],{"class":630},[620,2059,926],{"class":677},[620,2061,681],{"class":630},[620,2063,931],{"class":804},[620,2065,671],{"class":630},[620,2067,936],{"class":677},[620,2069,681],{"class":630},[620,2071,724],{"class":630},[620,2073,943],{"class":644},[620,2075,641],{"class":630},[620,2077,732],{"class":630},[620,2079,732],{"class":630},[620,2081,650],{"class":677},[620,2083,2084,2086,2088,2090,2092,2094,2096,2098,2100,2102,2104,2106,2108,2110,2112,2114,2116,2118],{"class":622,"line":1006},[620,2085,2043],{"class":626},[620,2087,631],{"class":630},[620,2089,912],{"class":634},[620,2091,638],{"class":677},[620,2093,917],{"class":630},[620,2095,966],{"class":677},[620,2097,681],{"class":630},[620,2099,674],{"class":630},[620,2101,982],{"class":677},[620,2103,681],{"class":630},[620,2105,987],{"class":804},[620,2107,671],{"class":630},[620,2109,992],{"class":677},[620,2111,681],{"class":630},[620,2113,997],{"class":804},[620,2115,732],{"class":630},[620,2117,732],{"class":630},[620,2119,650],{"class":677},[620,2121,2122],{"class":622,"line":1502},[620,2123,881],{"emptyLinePlaceholder":880},[620,2125,2126,2129,2131,2134,2136,2140],{"class":622,"line":1531},[620,2127,2128],{"class":856},"  return",[620,2130,674],{"class":630},[620,2132,2133],{"class":677}," success",[620,2135,681],{"class":630},[620,2137,2139],{"class":2138},"sfNiH"," true",[620,2141,1279],{"class":630},[620,2143,2144],{"class":622,"line":1536},[620,2145,2147],{"class":2146},"sHwdD","  \u002F\u002F auto-emitted on response end\n",[620,2149,2150,2152],{"class":622,"line":1550},[620,2151,692],{"class":630},[620,2153,650],{"class":626},[538,2155,2156,2158,2159,2161],{"color":635,"icon":1933},[617,2157,1949],{}," doesn't create a logger, it retrieves the one the framework middleware already attached to the event. The middleware handles creation and emission automatically. In Nuxt, ",[617,2160,1949],{}," is auto-imported.",[598,2163,2165],{"id":2164},"after-emit-sealing-and-background-work","After emit: sealing and background work",[534,2167,2168,2169,2172,2173,2175,2176,2179,2180,1714,2182,1714,2185,1718,2187,2190,2191,2194,2195,2201,2202,2205,2206,2209,2210,2213],{},"When the wide event is ",[818,2170,2171],{},"emitted"," (automatically at the end of the request, or when you call ",[617,2174,1942],{}," yourself), that logger instance is ",[818,2177,2178],{},"sealed",". Further ",[617,2181,912],{},[617,2183,2184],{},"error",[617,2186,635],{},[617,2188,2189],{},"warn"," calls do ",[818,2192,2193],{},"not"," update the event that was already sent to your drains. They are ignored and evlog prints a ",[818,2196,2197,2200],{},[617,2198,2199],{},"[evlog]"," warning"," to the console with the keys that were dropped. This also applies when ",[818,2203,2204],{},"head sampling"," discards the event (",[617,2207,2208],{},"emit()"," returned ",[617,2211,2212],{},"null","): the logger is still sealed for that unit of work.",[534,2215,2216,2217,2220,2221,2224,2225,2228,2229,2232],{},"This matters for ",[818,2218,2219],{},"async work that outlives the handler"," (fire-and-forget promises, ",[617,2222,2223],{},"setTimeout",", tasks started but not awaited). On many runtimes, ",[617,2226,2227],{},"AsyncLocalStorage"," keeps returning the same request logger, so ",[617,2230,2231],{},"useLogger()"," still succeeds even though the HTTP response, and the wide event, are already finished. Without warnings, that looks like silent data loss.",[1350,2234,2236],{"id":2235},"logforklabel-fn",[617,2237,2238],{},"log.fork(label, fn)",[534,2240,2241,2242,2245,2246,2250,2251,2254,2255,1714,2258,2260,2261,2263],{},"For intentional background work that should produce ",[818,2243,2244],{},"its own"," wide event, use ",[818,2247,2248],{},[617,2249,2238],{}," when your integration provides it (Express, Fastify, NestJS, SvelteKit, React Router, Next.js ",[617,2252,2253],{},"withEvlog",", Elysia). Inside ",[617,2256,2257],{},"fn",[617,2259,2231],{}," resolves to the forked logger. When ",[617,2262,2257],{}," completes (or throws), that logger emits an event with:",[560,2265,2266,2278],{},[563,2267,2268,2273,2274,2277],{},[818,2269,2270],{},[617,2271,2272],{},"operation",": the ",[617,2275,2276],{},"label"," you passed",[563,2279,2280,2285,2286,2288],{},[818,2281,2282],{},[617,2283,2284],{},"_parentRequestId",": the parent request’s ",[617,2287,1721],{}," (for correlation in queries and dashboards)",[534,2290,2291,2292,2295],{},"The parent wide event may be emitted ",[818,2293,2294],{},"before"," the child event; they are two separate events ordered by time.",[534,2297,2298,2301,2302,2304,2305,2308,2309,2311],{},[818,2299,2300],{},"Not available yet:"," Hono (no ",[617,2303,1949],{}," without ",[617,2306,2307],{},"c.get('log')"," + ALS) and Nitro\u002FNuxt ",[617,2310,1956],{},", so use the post-emit warnings to catch mistakes; a different API may arrive later for event-scoped forks.",[534,2313,2314,2315,2318],{},"For AI SDK streaming responses, supported framework integrations (Next.js, Nitro\u002FNuxt, SvelteKit, Hono, React Router, oRPC) defer wide-event emit until the response body finishes, so ",[617,2316,2317],{},"createAILogger(log)"," metadata lands on the same request event automatically.",[609,2320,2323],{"className":611,"code":2321,"filename":2322,"language":614,"meta":615,"style":615},"import { evlog, useLogger } from 'evlog\u002Fexpress'\n\n\u002F\u002F Inside a route after evlog middleware:\nconst log = req.log\nlog.set({ order_dispatched: true })\n\nlog.fork?.('process_order', async () => {\n  const child = useLogger()\n  child.set({ inventory_checked: true })\n})\n","server\u002Froutes\u002Fcheckout.post.ts",[617,2324,2325,2349,2353,2358,2374,2397,2401,2434,2447,2471],{"__ignoreMap":615},[620,2326,2327,2329,2331,2334,2336,2338,2340,2342,2344,2347],{"class":622,"line":623},[620,2328,857],{"class":856},[620,2330,674],{"class":630},[620,2332,2333],{"class":626}," evlog",[620,2335,671],{"class":630},[620,2337,862],{"class":626},[620,2339,732],{"class":630},[620,2341,867],{"class":856},[620,2343,724],{"class":630},[620,2345,2346],{"class":644},"evlog\u002Fexpress",[620,2348,875],{"class":630},[620,2350,2351],{"class":622,"line":653},[620,2352,881],{"emptyLinePlaceholder":880},[620,2354,2355],{"class":622,"line":697},[620,2356,2357],{"class":2146},"\u002F\u002F Inside a route after evlog middleware:\n",[620,2359,2360,2362,2364,2366,2369,2371],{"class":622,"line":737},[620,2361,887],{"class":886},[620,2363,890],{"class":626},[620,2365,893],{"class":630},[620,2367,2368],{"class":626}," req",[620,2370,631],{"class":630},[620,2372,2373],{"class":626},"log\n",[620,2375,2376,2378,2380,2382,2384,2386,2389,2391,2393,2395],{"class":622,"line":757},[620,2377,907],{"class":626},[620,2379,631],{"class":630},[620,2381,912],{"class":634},[620,2383,638],{"class":626},[620,2385,917],{"class":630},[620,2387,2388],{"class":677}," order_dispatched",[620,2390,681],{"class":630},[620,2392,2139],{"class":2138},[620,2394,732],{"class":630},[620,2396,650],{"class":626},[620,2398,2399],{"class":622,"line":777},[620,2400,881],{"emptyLinePlaceholder":880},[620,2402,2403,2405,2407,2410,2413,2415,2417,2420,2422,2424,2427,2430,2432],{"class":622,"line":1006},[620,2404,907],{"class":626},[620,2406,631],{"class":630},[620,2408,2409],{"class":634},"fork",[620,2411,2412],{"class":630},"?.",[620,2414,638],{"class":626},[620,2416,641],{"class":630},[620,2418,2419],{"class":644},"process_order",[620,2421,641],{"class":630},[620,2423,671],{"class":630},[620,2425,2426],{"class":886}," async",[620,2428,2429],{"class":630}," ()",[620,2431,2012],{"class":886},[620,2433,2015],{"class":630},[620,2435,2436,2438,2441,2443,2445],{"class":622,"line":1502},[620,2437,2020],{"class":886},[620,2439,2440],{"class":626}," child",[620,2442,2026],{"class":630},[620,2444,862],{"class":634},[620,2446,1226],{"class":677},[620,2448,2449,2452,2454,2456,2458,2460,2463,2465,2467,2469],{"class":622,"line":1531},[620,2450,2451],{"class":626},"  child",[620,2453,631],{"class":630},[620,2455,912],{"class":634},[620,2457,638],{"class":677},[620,2459,917],{"class":630},[620,2461,2462],{"class":677}," inventory_checked",[620,2464,681],{"class":630},[620,2466,2139],{"class":2138},[620,2468,732],{"class":630},[620,2470,650],{"class":677},[620,2472,2473,2475],{"class":622,"line":1536},[620,2474,692],{"class":630},[620,2476,650],{"class":626},[598,2478,2480],{"id":2479},"read-a-wide-event-field-by-field","Read a wide event field by field",[534,2482,2483,2484,2486,2487,1714,2489,2491,2492,631],{},"A well-designed wide event contains context from multiple layers. The examples below show what to add inside your handler or script. They assume ",[617,2485,907],{}," is already created via ",[617,2488,1355],{},[617,2490,1700],{},", or ",[617,2493,1949],{},[1350,2495,2497],{"id":2496},"operation-context","Operation Context",[534,2499,2500],{},"Basic information about the operation:",[844,2502,2503,2607],{},[609,2504,2506],{"className":611,"code":2505,"filename":849,"language":614,"meta":615,"style":615},"import { useLogger } from 'evlog'\n\nconst log = useLogger(event)\nlog.set({\n  method: 'POST',\n  path: '\u002Fapi\u002Fcheckout',\n  requestId: 'abc-123-def',\n})\n",[617,2507,2508,2526,2530,2542,2554,2570,2585,2601],{"__ignoreMap":615},[620,2509,2510,2512,2514,2516,2518,2520,2522,2524],{"class":622,"line":623},[620,2511,857],{"class":856},[620,2513,674],{"class":630},[620,2515,862],{"class":626},[620,2517,732],{"class":630},[620,2519,867],{"class":856},[620,2521,724],{"class":630},[620,2523,872],{"class":644},[620,2525,875],{"class":630},[620,2527,2528],{"class":622,"line":653},[620,2529,881],{"emptyLinePlaceholder":880},[620,2531,2532,2534,2536,2538,2540],{"class":622,"line":697},[620,2533,887],{"class":886},[620,2535,890],{"class":626},[620,2537,893],{"class":630},[620,2539,862],{"class":634},[620,2541,898],{"class":626},[620,2543,2544,2546,2548,2550,2552],{"class":622,"line":737},[620,2545,907],{"class":626},[620,2547,631],{"class":630},[620,2549,912],{"class":634},[620,2551,638],{"class":626},[620,2553,1570],{"class":630},[620,2555,2556,2559,2561,2563,2565,2567],{"class":622,"line":757},[620,2557,2558],{"class":677},"  method",[620,2560,681],{"class":630},[620,2562,724],{"class":630},[620,2564,1812],{"class":644},[620,2566,641],{"class":630},[620,2568,2569],{"class":630},",\n",[620,2571,2572,2575,2577,2579,2581,2583],{"class":622,"line":777},[620,2573,2574],{"class":677},"  path",[620,2576,681],{"class":630},[620,2578,724],{"class":630},[620,2580,1826],{"class":644},[620,2582,641],{"class":630},[620,2584,2569],{"class":630},[620,2586,2587,2590,2592,2594,2597,2599],{"class":622,"line":1006},[620,2588,2589],{"class":677},"  requestId",[620,2591,681],{"class":630},[620,2593,724],{"class":630},[620,2595,2596],{"class":644},"abc-123-def",[620,2598,641],{"class":630},[620,2600,2569],{"class":630},[620,2602,2603,2605],{"class":622,"line":1502},[620,2604,692],{"class":630},[620,2606,650],{"class":626},[609,2608,2610],{"className":611,"code":2609,"filename":1059,"language":614,"meta":615,"style":615},"import { createLogger } from 'evlog'\n\nconst log = createLogger({\n  jobId: 'sync-001',\n  queue: 'emails',\n  source: 'postgres',\n})\n",[617,2611,2612,2630,2634,2648,2663,2678,2693],{"__ignoreMap":615},[620,2613,2614,2616,2618,2620,2622,2624,2626,2628],{"class":622,"line":623},[620,2615,857],{"class":856},[620,2617,674],{"class":630},[620,2619,1070],{"class":626},[620,2621,732],{"class":630},[620,2623,867],{"class":856},[620,2625,724],{"class":630},[620,2627,872],{"class":644},[620,2629,875],{"class":630},[620,2631,2632],{"class":622,"line":653},[620,2633,881],{"emptyLinePlaceholder":880},[620,2635,2636,2638,2640,2642,2644,2646],{"class":622,"line":697},[620,2637,887],{"class":886},[620,2639,890],{"class":626},[620,2641,893],{"class":630},[620,2643,1070],{"class":634},[620,2645,638],{"class":626},[620,2647,1570],{"class":630},[620,2649,2650,2653,2655,2657,2659,2661],{"class":622,"line":737},[620,2651,2652],{"class":677},"  jobId",[620,2654,681],{"class":630},[620,2656,724],{"class":630},[620,2658,1108],{"class":644},[620,2660,641],{"class":630},[620,2662,2569],{"class":630},[620,2664,2665,2668,2670,2672,2674,2676],{"class":622,"line":757},[620,2666,2667],{"class":677},"  queue",[620,2669,681],{"class":630},[620,2671,724],{"class":630},[620,2673,1122],{"class":644},[620,2675,641],{"class":630},[620,2677,2569],{"class":630},[620,2679,2680,2683,2685,2687,2689,2691],{"class":622,"line":777},[620,2681,2682],{"class":677},"  source",[620,2684,681],{"class":630},[620,2686,724],{"class":630},[620,2688,727],{"class":644},[620,2690,641],{"class":630},[620,2692,2569],{"class":630},[620,2694,2695,2697],{"class":622,"line":1006},[620,2696,692],{"class":630},[620,2698,650],{"class":626},[538,2700,2701,2702,1714,2704,1714,2706,2708],{"color":635,"icon":1933},"In framework integrations, request context (",[617,2703,1713],{},[617,2705,1717],{},[617,2707,1721],{},") is auto-populated by the middleware. You don't need to set these fields manually.",[1350,2710,2712],{"id":2711},"user-actor-context","User \u002F Actor Context",[534,2714,2715],{},"Who triggered the operation:",[609,2717,2719],{"className":611,"code":2718,"filename":849,"language":614,"meta":615,"style":615},"log.set({\n  userId: user.id,\n  email: user.email,\n  subscription: user.plan,\n  accountAge: daysSince(user.createdAt),\n})\n",[617,2720,2721,2733,2748,2763,2778,2798],{"__ignoreMap":615},[620,2722,2723,2725,2727,2729,2731],{"class":622,"line":623},[620,2724,907],{"class":626},[620,2726,631],{"class":630},[620,2728,912],{"class":634},[620,2730,638],{"class":626},[620,2732,1570],{"class":630},[620,2734,2735,2738,2740,2742,2744,2746],{"class":622,"line":653},[620,2736,2737],{"class":677},"  userId",[620,2739,681],{"class":630},[620,2741,684],{"class":626},[620,2743,631],{"class":630},[620,2745,1599],{"class":626},[620,2747,2569],{"class":630},[620,2749,2750,2753,2755,2757,2759,2761],{"class":622,"line":697},[620,2751,2752],{"class":677},"  email",[620,2754,681],{"class":630},[620,2756,684],{"class":626},[620,2758,631],{"class":630},[620,2760,1613],{"class":626},[620,2762,2569],{"class":630},[620,2764,2765,2768,2770,2772,2774,2776],{"class":622,"line":737},[620,2766,2767],{"class":677},"  subscription",[620,2769,681],{"class":630},[620,2771,684],{"class":626},[620,2773,631],{"class":630},[620,2775,1626],{"class":626},[620,2777,2569],{"class":630},[620,2779,2780,2783,2785,2788,2791,2793,2796],{"class":622,"line":757},[620,2781,2782],{"class":677},"  accountAge",[620,2784,681],{"class":630},[620,2786,2787],{"class":634}," daysSince",[620,2789,2790],{"class":626},"(user",[620,2792,631],{"class":630},[620,2794,2795],{"class":626},"createdAt)",[620,2797,2569],{"class":630},[620,2799,2800,2802],{"class":622,"line":777},[620,2801,692],{"class":630},[620,2803,650],{"class":626},[1350,2805,2807],{"id":2806},"business-context","Business Context",[534,2809,2810],{},"Domain-specific data relevant to the operation:",[609,2812,2814],{"className":611,"code":2813,"filename":849,"language":614,"meta":615,"style":615},"log.set({\n  cart: {\n    id: cart.id,\n    items: cart.items.length,\n    total: cart.total,\n    currency: 'USD',\n  },\n  shipping: {\n    method: 'express',\n    country: address.country,\n  },\n  coupon: appliedCoupon?.code,\n})\n",[617,2815,2816,2828,2837,2852,2873,2889,2905,2910,2919,2935,2952,2956,2972],{"__ignoreMap":615},[620,2817,2818,2820,2822,2824,2826],{"class":622,"line":623},[620,2819,907],{"class":626},[620,2821,631],{"class":630},[620,2823,912],{"class":634},[620,2825,638],{"class":626},[620,2827,1570],{"class":630},[620,2829,2830,2833,2835],{"class":622,"line":653},[620,2831,2832],{"class":677},"  cart",[620,2834,681],{"class":630},[620,2836,2015],{"class":630},[620,2838,2839,2842,2844,2846,2848,2850],{"class":622,"line":697},[620,2840,2841],{"class":677},"    id",[620,2843,681],{"class":630},[620,2845,966],{"class":626},[620,2847,631],{"class":630},[620,2849,1599],{"class":626},[620,2851,2569],{"class":630},[620,2853,2854,2857,2859,2861,2863,2866,2868,2871],{"class":622,"line":737},[620,2855,2856],{"class":677},"    items",[620,2858,681],{"class":630},[620,2860,966],{"class":626},[620,2862,631],{"class":630},[620,2864,2865],{"class":626},"items",[620,2867,631],{"class":630},[620,2869,2870],{"class":626},"length",[620,2872,2569],{"class":630},[620,2874,2875,2878,2880,2882,2884,2887],{"class":622,"line":757},[620,2876,2877],{"class":677},"    total",[620,2879,681],{"class":630},[620,2881,966],{"class":626},[620,2883,631],{"class":630},[620,2885,2886],{"class":626},"total",[620,2888,2569],{"class":630},[620,2890,2891,2894,2896,2898,2901,2903],{"class":622,"line":777},[620,2892,2893],{"class":677},"    currency",[620,2895,681],{"class":630},[620,2897,724],{"class":630},[620,2899,2900],{"class":644},"USD",[620,2902,641],{"class":630},[620,2904,2569],{"class":630},[620,2906,2907],{"class":622,"line":1006},[620,2908,2909],{"class":630},"  },\n",[620,2911,2912,2915,2917],{"class":622,"line":1502},[620,2913,2914],{"class":677},"  shipping",[620,2916,681],{"class":630},[620,2918,2015],{"class":630},[620,2920,2921,2924,2926,2928,2931,2933],{"class":622,"line":1531},[620,2922,2923],{"class":677},"    method",[620,2925,681],{"class":630},[620,2927,724],{"class":630},[620,2929,2930],{"class":644},"express",[620,2932,641],{"class":630},[620,2934,2569],{"class":630},[620,2936,2937,2940,2942,2945,2947,2950],{"class":622,"line":1536},[620,2938,2939],{"class":677},"    country",[620,2941,681],{"class":630},[620,2943,2944],{"class":626}," address",[620,2946,631],{"class":630},[620,2948,2949],{"class":626},"country",[620,2951,2569],{"class":630},[620,2953,2954],{"class":622,"line":1550},[620,2955,2909],{"class":630},[620,2957,2958,2961,2963,2966,2968,2970],{"class":622,"line":1573},[620,2959,2960],{"class":677},"  coupon",[620,2962,681],{"class":630},[620,2964,2965],{"class":626}," appliedCoupon",[620,2967,2412],{"class":630},[620,2969,617],{"class":626},[620,2971,2569],{"class":630},[620,2973,2974,2976],{"class":622,"line":1633},[620,2975,692],{"class":630},[620,2977,650],{"class":626},[1350,2979,2981],{"id":2980},"outcome","Outcome",[534,2983,2984],{},"The result of the operation:",[844,2986,2987,3060],{},[609,2988,2991],{"className":611,"code":2989,"filename":2990,"language":614,"meta":615,"style":615},"log.set({\n  status: 200,\n  duration: Date.now() - startTime,\n  success: true,\n})\n","Success",[617,2992,2993,3005,3017,3043,3054],{"__ignoreMap":615},[620,2994,2995,2997,2999,3001,3003],{"class":622,"line":623},[620,2996,907],{"class":626},[620,2998,631],{"class":630},[620,3000,912],{"class":634},[620,3002,638],{"class":626},[620,3004,1570],{"class":630},[620,3006,3007,3010,3012,3015],{"class":622,"line":653},[620,3008,3009],{"class":677},"  status",[620,3011,681],{"class":630},[620,3013,3014],{"class":804}," 200",[620,3016,2569],{"class":630},[620,3018,3019,3022,3024,3027,3029,3032,3035,3038,3041],{"class":622,"line":697},[620,3020,3021],{"class":677},"  duration",[620,3023,681],{"class":630},[620,3025,3026],{"class":626}," Date",[620,3028,631],{"class":630},[620,3030,3031],{"class":634},"now",[620,3033,3034],{"class":626},"() ",[620,3036,3037],{"class":630},"-",[620,3039,3040],{"class":626}," startTime",[620,3042,2569],{"class":630},[620,3044,3045,3048,3050,3052],{"class":622,"line":737},[620,3046,3047],{"class":677},"  success",[620,3049,681],{"class":630},[620,3051,2139],{"class":2138},[620,3053,2569],{"class":630},[620,3055,3056,3058],{"class":622,"line":757},[620,3057,692],{"class":630},[620,3059,650],{"class":626},[609,3061,3064],{"className":611,"code":3062,"filename":3063,"language":614,"meta":615,"style":615},"log.set({\n  status: 500,\n  error: {\n    message: err.message,\n    code: err.code,\n    type: err.constructor.name,\n  },\n})\n","Error",[617,3065,3066,3078,3089,3098,3115,3130,3151,3155],{"__ignoreMap":615},[620,3067,3068,3070,3072,3074,3076],{"class":622,"line":623},[620,3069,907],{"class":626},[620,3071,631],{"class":630},[620,3073,912],{"class":634},[620,3075,638],{"class":626},[620,3077,1570],{"class":630},[620,3079,3080,3082,3084,3087],{"class":622,"line":653},[620,3081,3009],{"class":677},[620,3083,681],{"class":630},[620,3085,3086],{"class":804}," 500",[620,3088,2569],{"class":630},[620,3090,3091,3094,3096],{"class":622,"line":697},[620,3092,3093],{"class":677},"  error",[620,3095,681],{"class":630},[620,3097,2015],{"class":630},[620,3099,3100,3103,3105,3108,3110,3113],{"class":622,"line":737},[620,3101,3102],{"class":677},"    message",[620,3104,681],{"class":630},[620,3106,3107],{"class":626}," err",[620,3109,631],{"class":630},[620,3111,3112],{"class":626},"message",[620,3114,2569],{"class":630},[620,3116,3117,3120,3122,3124,3126,3128],{"class":622,"line":757},[620,3118,3119],{"class":677},"    code",[620,3121,681],{"class":630},[620,3123,3107],{"class":626},[620,3125,631],{"class":630},[620,3127,617],{"class":626},[620,3129,2569],{"class":630},[620,3131,3132,3135,3137,3139,3141,3144,3146,3149],{"class":622,"line":777},[620,3133,3134],{"class":677},"    type",[620,3136,681],{"class":630},[620,3138,3107],{"class":626},[620,3140,631],{"class":630},[620,3142,3143],{"class":626},"constructor",[620,3145,631],{"class":630},[620,3147,3148],{"class":626},"name",[620,3150,2569],{"class":630},[620,3152,3153],{"class":622,"line":1006},[620,3154,2909],{"class":630},[620,3156,3157,3159],{"class":622,"line":1502},[620,3158,692],{"class":630},[620,3160,650],{"class":626},[598,3162,513],{"id":3163},"best-practices",[1350,3165,3167],{"id":3166},"use-meaningful-keys","Use Meaningful Keys",[609,3169,3172],{"className":611,"code":3170,"filename":3171,"language":614,"meta":615,"style":615},"\u002F\u002F Avoid generic keys\nlog.set({ data: { id: 123 } })\n\n\u002F\u002F Use specific, descriptive keys\nlog.set({ order: { id: 123, status: 'pending' } })\n","server\u002Fapi\u002Forders.post.ts",[617,3173,3174,3179,3211,3215,3220],{"__ignoreMap":615},[620,3175,3176],{"class":622,"line":623},[620,3177,3178],{"class":2146},"\u002F\u002F Avoid generic keys\n",[620,3180,3181,3183,3185,3187,3189,3191,3194,3196,3198,3200,3202,3205,3207,3209],{"class":622,"line":653},[620,3182,907],{"class":626},[620,3184,631],{"class":630},[620,3186,912],{"class":634},[620,3188,638],{"class":626},[620,3190,917],{"class":630},[620,3192,3193],{"class":677}," data",[620,3195,681],{"class":630},[620,3197,674],{"class":630},[620,3199,926],{"class":677},[620,3201,681],{"class":630},[620,3203,3204],{"class":804}," 123",[620,3206,732],{"class":630},[620,3208,732],{"class":630},[620,3210,650],{"class":626},[620,3212,3213],{"class":622,"line":697},[620,3214,881],{"emptyLinePlaceholder":880},[620,3216,3217],{"class":622,"line":737},[620,3218,3219],{"class":2146},"\u002F\u002F Use specific, descriptive keys\n",[620,3221,3222,3224,3226,3228,3230,3232,3235,3237,3239,3241,3243,3245,3247,3249,3251,3253,3256,3258,3260,3262],{"class":622,"line":757},[620,3223,907],{"class":626},[620,3225,631],{"class":630},[620,3227,912],{"class":634},[620,3229,638],{"class":626},[620,3231,917],{"class":630},[620,3233,3234],{"class":677}," order",[620,3236,681],{"class":630},[620,3238,674],{"class":630},[620,3240,926],{"class":677},[620,3242,681],{"class":630},[620,3244,3204],{"class":804},[620,3246,671],{"class":630},[620,3248,1040],{"class":677},[620,3250,681],{"class":630},[620,3252,724],{"class":630},[620,3254,3255],{"class":644},"pending",[620,3257,641],{"class":630},[620,3259,732],{"class":630},[620,3261,732],{"class":630},[620,3263,650],{"class":626},[1350,3265,3267],{"id":3266},"group-related-data","Group Related Data",[609,3269,3271],{"className":611,"code":3270,"filename":849,"language":614,"meta":615,"style":615},"\u002F\u002F Flat structure is hard to read\nlog.set({\n  userId: 1,\n  userEmail: 'a@b.com',\n  cartId: 2,\n  cartTotal: 100,\n})\n\n\u002F\u002F Grouped structure is clearer\nlog.set({\n  user: { id: 1, email: 'a@b.com' },\n  cart: { id: 2, total: 100 },\n})\n",[617,3272,3273,3278,3290,3300,3316,3328,3340,3346,3350,3355,3367,3397,3421],{"__ignoreMap":615},[620,3274,3275],{"class":622,"line":623},[620,3276,3277],{"class":2146},"\u002F\u002F Flat structure is hard to read\n",[620,3279,3280,3282,3284,3286,3288],{"class":622,"line":653},[620,3281,907],{"class":626},[620,3283,631],{"class":630},[620,3285,912],{"class":634},[620,3287,638],{"class":626},[620,3289,1570],{"class":630},[620,3291,3292,3294,3296,3298],{"class":622,"line":697},[620,3293,2737],{"class":677},[620,3295,681],{"class":630},[620,3297,931],{"class":804},[620,3299,2569],{"class":630},[620,3301,3302,3305,3307,3309,3312,3314],{"class":622,"line":737},[620,3303,3304],{"class":677},"  userEmail",[620,3306,681],{"class":630},[620,3308,724],{"class":630},[620,3310,3311],{"class":644},"a@b.com",[620,3313,641],{"class":630},[620,3315,2569],{"class":630},[620,3317,3318,3321,3323,3326],{"class":622,"line":757},[620,3319,3320],{"class":677},"  cartId",[620,3322,681],{"class":630},[620,3324,3325],{"class":804}," 2",[620,3327,2569],{"class":630},[620,3329,3330,3333,3335,3338],{"class":622,"line":777},[620,3331,3332],{"class":677},"  cartTotal",[620,3334,681],{"class":630},[620,3336,3337],{"class":804}," 100",[620,3339,2569],{"class":630},[620,3341,3342,3344],{"class":622,"line":1006},[620,3343,692],{"class":630},[620,3345,650],{"class":626},[620,3347,3348],{"class":622,"line":1502},[620,3349,881],{"emptyLinePlaceholder":880},[620,3351,3352],{"class":622,"line":1531},[620,3353,3354],{"class":2146},"\u002F\u002F Grouped structure is clearer\n",[620,3356,3357,3359,3361,3363,3365],{"class":622,"line":1536},[620,3358,907],{"class":626},[620,3360,631],{"class":630},[620,3362,912],{"class":634},[620,3364,638],{"class":626},[620,3366,1570],{"class":630},[620,3368,3369,3372,3374,3376,3378,3380,3382,3384,3386,3388,3390,3392,3394],{"class":622,"line":1550},[620,3370,3371],{"class":677},"  user",[620,3373,681],{"class":630},[620,3375,674],{"class":630},[620,3377,926],{"class":677},[620,3379,681],{"class":630},[620,3381,931],{"class":804},[620,3383,671],{"class":630},[620,3385,1604],{"class":677},[620,3387,681],{"class":630},[620,3389,724],{"class":630},[620,3391,3311],{"class":644},[620,3393,641],{"class":630},[620,3395,3396],{"class":630}," },\n",[620,3398,3399,3401,3403,3405,3407,3409,3411,3413,3415,3417,3419],{"class":622,"line":1573},[620,3400,2832],{"class":677},[620,3402,681],{"class":630},[620,3404,674],{"class":630},[620,3406,926],{"class":677},[620,3408,681],{"class":630},[620,3410,3325],{"class":804},[620,3412,671],{"class":630},[620,3414,992],{"class":677},[620,3416,681],{"class":630},[620,3418,3337],{"class":804},[620,3420,3396],{"class":630},[620,3422,3423,3425],{"class":622,"line":1633},[620,3424,692],{"class":630},[620,3426,650],{"class":626},[1350,3428,3430],{"id":3429},"add-context-incrementally","Add Context Incrementally",[534,3432,3433,3434,3437],{},"Call ",[617,3435,3436],{},"log.set()"," as you gather information:",[844,3439,3440,3747],{},[609,3441,3443],{"className":611,"code":3442,"filename":849,"language":614,"meta":615,"style":615},"import { useLogger } from 'evlog'\n\nexport default defineEventHandler(async (event) => {\n  const log = useLogger(event)\n\n  const user = await getUser(event)\n  log.set({ user: { id: user.id, plan: user.plan } })\n\n  const cart = await getCart(user.id)\n  log.set({ cart: { items: cart.items.length, total: cart.total } })\n\n  const payment = await processPayment(cart)\n  log.set({ payment: { method: payment.method, status: payment.status } })\n\n  return { success: true }\n})\n",[617,3444,3445,3463,3467,3489,3505,3509,3528,3574,3578,3602,3652,3656,3676,3723,3727,3741],{"__ignoreMap":615},[620,3446,3447,3449,3451,3453,3455,3457,3459,3461],{"class":622,"line":623},[620,3448,857],{"class":856},[620,3450,674],{"class":630},[620,3452,862],{"class":626},[620,3454,732],{"class":630},[620,3456,867],{"class":856},[620,3458,724],{"class":630},[620,3460,872],{"class":644},[620,3462,875],{"class":630},[620,3464,3465],{"class":622,"line":653},[620,3466,881],{"emptyLinePlaceholder":880},[620,3468,3469,3471,3473,3475,3477,3479,3481,3483,3485,3487],{"class":622,"line":697},[620,3470,1989],{"class":856},[620,3472,1992],{"class":856},[620,3474,1995],{"class":634},[620,3476,638],{"class":626},[620,3478,2000],{"class":886},[620,3480,1556],{"class":630},[620,3482,2006],{"class":2005},[620,3484,2009],{"class":630},[620,3486,2012],{"class":886},[620,3488,2015],{"class":630},[620,3490,3491,3493,3495,3497,3499,3501,3503],{"class":622,"line":737},[620,3492,2020],{"class":886},[620,3494,2023],{"class":626},[620,3496,2026],{"class":630},[620,3498,862],{"class":634},[620,3500,638],{"class":677},[620,3502,2006],{"class":626},[620,3504,650],{"class":677},[620,3506,3507],{"class":622,"line":757},[620,3508,881],{"emptyLinePlaceholder":880},[620,3510,3511,3513,3515,3517,3519,3522,3524,3526],{"class":622,"line":777},[620,3512,2020],{"class":886},[620,3514,684],{"class":626},[620,3516,2026],{"class":630},[620,3518,1480],{"class":856},[620,3520,3521],{"class":634}," getUser",[620,3523,638],{"class":677},[620,3525,2006],{"class":626},[620,3527,650],{"class":677},[620,3529,3530,3532,3534,3536,3538,3540,3542,3544,3546,3548,3550,3552,3554,3556,3558,3560,3562,3564,3566,3568,3570,3572],{"class":622,"line":1006},[620,3531,2043],{"class":626},[620,3533,631],{"class":630},[620,3535,912],{"class":634},[620,3537,638],{"class":677},[620,3539,917],{"class":630},[620,3541,684],{"class":677},[620,3543,681],{"class":630},[620,3545,674],{"class":630},[620,3547,926],{"class":677},[620,3549,681],{"class":630},[620,3551,684],{"class":626},[620,3553,631],{"class":630},[620,3555,1599],{"class":626},[620,3557,671],{"class":630},[620,3559,936],{"class":677},[620,3561,681],{"class":630},[620,3563,684],{"class":626},[620,3565,631],{"class":630},[620,3567,1626],{"class":626},[620,3569,732],{"class":630},[620,3571,732],{"class":630},[620,3573,650],{"class":677},[620,3575,3576],{"class":622,"line":1502},[620,3577,881],{"emptyLinePlaceholder":880},[620,3579,3580,3582,3584,3586,3588,3591,3593,3596,3598,3600],{"class":622,"line":1531},[620,3581,2020],{"class":886},[620,3583,966],{"class":626},[620,3585,2026],{"class":630},[620,3587,1480],{"class":856},[620,3589,3590],{"class":634}," getCart",[620,3592,638],{"class":677},[620,3594,3595],{"class":626},"user",[620,3597,631],{"class":630},[620,3599,1599],{"class":626},[620,3601,650],{"class":677},[620,3603,3604,3606,3608,3610,3612,3614,3616,3618,3620,3622,3624,3626,3628,3630,3632,3634,3636,3638,3640,3642,3644,3646,3648,3650],{"class":622,"line":1536},[620,3605,2043],{"class":626},[620,3607,631],{"class":630},[620,3609,912],{"class":634},[620,3611,638],{"class":677},[620,3613,917],{"class":630},[620,3615,966],{"class":677},[620,3617,681],{"class":630},[620,3619,674],{"class":630},[620,3621,982],{"class":677},[620,3623,681],{"class":630},[620,3625,966],{"class":626},[620,3627,631],{"class":630},[620,3629,2865],{"class":626},[620,3631,631],{"class":630},[620,3633,2870],{"class":626},[620,3635,671],{"class":630},[620,3637,992],{"class":677},[620,3639,681],{"class":630},[620,3641,966],{"class":626},[620,3643,631],{"class":630},[620,3645,2886],{"class":626},[620,3647,732],{"class":630},[620,3649,732],{"class":630},[620,3651,650],{"class":677},[620,3653,3654],{"class":622,"line":1550},[620,3655,881],{"emptyLinePlaceholder":880},[620,3657,3658,3660,3662,3664,3666,3669,3671,3674],{"class":622,"line":1573},[620,3659,2020],{"class":886},[620,3661,1019],{"class":626},[620,3663,2026],{"class":630},[620,3665,1480],{"class":856},[620,3667,3668],{"class":634}," processPayment",[620,3670,638],{"class":677},[620,3672,3673],{"class":626},"cart",[620,3675,650],{"class":677},[620,3677,3678,3680,3682,3684,3686,3688,3690,3692,3694,3696,3698,3700,3702,3704,3706,3708,3710,3712,3714,3717,3719,3721],{"class":622,"line":1633},[620,3679,2043],{"class":626},[620,3681,631],{"class":630},[620,3683,912],{"class":634},[620,3685,638],{"class":677},[620,3687,917],{"class":630},[620,3689,1019],{"class":677},[620,3691,681],{"class":630},[620,3693,674],{"class":630},[620,3695,1026],{"class":677},[620,3697,681],{"class":630},[620,3699,1019],{"class":626},[620,3701,631],{"class":630},[620,3703,1713],{"class":626},[620,3705,671],{"class":630},[620,3707,1040],{"class":677},[620,3709,681],{"class":630},[620,3711,1019],{"class":626},[620,3713,631],{"class":630},[620,3715,3716],{"class":626},"status",[620,3718,732],{"class":630},[620,3720,732],{"class":630},[620,3722,650],{"class":677},[620,3724,3725],{"class":622,"line":1642},[620,3726,881],{"emptyLinePlaceholder":880},[620,3728,3729,3731,3733,3735,3737,3739],{"class":622,"line":1648},[620,3730,2128],{"class":856},[620,3732,674],{"class":630},[620,3734,2133],{"class":677},[620,3736,681],{"class":630},[620,3738,2139],{"class":2138},[620,3740,1279],{"class":630},[620,3742,3743,3745],{"class":622,"line":1653},[620,3744,692],{"class":630},[620,3746,650],{"class":626},[609,3748,3750],{"className":1229,"code":3749,"filename":1231,"language":1232,"meta":615,"style":615},"[INFO] POST \u002Fapi\u002Fcheckout (456ms)\n  user: { id: 1, plan: 'pro' }\n  cart: { items: 3, total: 9999 }\n  payment: { method: 'card', status: 'success' }\n  status: 200\n",[617,3751,3752,3767,3787,3803,3829],{"__ignoreMap":615},[620,3753,3754,3756,3758,3760,3762,3765],{"class":622,"line":623},[620,3755,1239],{"class":630},[620,3757,1242],{"class":626},[620,3759,1245],{"class":630},[620,3761,1248],{"class":626},[620,3763,3764],{"class":1251},"456ms",[620,3766,650],{"class":626},[620,3768,3769,3771,3773,3775,3777,3779,3781,3783,3785],{"class":622,"line":653},[620,3770,1259],{"class":1251},[620,3772,674],{"class":644},[620,3774,1264],{"class":644},[620,3776,1267],{"class":644},[620,3778,1270],{"class":644},[620,3780,724],{"class":630},[620,3782,943],{"class":644},[620,3784,641],{"class":630},[620,3786,1279],{"class":644},[620,3788,3789,3791,3793,3795,3797,3799,3801],{"class":622,"line":697},[620,3790,1284],{"class":1251},[620,3792,674],{"class":644},[620,3794,1294],{"class":644},[620,3796,1297],{"class":644},[620,3798,1300],{"class":644},[620,3800,997],{"class":804},[620,3802,1279],{"class":644},[620,3804,3805,3807,3809,3811,3813,3815,3817,3819,3821,3823,3825,3827],{"class":622,"line":737},[620,3806,1309],{"class":1251},[620,3808,674],{"class":644},[620,3810,1314],{"class":644},[620,3812,724],{"class":630},[620,3814,1033],{"class":644},[620,3816,641],{"class":630},[620,3818,671],{"class":644},[620,3820,1325],{"class":644},[620,3822,724],{"class":630},[620,3824,1047],{"class":644},[620,3826,641],{"class":630},[620,3828,1279],{"class":644},[620,3830,3831,3833],{"class":622,"line":757},[620,3832,1338],{"class":1251},[620,3834,1341],{"class":804},[1350,3836,3838],{"id":3837},"handle-errors-gracefully","Handle Errors Gracefully",[534,3840,3841],{},"When errors occur, the wide event still emits with error context:",[844,3843,3844,4070],{},[609,3845,3847],{"className":611,"code":3846,"filename":849,"language":614,"meta":615,"style":615},"import { useLogger } from 'evlog'\n\nexport default defineEventHandler(async (event) => {\n  const log = useLogger(event)\n\n  try {\n    const result = await processPayment(cart)\n    return result\n  } catch (err) {\n    log.set({\n      error: {\n        message: err.message,\n        code: err.code,\n        type: err.constructor.name,\n      },\n    })\n    throw err\n  }\n})\n",[617,3848,3849,3867,3871,3893,3909,3913,3920,3940,3948,3966,3979,3988,4003,4018,4037,4042,4049,4057,4063],{"__ignoreMap":615},[620,3850,3851,3853,3855,3857,3859,3861,3863,3865],{"class":622,"line":623},[620,3852,857],{"class":856},[620,3854,674],{"class":630},[620,3856,862],{"class":626},[620,3858,732],{"class":630},[620,3860,867],{"class":856},[620,3862,724],{"class":630},[620,3864,872],{"class":644},[620,3866,875],{"class":630},[620,3868,3869],{"class":622,"line":653},[620,3870,881],{"emptyLinePlaceholder":880},[620,3872,3873,3875,3877,3879,3881,3883,3885,3887,3889,3891],{"class":622,"line":697},[620,3874,1989],{"class":856},[620,3876,1992],{"class":856},[620,3878,1995],{"class":634},[620,3880,638],{"class":626},[620,3882,2000],{"class":886},[620,3884,1556],{"class":630},[620,3886,2006],{"class":2005},[620,3888,2009],{"class":630},[620,3890,2012],{"class":886},[620,3892,2015],{"class":630},[620,3894,3895,3897,3899,3901,3903,3905,3907],{"class":622,"line":737},[620,3896,2020],{"class":886},[620,3898,2023],{"class":626},[620,3900,2026],{"class":630},[620,3902,862],{"class":634},[620,3904,638],{"class":677},[620,3906,2006],{"class":626},[620,3908,650],{"class":677},[620,3910,3911],{"class":622,"line":757},[620,3912,881],{"emptyLinePlaceholder":880},[620,3914,3915,3918],{"class":622,"line":777},[620,3916,3917],{"class":856},"  try",[620,3919,2015],{"class":630},[620,3921,3922,3925,3928,3930,3932,3934,3936,3938],{"class":622,"line":1006},[620,3923,3924],{"class":886},"    const",[620,3926,3927],{"class":626}," result",[620,3929,2026],{"class":630},[620,3931,1480],{"class":856},[620,3933,3668],{"class":634},[620,3935,638],{"class":677},[620,3937,3673],{"class":626},[620,3939,650],{"class":677},[620,3941,3942,3945],{"class":622,"line":1502},[620,3943,3944],{"class":856},"    return",[620,3946,3947],{"class":626}," result\n",[620,3949,3950,3953,3956,3958,3961,3964],{"class":622,"line":1531},[620,3951,3952],{"class":630},"  }",[620,3954,3955],{"class":856}," catch",[620,3957,1556],{"class":677},[620,3959,3960],{"class":626},"err",[620,3962,3963],{"class":677},") ",[620,3965,1570],{"class":630},[620,3967,3968,3971,3973,3975,3977],{"class":622,"line":1536},[620,3969,3970],{"class":626},"    log",[620,3972,631],{"class":630},[620,3974,912],{"class":634},[620,3976,638],{"class":677},[620,3978,1570],{"class":630},[620,3980,3981,3984,3986],{"class":622,"line":1550},[620,3982,3983],{"class":677},"      error",[620,3985,681],{"class":630},[620,3987,2015],{"class":630},[620,3989,3990,3993,3995,3997,3999,4001],{"class":622,"line":1573},[620,3991,3992],{"class":677},"        message",[620,3994,681],{"class":630},[620,3996,3107],{"class":626},[620,3998,631],{"class":630},[620,4000,3112],{"class":626},[620,4002,2569],{"class":630},[620,4004,4005,4008,4010,4012,4014,4016],{"class":622,"line":1633},[620,4006,4007],{"class":677},"        code",[620,4009,681],{"class":630},[620,4011,3107],{"class":626},[620,4013,631],{"class":630},[620,4015,617],{"class":626},[620,4017,2569],{"class":630},[620,4019,4020,4023,4025,4027,4029,4031,4033,4035],{"class":622,"line":1642},[620,4021,4022],{"class":677},"        type",[620,4024,681],{"class":630},[620,4026,3107],{"class":626},[620,4028,631],{"class":630},[620,4030,3143],{"class":626},[620,4032,631],{"class":630},[620,4034,3148],{"class":626},[620,4036,2569],{"class":630},[620,4038,4039],{"class":622,"line":1648},[620,4040,4041],{"class":630},"      },\n",[620,4043,4044,4047],{"class":622,"line":1653},[620,4045,4046],{"class":630},"    }",[620,4048,650],{"class":677},[620,4050,4051,4054],{"class":622,"line":1686},[620,4052,4053],{"class":856},"    throw",[620,4055,4056],{"class":626}," err\n",[620,4058,4060],{"class":622,"line":4059},18,[620,4061,4062],{"class":630},"  }\n",[620,4064,4066,4068],{"class":622,"line":4065},19,[620,4067,692],{"class":630},[620,4069,650],{"class":626},[609,4071,4073],{"className":1229,"code":4072,"filename":1231,"language":1232,"meta":615,"style":615},"ERROR [checkout] POST \u002Fapi\u002Fcheckout 402 in 123ms\n  ├─ error: Card declined\n  │     at server\u002Fapi\u002Fcheckout.post.ts:42\n  │   ❯ 42 ┃ throw createError({ code: 'CARD_DECLINED', ... })\n  │     Why: Issuer declined the charge\n  │     Fix: Ask the customer to use another card\n  │     stack (3 frames hidden in node_modules)\n  ├─ user: id=1 plan=pro\n  └─ cart: items=3 total=9999\n",[617,4074,4075,4083,4097,4108,4131,4150,4177,4201,4217],{"__ignoreMap":615},[620,4076,4077,4080],{"class":622,"line":623},[620,4078,4079],{"class":1251},"ERROR",[620,4081,4082],{"class":626}," [checkout] POST \u002Fapi\u002Fcheckout 402 in 123ms\n",[620,4084,4085,4088,4091,4094],{"class":622,"line":653},[620,4086,4087],{"class":1251},"  ├─",[620,4089,4090],{"class":644}," error:",[620,4092,4093],{"class":644}," Card",[620,4095,4096],{"class":644}," declined\n",[620,4098,4099,4102,4105],{"class":622,"line":697},[620,4100,4101],{"class":1251},"  │",[620,4103,4104],{"class":644},"     at",[620,4106,4107],{"class":644}," server\u002Fapi\u002Fcheckout.post.ts:42\n",[620,4109,4110,4112,4115,4117,4120,4123,4126,4128],{"class":622,"line":737},[620,4111,4101],{"class":1251},[620,4113,4114],{"class":644},"   ❯",[620,4116,977],{"class":804},[620,4118,4119],{"class":644}," ┃",[620,4121,4122],{"class":644}," throw",[620,4124,4125],{"class":644}," createError",[620,4127,638],{"class":630},[620,4129,4130],{"class":626},"{ code: 'CARD_DECLINED', ... })\n",[620,4132,4133,4135,4138,4141,4144,4147],{"class":622,"line":757},[620,4134,4101],{"class":1251},[620,4136,4137],{"class":644},"     Why:",[620,4139,4140],{"class":644}," Issuer",[620,4142,4143],{"class":644}," declined",[620,4145,4146],{"class":644}," the",[620,4148,4149],{"class":644}," charge\n",[620,4151,4152,4154,4157,4160,4162,4165,4168,4171,4174],{"class":622,"line":777},[620,4153,4101],{"class":1251},[620,4155,4156],{"class":644},"     Fix:",[620,4158,4159],{"class":644}," Ask",[620,4161,4146],{"class":644},[620,4163,4164],{"class":644}," customer",[620,4166,4167],{"class":644}," to",[620,4169,4170],{"class":644}," use",[620,4172,4173],{"class":644}," another",[620,4175,4176],{"class":644}," card\n",[620,4178,4179,4181,4184,4187,4190,4193,4196,4199],{"class":622,"line":1006},[620,4180,4101],{"class":1251},[620,4182,4183],{"class":644},"     stack",[620,4185,4186],{"class":626}," (3 ",[620,4188,4189],{"class":644},"frames",[620,4191,4192],{"class":644}," hidden",[620,4194,4195],{"class":644}," in",[620,4197,4198],{"class":644}," node_modules",[620,4200,650],{"class":630},[620,4202,4203,4205,4208,4211,4214],{"class":622,"line":1502},[620,4204,4087],{"class":1251},[620,4206,4207],{"class":644}," user:",[620,4209,4210],{"class":644}," id=",[620,4212,4213],{"class":804},"1",[620,4215,4216],{"class":644}," plan=pro\n",[620,4218,4219,4222,4225,4228,4231,4234],{"class":622,"line":1531},[620,4220,4221],{"class":1251},"  └─",[620,4223,4224],{"class":644}," cart:",[620,4226,4227],{"class":644}," items=",[620,4229,4230],{"class":804},"3",[620,4232,4233],{"class":644}," total=",[620,4235,4236],{"class":804},"9999\n",[1350,4238,4240],{"id":4239},"setting-the-level-manually","Setting the Level Manually",[534,4242,4243,4246,4247,4249,4250,4253,4254,4257,4258,4260,4261,4264],{},[617,4244,4245],{},"log.error(err)"," populates the ",[617,4248,2184],{}," field with ",[617,4251,4252],{},"{ name, message, stack }"," and promotes the wide event to ",[617,4255,4256],{},"level: 'error'",". When you want to control the ",[617,4259,2184],{}," field yourself (typed error codes, no stack, or richer custom shapes), use ",[617,4262,4263],{},"log.setLevel()"," to promote the level without touching the context:",[609,4266,4268],{"className":611,"code":4267,"language":614,"meta":615,"style":615},"log.setLevel('error')\nlog.set({\n  error: {\n    code: 'PAYMENT_DECLINED',\n    reason: 'insufficient_funds',\n  },\n})\n",[617,4269,4270,4289,4301,4309,4324,4340,4344],{"__ignoreMap":615},[620,4271,4272,4274,4276,4279,4281,4283,4285,4287],{"class":622,"line":623},[620,4273,907],{"class":626},[620,4275,631],{"class":630},[620,4277,4278],{"class":634},"setLevel",[620,4280,638],{"class":626},[620,4282,641],{"class":630},[620,4284,2184],{"class":644},[620,4286,641],{"class":630},[620,4288,650],{"class":626},[620,4290,4291,4293,4295,4297,4299],{"class":622,"line":653},[620,4292,907],{"class":626},[620,4294,631],{"class":630},[620,4296,912],{"class":634},[620,4298,638],{"class":626},[620,4300,1570],{"class":630},[620,4302,4303,4305,4307],{"class":622,"line":697},[620,4304,3093],{"class":677},[620,4306,681],{"class":630},[620,4308,2015],{"class":630},[620,4310,4311,4313,4315,4317,4320,4322],{"class":622,"line":737},[620,4312,3119],{"class":677},[620,4314,681],{"class":630},[620,4316,724],{"class":630},[620,4318,4319],{"class":644},"PAYMENT_DECLINED",[620,4321,641],{"class":630},[620,4323,2569],{"class":630},[620,4325,4326,4329,4331,4333,4336,4338],{"class":622,"line":757},[620,4327,4328],{"class":677},"    reason",[620,4330,681],{"class":630},[620,4332,724],{"class":630},[620,4334,4335],{"class":644},"insufficient_funds",[620,4337,641],{"class":630},[620,4339,2569],{"class":630},[620,4341,4342],{"class":622,"line":777},[620,4343,2909],{"class":630},[620,4345,4346,4348],{"class":622,"line":1006},[620,4347,692],{"class":630},[620,4349,650],{"class":626},[534,4351,4352,4355,4356,4359,4360,4363,4364,4367,4368,4370],{},[617,4353,4354],{},"setLevel()"," accepts ",[617,4357,4358],{},"'error' | 'warn' | 'info' | 'debug'"," and wins over the level computed from ",[617,4361,4362],{},".error()"," \u002F ",[617,4365,4366],{},".warn()",". Combine it with ",[617,4369,3436],{}," to keep the wide event tidy while still routing through error-level sampling and drains.",[598,4372,4374],{"id":4373},"choose-how-the-event-is-rendered","Choose how the event is rendered",[534,4376,4377],{},"evlog automatically switches between formats based on environment: pretty in development, JSON in production. This is the default behavior, no configuration needed.",[844,4379,4380,4462],{},[609,4381,4384],{"className":1229,"code":4382,"filename":4383,"language":1232,"meta":615,"style":615},"[INFO] POST \u002Fapi\u002Fcheckout (234ms)\n  user: { id: 1, plan: 'pro' }\n  cart: { items: 3, total: 9999 }\n  payment: { method: 'card', status: 'success' }\n","Development (Pretty)",[617,4385,4386,4400,4420,4436],{"__ignoreMap":615},[620,4387,4388,4390,4392,4394,4396,4398],{"class":622,"line":623},[620,4389,1239],{"class":630},[620,4391,1242],{"class":626},[620,4393,1245],{"class":630},[620,4395,1248],{"class":626},[620,4397,1252],{"class":1251},[620,4399,650],{"class":626},[620,4401,4402,4404,4406,4408,4410,4412,4414,4416,4418],{"class":622,"line":653},[620,4403,1259],{"class":1251},[620,4405,674],{"class":644},[620,4407,1264],{"class":644},[620,4409,1267],{"class":644},[620,4411,1270],{"class":644},[620,4413,724],{"class":630},[620,4415,943],{"class":644},[620,4417,641],{"class":630},[620,4419,1279],{"class":644},[620,4421,4422,4424,4426,4428,4430,4432,4434],{"class":622,"line":697},[620,4423,1284],{"class":1251},[620,4425,674],{"class":644},[620,4427,1294],{"class":644},[620,4429,1297],{"class":644},[620,4431,1300],{"class":644},[620,4433,997],{"class":804},[620,4435,1279],{"class":644},[620,4437,4438,4440,4442,4444,4446,4448,4450,4452,4454,4456,4458,4460],{"class":622,"line":737},[620,4439,1309],{"class":1251},[620,4441,674],{"class":644},[620,4443,1314],{"class":644},[620,4445,724],{"class":630},[620,4447,1033],{"class":644},[620,4449,641],{"class":630},[620,4451,671],{"class":644},[620,4453,1325],{"class":644},[620,4455,724],{"class":630},[620,4457,1047],{"class":644},[620,4459,641],{"class":630},[620,4461,1279],{"class":644},[609,4463,4468],{"className":4464,"code":4465,"filename":4466,"language":4467,"meta":615,"style":615},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"level\": \"info\",\n  \"method\": \"POST\",\n  \"path\": \"\u002Fapi\u002Fcheckout\",\n  \"duration\": 234,\n  \"user\": { \"id\": 1, \"plan\": \"pro\" },\n  \"cart\": { \"items\": 3, \"total\": 9999 },\n  \"payment\": { \"method\": \"card\", \"status\": \"success\" }\n}\n","Production (JSON)","json",[617,4469,4470,4474,4496,4514,4532,4547,4587,4623,4668],{"__ignoreMap":615},[620,4471,4472],{"class":622,"line":623},[620,4473,1570],{"class":630},[620,4475,4476,4479,4482,4485,4487,4490,4492,4494],{"class":622,"line":653},[620,4477,4478],{"class":630},"  \"",[620,4480,4481],{"class":886},"level",[620,4483,4484],{"class":630},"\"",[620,4486,681],{"class":630},[620,4488,4489],{"class":630}," \"",[620,4491,635],{"class":644},[620,4493,4484],{"class":630},[620,4495,2569],{"class":630},[620,4497,4498,4500,4502,4504,4506,4508,4510,4512],{"class":622,"line":697},[620,4499,4478],{"class":630},[620,4501,1713],{"class":886},[620,4503,4484],{"class":630},[620,4505,681],{"class":630},[620,4507,4489],{"class":630},[620,4509,1812],{"class":644},[620,4511,4484],{"class":630},[620,4513,2569],{"class":630},[620,4515,4516,4518,4520,4522,4524,4526,4528,4530],{"class":622,"line":737},[620,4517,4478],{"class":630},[620,4519,1717],{"class":886},[620,4521,4484],{"class":630},[620,4523,681],{"class":630},[620,4525,4489],{"class":630},[620,4527,1826],{"class":644},[620,4529,4484],{"class":630},[620,4531,2569],{"class":630},[620,4533,4534,4536,4539,4541,4543,4545],{"class":622,"line":757},[620,4535,4478],{"class":630},[620,4537,4538],{"class":886},"duration",[620,4540,4484],{"class":630},[620,4542,681],{"class":630},[620,4544,805],{"class":804},[620,4546,2569],{"class":630},[620,4548,4549,4551,4553,4555,4557,4559,4561,4563,4565,4567,4569,4571,4573,4575,4577,4579,4581,4583,4585],{"class":622,"line":777},[620,4550,4478],{"class":630},[620,4552,3595],{"class":886},[620,4554,4484],{"class":630},[620,4556,681],{"class":630},[620,4558,674],{"class":630},[620,4560,4489],{"class":630},[620,4562,1599],{"class":1251},[620,4564,4484],{"class":630},[620,4566,681],{"class":630},[620,4568,931],{"class":804},[620,4570,671],{"class":630},[620,4572,4489],{"class":630},[620,4574,1626],{"class":1251},[620,4576,4484],{"class":630},[620,4578,681],{"class":630},[620,4580,4489],{"class":630},[620,4582,943],{"class":644},[620,4584,4484],{"class":630},[620,4586,3396],{"class":630},[620,4588,4589,4591,4593,4595,4597,4599,4601,4603,4605,4607,4609,4611,4613,4615,4617,4619,4621],{"class":622,"line":1006},[620,4590,4478],{"class":630},[620,4592,3673],{"class":886},[620,4594,4484],{"class":630},[620,4596,681],{"class":630},[620,4598,674],{"class":630},[620,4600,4489],{"class":630},[620,4602,2865],{"class":1251},[620,4604,4484],{"class":630},[620,4606,681],{"class":630},[620,4608,987],{"class":804},[620,4610,671],{"class":630},[620,4612,4489],{"class":630},[620,4614,2886],{"class":1251},[620,4616,4484],{"class":630},[620,4618,681],{"class":630},[620,4620,997],{"class":804},[620,4622,3396],{"class":630},[620,4624,4625,4627,4630,4632,4634,4636,4638,4640,4642,4644,4646,4648,4650,4652,4654,4656,4658,4660,4662,4664,4666],{"class":622,"line":1502},[620,4626,4478],{"class":630},[620,4628,4629],{"class":886},"payment",[620,4631,4484],{"class":630},[620,4633,681],{"class":630},[620,4635,674],{"class":630},[620,4637,4489],{"class":630},[620,4639,1713],{"class":1251},[620,4641,4484],{"class":630},[620,4643,681],{"class":630},[620,4645,4489],{"class":630},[620,4647,1033],{"class":644},[620,4649,4484],{"class":630},[620,4651,671],{"class":630},[620,4653,4489],{"class":630},[620,4655,3716],{"class":1251},[620,4657,4484],{"class":630},[620,4659,681],{"class":630},[620,4661,4489],{"class":630},[620,4663,1047],{"class":644},[620,4665,4484],{"class":630},[620,4667,1279],{"class":630},[620,4669,4670],{"class":622,"line":1531},[620,4671,1645],{"class":630},[598,4673,4675],{"id":4674},"next-steps","Next Steps",[560,4677,4678,4683,4688,4693],{},[563,4679,4680,4682],{},[544,4681,39],{"href":40}," - Fire-and-forget logs when you don't need context accumulation",[563,4684,4685,4687],{},[544,4686,68],{"href":69}," - Add compile-time type safety to your wide events",[563,4689,4690,4692],{},[544,4691,49],{"href":50}," - Errors with actionable context",[563,4694,4695,4697],{},[544,4696,217],{"href":222}," - Auto-managed request logging per framework",[4699,4700,4701],"style",{},"html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}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 .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 .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}",{"title":615,"searchDepth":653,"depth":653,"links":4703},[4704,4705,4713,4716,4722,4729,4730],{"id":600,"depth":653,"text":601},{"id":1347,"depth":653,"text":1348,"children":4706},[4707,4709,4711],{"id":1352,"depth":697,"text":4708},"createLogger (General Purpose)",{"id":1697,"depth":697,"text":4710},"createRequestLogger (HTTP Contexts)",{"id":1946,"depth":697,"text":4712},"useLogger (Retrieving the Request Logger)",{"id":2164,"depth":653,"text":2165,"children":4714},[4715],{"id":2235,"depth":697,"text":2238},{"id":2479,"depth":653,"text":2480,"children":4717},[4718,4719,4720,4721],{"id":2496,"depth":697,"text":2497},{"id":2711,"depth":697,"text":2712},{"id":2806,"depth":697,"text":2807},{"id":2980,"depth":697,"text":2981},{"id":3163,"depth":653,"text":513,"children":4723},[4724,4725,4726,4727,4728],{"id":3166,"depth":697,"text":3167},{"id":3266,"depth":697,"text":3267},{"id":3429,"depth":697,"text":3430},{"id":3837,"depth":697,"text":3838},{"id":4239,"depth":697,"text":4240},{"id":4373,"depth":653,"text":4374},{"id":4674,"depth":653,"text":4675},"Accumulate context over any unit of work and emit a single comprehensive event. Works for HTTP requests, scripts, background jobs, queue workers, and workflows.","md",[4734,4736],{"label":49,"icon":52,"to":50,"color":540,"variant":4735},"subtle",{"label":513,"icon":376,"to":514,"color":540,"variant":4735},{},{"icon":47},{"title":44,"description":4731},"_-MHW1qSpHWdAODh5k7p-pA7X9xHWh6tilXG9b3-uRQ",[4742,4744],{"title":39,"path":40,"stem":41,"description":4743,"icon":42,"children":-1},"evlog's general-purpose logger, a drop-in for console.log, pino, or consola, with the same levels, drains, redaction, and output as wide events.",{"title":49,"path":50,"stem":51,"description":4745,"icon":52,"children":-1},"Create errors that explain why they occurred and how to fix them. Add actionable context with why, fix, and link fields for humans and AI agents.",1786793467405]