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