[{"data":1,"prerenderedAt":4747},["ShallowReactive",2],{"navigation_docs":3,"-learn-wide-events":529,"-learn-wide-events-surround":4742},[4,29,76,122,304,436,495],{"title":5,"path":6,"stem":7,"children":8,"page":28},"Start","\u002Fstart","1.start",[9,13,18,23],{"title":10,"path":11,"stem":12},"Introduction","\u002Fstart\u002Fintroduction","1.start\u002F1.introduction",{"title":14,"path":15,"stem":16,"icon":17},"Why start with evlog","\u002Fstart\u002Fwhy-evlog","1.start\u002F2.why-evlog","i-lucide-rocket",{"title":19,"path":20,"stem":21,"icon":22},"Installation","\u002Fstart\u002Finstallation","1.start\u002F3.installation","i-lucide-download",{"title":24,"path":25,"stem":26,"icon":27},"Quick Start","\u002Fstart\u002Fquick-start","1.start\u002F4.quick-start","i-lucide-zap",false,{"title":30,"path":31,"stem":32,"children":33,"page":28},"Learn","\u002Flearn","2.learn",[34,38,43,48,53,58,62,67,72],{"title":35,"path":36,"stem":37},"Learn evlog","\u002Flearn\u002Foverview","2.learn\u002F0.overview",{"title":39,"path":40,"stem":41,"icon":42},"Simple Logging","\u002Flearn\u002Fsimple-logging","2.learn\u002F1.simple-logging","i-lucide-terminal",{"title":44,"path":45,"stem":46,"icon":47},"Wide Events","\u002Flearn\u002Fwide-events","2.learn\u002F2.wide-events","i-lucide-layers",{"title":49,"path":50,"stem":51,"icon":52},"Structured Errors","\u002Flearn\u002Fstructured-errors","2.learn\u002F3.structured-errors","i-lucide-shield-alert",{"title":54,"path":55,"stem":56,"icon":57},"Lifecycle","\u002Flearn\u002Flifecycle","2.learn\u002F4.lifecycle","i-lucide-arrow-right-left",{"title":59,"path":60,"stem":61},"Sampling","\u002Flearn\u002Fsampling","2.learn\u002F5.sampling",{"title":63,"path":64,"stem":65,"icon":66},"Auto-Redaction","\u002Flearn\u002Fredaction","2.learn\u002F6.redaction","i-lucide-eye-off",{"title":68,"path":69,"stem":70,"icon":71},"Typed Fields","\u002Flearn\u002Ftyped-fields","2.learn\u002F7.typed-fields","i-simple-icons-typescript",{"title":73,"path":74,"stem":75},"Catalogs","\u002Flearn\u002Fcatalogs","2.learn\u002F8.catalogs",{"title":77,"path":78,"stem":79,"children":80,"page":28},"CLI","\u002Fcli","3.cli",[81,85,90,95,99,103,108,113,118],{"title":82,"path":83,"stem":84},"evlog CLI","\u002Fcli\u002Foverview","3.cli\u002F0.overview",{"title":86,"path":87,"stem":88,"icon":89},"init","\u002Fcli\u002Finit","3.cli\u002F1.init","i-lucide-wand-sparkles",{"title":91,"path":92,"stem":93,"icon":94},"map","\u002Fcli\u002Fmap","3.cli\u002F2.map","i-lucide-radar",{"title":96,"path":97,"stem":98},"Map rules","\u002Fcli\u002Frules","3.cli\u002F3.rules",{"title":100,"path":101,"stem":102},"Map scoring","\u002Fcli\u002Fscoring","3.cli\u002F4.scoring",{"title":104,"path":105,"stem":106,"icon":107},"CI","\u002Fcli\u002Fci","3.cli\u002F5.ci","i-lucide-git-pull-request",{"title":109,"path":110,"stem":111,"icon":112},"doctor","\u002Fcli\u002Fdoctor","3.cli\u002F6.doctor","i-lucide-stethoscope",{"title":114,"path":115,"stem":116,"icon":117},"telemetry","\u002Fcli\u002Ftelemetry","3.cli\u002F7.telemetry","i-lucide-bar-chart-3",{"title":119,"path":120,"stem":121},"evlog agents","\u002Fcli\u002Fagents","3.cli\u002F8.agents",{"title":123,"path":124,"stem":125,"children":126,"page":28},"Integrate","\u002Fintegrate","4.integrate",[127,132,216],{"title":128,"path":129,"stem":130,"icon":131},"Overview","\u002Fintegrate\u002Foverview","4.integrate\u002F0.overview","i-lucide-plug",{"title":133,"path":134,"stem":135,"children":136,"page":28},"Adapters","\u002Fintegrate\u002Fadapters","4.integrate\u002Fadapters",[137,141,171,196],{"title":128,"path":138,"stem":139,"icon":140},"\u002Fintegrate\u002Fadapters\u002Foverview","4.integrate\u002Fadapters\u002F01.overview","i-lucide-list",{"title":142,"path":143,"stem":144,"children":145,"page":28},"Cloud","\u002Fintegrate\u002Fadapters\u002Fcloud","4.integrate\u002Fadapters\u002Fcloud",[146,151,156,161,166],{"title":147,"path":148,"stem":149,"icon":150},"Axiom","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Faxiom","4.integrate\u002Fadapters\u002Fcloud\u002F01.axiom","i-custom-axiom",{"title":152,"path":153,"stem":154,"icon":155},"PostHog","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fposthog","4.integrate\u002Fadapters\u002Fcloud\u002F02.posthog","i-simple-icons-posthog",{"title":157,"path":158,"stem":159,"icon":160},"Sentry","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fsentry","4.integrate\u002Fadapters\u002Fcloud\u002F03.sentry","i-simple-icons-sentry",{"title":162,"path":163,"stem":164,"icon":165},"Better Stack","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fbetter-stack","4.integrate\u002Fadapters\u002Fcloud\u002F04.better-stack","i-simple-icons-betterstack",{"title":167,"path":168,"stem":169,"icon":170},"Datadog","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fdatadog","4.integrate\u002Fadapters\u002Fcloud\u002F05.datadog","i-simple-icons-datadog",{"title":172,"path":173,"stem":174,"children":175,"page":28},"Cloud or Self-Hosted","\u002Fintegrate\u002Fadapters\u002Fhybrid","4.integrate\u002Fadapters\u002Fhybrid",[176,181,186,191],{"title":177,"path":178,"stem":179,"icon":180},"Grafana Loki","\u002Fintegrate\u002Fadapters\u002Fhybrid\u002Floki","4.integrate\u002Fadapters\u002Fhybrid\u002F01.loki","i-simple-icons-grafana",{"title":182,"path":183,"stem":184,"icon":185},"ClickHouse","\u002Fintegrate\u002Fadapters\u002Fhybrid\u002Fclickhouse","4.integrate\u002Fadapters\u002Fhybrid\u002F02.clickhouse","i-simple-icons-clickhouse",{"title":187,"path":188,"stem":189,"icon":190},"OTLP","\u002Fintegrate\u002Fadapters\u002Fhybrid\u002Fotlp","4.integrate\u002Fadapters\u002Fhybrid\u002F03.otlp","i-simple-icons-opentelemetry",{"title":192,"path":193,"stem":194,"icon":195},"HyperDX","\u002Fintegrate\u002Fadapters\u002Fhybrid\u002Fhyperdx","4.integrate\u002Fadapters\u002Fhybrid\u002F04.hyperdx","i-custom-hyperdx",{"title":197,"path":198,"stem":199,"children":200,"page":28},"Self-Hosted","\u002Fintegrate\u002Fadapters\u002Fself-hosted","4.integrate\u002Fadapters\u002Fself-hosted",[201,206,211],{"title":202,"path":203,"stem":204,"icon":205},"File System","\u002Fintegrate\u002Fadapters\u002Fself-hosted\u002Ffs","4.integrate\u002Fadapters\u002Fself-hosted\u002F01.fs","i-lucide-hard-drive",{"title":207,"path":208,"stem":209,"icon":210},"NuxtHub","\u002Fintegrate\u002Fadapters\u002Fself-hosted\u002Fnuxthub","4.integrate\u002Fadapters\u002Fself-hosted\u002F02.nuxthub","i-simple-icons-nuxt",{"title":212,"path":213,"stem":214,"icon":215},"Memory","\u002Fintegrate\u002Fadapters\u002Fself-hosted\u002Fmemory","4.integrate\u002Fadapters\u002Fself-hosted\u002F03.memory","i-lucide-cpu",{"title":217,"path":218,"stem":219,"children":220,"page":28},"Frameworks","\u002Fintegrate\u002Fframeworks","4.integrate\u002Fframeworks",[221,225,230,235,240,245,250,255,260,265,270,275,280,285,289,294,299],{"title":128,"path":222,"stem":223,"icon":224},"\u002Fintegrate\u002Fframeworks\u002Foverview","4.integrate\u002Fframeworks\u002F00.overview","i-lucide-layout-grid",{"title":226,"path":227,"stem":228,"icon":229},"Nuxt","\u002Fintegrate\u002Fframeworks\u002Fnuxt","4.integrate\u002Fframeworks\u002F01.nuxt","i-simple-icons-nuxtdotjs",{"title":231,"path":232,"stem":233,"icon":234},"Next.js","\u002Fintegrate\u002Fframeworks\u002Fnextjs","4.integrate\u002Fframeworks\u002F02.nextjs","i-simple-icons-nextdotjs",{"title":236,"path":237,"stem":238,"icon":239},"SvelteKit","\u002Fintegrate\u002Fframeworks\u002Fsveltekit","4.integrate\u002Fframeworks\u002F03.sveltekit","i-simple-icons-svelte",{"title":241,"path":242,"stem":243,"icon":244},"Nitro","\u002Fintegrate\u002Fframeworks\u002Fnitro","4.integrate\u002Fframeworks\u002F04.nitro","i-custom-nitro",{"title":246,"path":247,"stem":248,"icon":249},"TanStack Start","\u002Fintegrate\u002Fframeworks\u002Ftanstack-start","4.integrate\u002Fframeworks\u002F05.tanstack-start","i-custom-tanstack",{"title":251,"path":252,"stem":253,"icon":254},"NestJS","\u002Fintegrate\u002Fframeworks\u002Fnestjs","4.integrate\u002Fframeworks\u002F06.nestjs","i-simple-icons-nestjs",{"title":256,"path":257,"stem":258,"icon":259},"Express","\u002Fintegrate\u002Fframeworks\u002Fexpress","4.integrate\u002Fframeworks\u002F07.express","i-simple-icons-express",{"title":261,"path":262,"stem":263,"icon":264},"Hono","\u002Fintegrate\u002Fframeworks\u002Fhono","4.integrate\u002Fframeworks\u002F08.hono","i-simple-icons-hono",{"title":266,"path":267,"stem":268,"icon":269},"Fastify","\u002Fintegrate\u002Fframeworks\u002Ffastify","4.integrate\u002Fframeworks\u002F09.fastify","i-simple-icons-fastify",{"title":271,"path":272,"stem":273,"icon":274},"Elysia","\u002Fintegrate\u002Fframeworks\u002Felysia","4.integrate\u002Fframeworks\u002F10.elysia","i-custom-elysia",{"title":276,"path":277,"stem":278,"icon":279},"React Router","\u002Fintegrate\u002Fframeworks\u002Freact-router","4.integrate\u002Fframeworks\u002F11.react-router","i-custom-reactrouter",{"title":281,"path":282,"stem":283,"icon":284},"Cloudflare Workers","\u002Fintegrate\u002Fframeworks\u002Fcloudflare-workers","4.integrate\u002Fframeworks\u002F12.cloudflare-workers","i-simple-icons-cloudflare",{"title":286,"path":287,"stem":288,"icon":71},"Standalone","\u002Fintegrate\u002Fframeworks\u002Fstandalone","4.integrate\u002Fframeworks\u002F13.standalone",{"title":290,"path":291,"stem":292,"icon":293},"Astro","\u002Fintegrate\u002Fframeworks\u002Fastro","4.integrate\u002Fframeworks\u002F14.astro","i-simple-icons-astro",{"title":295,"path":296,"stem":297,"icon":298},"oRPC","\u002Fintegrate\u002Fframeworks\u002Forpc","4.integrate\u002Fframeworks\u002F15.orpc","i-lucide-network",{"title":300,"path":301,"stem":302,"icon":303},"AWS Lambda","\u002Fintegrate\u002Fframeworks\u002Faws-lambda","4.integrate\u002Fframeworks\u002F16.aws-lambda","i-custom-lambda",{"title":305,"path":306,"stem":307,"children":308,"page":28},"Use Cases","\u002Fuse-cases","5.use-cases",[309,312,317,346,374,407,427,432],{"title":305,"path":310,"stem":311},"\u002Fuse-cases\u002Foverview","5.use-cases\u002F0.overview",{"title":313,"path":314,"stem":315,"icon":316},"Client Logging","\u002Fuse-cases\u002Fclient-logging","5.use-cases\u002F1.client-logging","i-lucide-monitor",{"title":318,"icon":319,"path":320,"stem":321,"children":322,"page":28},"AI SDK","i-simple-icons-vercel","\u002Fuse-cases\u002Fai-sdk","5.use-cases\u002F2.ai-sdk",[323,326,331,336,341],{"title":128,"path":324,"stem":325,"icon":140},"\u002Fuse-cases\u002Fai-sdk\u002Foverview","5.use-cases\u002F2.ai-sdk\u002F01.overview",{"title":327,"path":328,"stem":329,"icon":330},"Usage","\u002Fuse-cases\u002Fai-sdk\u002Fusage","5.use-cases\u002F2.ai-sdk\u002F02.usage","i-lucide-code",{"title":332,"path":333,"stem":334,"icon":335},"Options","\u002Fuse-cases\u002Fai-sdk\u002Foptions","5.use-cases\u002F2.ai-sdk\u002F03.options","i-lucide-sliders",{"title":337,"path":338,"stem":339,"icon":340},"Metadata","\u002Fuse-cases\u002Fai-sdk\u002Fmetadata","5.use-cases\u002F2.ai-sdk\u002F04.metadata","i-lucide-database",{"title":342,"path":343,"stem":344,"icon":345},"Telemetry","\u002Fuse-cases\u002Fai-sdk\u002Ftelemetry","5.use-cases\u002F2.ai-sdk\u002F05.telemetry","i-lucide-activity",{"title":347,"icon":348,"path":349,"stem":350,"children":351,"page":28},"Better Auth","i-simple-icons-betterauth","\u002Fuse-cases\u002Fbetter-auth","5.use-cases\u002F3.better-auth",[352,355,360,365,369],{"title":128,"path":353,"stem":354,"icon":140},"\u002Fuse-cases\u002Fbetter-auth\u002Foverview","5.use-cases\u002F3.better-auth\u002F01.overview",{"title":356,"path":357,"stem":358,"icon":359},"Identify User","\u002Fuse-cases\u002Fbetter-auth\u002Fidentify-user","5.use-cases\u002F3.better-auth\u002F02.identify-user","i-lucide-user-check",{"title":361,"path":362,"stem":363,"icon":364},"Middleware","\u002Fuse-cases\u002Fbetter-auth\u002Fmiddleware","5.use-cases\u002F3.better-auth\u002F03.middleware","i-lucide-shield",{"title":366,"path":367,"stem":368,"icon":316},"Client Sync","\u002Fuse-cases\u002Fbetter-auth\u002Fclient-sync","5.use-cases\u002F3.better-auth\u002F04.client-sync",{"title":370,"path":371,"stem":372,"icon":373},"Performance","\u002Fuse-cases\u002Fbetter-auth\u002Fperformance","5.use-cases\u002F3.better-auth\u002F05.performance","i-lucide-gauge",{"title":375,"icon":376,"path":377,"stem":378,"children":379,"page":28},"Audit Logs","i-lucide-shield-check","\u002Fuse-cases\u002Faudit","5.use-cases\u002F4.audit",[380,383,388,393,398,402],{"title":128,"path":381,"stem":382,"icon":140},"\u002Fuse-cases\u002Faudit\u002Foverview","5.use-cases\u002F4.audit\u002F01.overview",{"title":384,"path":385,"stem":386,"icon":387},"Schema","\u002Fuse-cases\u002Faudit\u002Fschema","5.use-cases\u002F4.audit\u002F02.schema","i-lucide-file-text",{"title":389,"path":390,"stem":391,"icon":392},"Recording","\u002Fuse-cases\u002Faudit\u002Frecording","5.use-cases\u002F4.audit\u002F03.recording","i-lucide-pen-line",{"title":394,"path":395,"stem":396,"icon":397},"Drains","\u002Fuse-cases\u002Faudit\u002Fpipeline","5.use-cases\u002F4.audit\u002F04.pipeline","i-lucide-link",{"title":399,"path":400,"stem":401,"icon":376},"Compliance","\u002Fuse-cases\u002Faudit\u002Fcompliance","5.use-cases\u002F4.audit\u002F05.compliance",{"title":403,"path":404,"stem":405,"icon":406},"Recipes","\u002Fuse-cases\u002Faudit\u002Frecipes","5.use-cases\u002F4.audit\u002F06.recipes","i-lucide-book-open",{"title":342,"icon":373,"path":408,"stem":409,"children":410,"page":28},"\u002Fuse-cases\u002Ftelemetry","5.use-cases\u002F4.telemetry",[411,414,419,423],{"title":128,"path":412,"stem":413,"icon":140},"\u002Fuse-cases\u002Ftelemetry\u002Foverview","5.use-cases\u002F4.telemetry\u002F01.overview",{"title":415,"path":416,"stem":417,"icon":418},"Setup","\u002Fuse-cases\u002Ftelemetry\u002Fsetup","5.use-cases\u002F4.telemetry\u002F02.setup","i-lucide-wrench",{"title":420,"path":421,"stem":422},"Telemetry Ingest","\u002Fuse-cases\u002Ftelemetry\u002Fingest","5.use-cases\u002F4.telemetry\u002F03.ingest",{"title":424,"path":425,"stem":426,"icon":406},"Reference","\u002Fuse-cases\u002Ftelemetry\u002Freference","5.use-cases\u002F4.telemetry\u002F04.reference",{"title":428,"path":429,"stem":430,"icon":431},"Enrichers","\u002Fuse-cases\u002Fenrichers","5.use-cases\u002F5.enrichers","i-lucide-sparkles",{"title":433,"path":434,"stem":435},"eve","\u002Fuse-cases\u002Feve","5.use-cases\u002F5.eve",{"title":437,"path":438,"stem":439,"children":440,"page":28},"Extend","\u002Fextend","6.extend",[441,445,450,455,459,464,468,472,476,481,486,491],{"title":128,"path":442,"stem":443,"icon":444},"\u002Fextend\u002Foverview","6.extend\u002F0.overview","i-lucide-blocks",{"title":446,"path":447,"stem":448,"icon":449},"Stream","\u002Fextend\u002Fstream","6.extend\u002F1.stream","i-lucide-radio-tower",{"title":451,"path":452,"stem":453,"icon":454},"Custom framework","\u002Fextend\u002Fcustom-framework","6.extend\u002F10.custom-framework","i-lucide-puzzle",{"title":456,"path":457,"stem":458,"icon":449},"Diagnostics channel","\u002Fextend\u002Fdiagnostics-channel","6.extend\u002F11.diagnostics-channel",{"title":460,"path":461,"stem":462,"icon":463},"FS reader","\u002Fextend\u002Ffs-reader","6.extend\u002F2.fs-reader","i-lucide-folder-search",{"title":403,"path":465,"stem":466,"icon":467},"\u002Fextend\u002Fconsumer-recipes","6.extend\u002F3.consumer-recipes","i-lucide-chef-hat",{"title":469,"path":470,"stem":471},"Plugins","\u002Fextend\u002Fplugins","6.extend\u002F4.plugins",{"title":473,"path":474,"stem":475,"icon":431},"Custom enrichers","\u002Fextend\u002Fcustom-enrichers","6.extend\u002F5.custom-enrichers",{"title":477,"path":478,"stem":479,"icon":480},"Tail sampling","\u002Fextend\u002Ftail-sampling","6.extend\u002F6.tail-sampling","i-lucide-filter",{"title":482,"path":483,"stem":484,"icon":485},"Identity headers","\u002Fextend\u002Fidentity-headers","6.extend\u002F7.identity-headers","i-lucide-fingerprint",{"title":487,"path":488,"stem":489,"icon":490},"Custom drains","\u002Fextend\u002Fcustom-drains","6.extend\u002F8.custom-drains","i-lucide-share-2",{"title":492,"path":493,"stem":494},"Drain Pipeline","\u002Fextend\u002Fdrain-pipeline","6.extend\u002F9.drain-pipeline",{"title":424,"path":496,"stem":497,"children":498,"page":28},"\u002Freference","7.reference",[499,504,507,512,516,521,525],{"title":500,"path":501,"stem":502,"icon":503},"Configuration","\u002Freference\u002Fconfiguration","7.reference\u002F1.configuration","i-lucide-settings",{"title":370,"path":505,"stem":506,"icon":373},"\u002Freference\u002Fperformance","7.reference\u002F2.performance",{"title":508,"path":509,"stem":510,"icon":511},"Vite Plugin","\u002Freference\u002Fvite-plugin","7.reference\u002F3.vite-plugin","i-custom-vite",{"title":513,"path":514,"stem":515,"icon":376},"Best Practices","\u002Freference\u002Fbest-practices","7.reference\u002F4.best-practices",{"title":517,"path":518,"stem":519,"icon":520},"vs Other Loggers","\u002Freference\u002Fvs-other-loggers","7.reference\u002F5.vs-other-loggers","i-lucide-scale",{"title":522,"path":523,"stem":524,"icon":431},"Agent Skills","\u002Freference\u002Fagent-skills","7.reference\u002F6.agent-skills",{"title":526,"path":527,"stem":528},"Log cost","\u002Freference\u002Fcost","7.reference\u002F7.cost",{"id":530,"title":44,"body":531,"description":4732,"extension":4733,"links":4734,"meta":4738,"navigation":4739,"path":45,"seo":4740,"stem":46,"__hash__":4741},"docs\u002F2.learn\u002F2.wide-events.md",{"type":532,"value":533,"toc":4703},"minimark",[534,538,552,598,603,606,609,811,814,841,844,1343,1346,1350,1358,1365,1696,1703,1723,1932,1945,1952,1959,2155,2163,2167,2215,2234,2240,2265,2290,2297,2313,2320,2478,2482,2495,2499,2502,2700,2710,2714,2717,2805,2809,2812,2979,2983,2986,3162,3165,3169,3265,3269,3428,3432,3439,3836,3840,3843,4238,4242,4266,4351,4372,4376,4379,4673,4677,4699],[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":287},"Standalone TypeScript"," and ",[545,550,281],{"href":282},", because wide events apply just as cleanly outside of request lifecycles.",[553,554,557,560,585],"prompt",{":actions":555,"description":556,"icon":47},"[\"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},"accumulate-context-emit-once","Accumulate context, emit once",[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,1935,1936,548,1938,1940,1941,1944],{"color":636,"icon":1934},"i-lucide-info","Both ",[618,1937,1356],{},[618,1939,1701],{}," require a manual ",[618,1942,1943],{},"log.emit()"," call. The event won't be emitted until you call it.",[1351,1946,1948,1951],{"id":1947},"uselogger-retrieving-the-request-logger",[618,1949,1950],{},"useLogger"," (Retrieving the Request Logger)",[535,1953,1954,1955,1958],{},"When using a framework integration (Nuxt, Hono, Express, etc.), the middleware creates a wide event logger automatically on each request. ",[618,1956,1957],{},"useLogger(event)"," retrieves that logger from the request context:",[610,1960,1962],{"className":612,"code":1961,"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,1963,1964,1982,1986,2017,2036,2040,2083,2121,2125,2143,2149],{"__ignoreMap":616},[621,1965,1966,1968,1970,1972,1974,1976,1978,1980],{"class":623,"line":624},[621,1967,858],{"class":857},[621,1969,675],{"class":631},[621,1971,863],{"class":627},[621,1973,733],{"class":631},[621,1975,868],{"class":857},[621,1977,725],{"class":631},[621,1979,873],{"class":645},[621,1981,876],{"class":631},[621,1983,1984],{"class":623,"line":654},[621,1985,882],{"emptyLinePlaceholder":881},[621,1987,1988,1991,1994,1997,1999,2002,2004,2008,2011,2014],{"class":623,"line":698},[621,1989,1990],{"class":857},"export",[621,1992,1993],{"class":857}," default",[621,1995,1996],{"class":635}," defineEventHandler",[621,1998,639],{"class":627},[621,2000,2001],{"class":887},"async",[621,2003,1557],{"class":631},[621,2005,2007],{"class":2006},"sHdIc","event",[621,2009,2010],{"class":631},")",[621,2012,2013],{"class":887}," =>",[621,2015,2016],{"class":631}," {\n",[621,2018,2019,2022,2025,2028,2030,2032,2034],{"class":623,"line":738},[621,2020,2021],{"class":887},"  const",[621,2023,2024],{"class":627}," log",[621,2026,2027],{"class":631}," =",[621,2029,863],{"class":635},[621,2031,639],{"class":678},[621,2033,2007],{"class":627},[621,2035,651],{"class":678},[621,2037,2038],{"class":623,"line":758},[621,2039,882],{"emptyLinePlaceholder":881},[621,2041,2042,2045,2047,2049,2051,2053,2055,2057,2059,2061,2063,2065,2067,2069,2071,2073,2075,2077,2079,2081],{"class":623,"line":778},[621,2043,2044],{"class":627},"  log",[621,2046,632],{"class":631},[621,2048,913],{"class":635},[621,2050,639],{"class":678},[621,2052,918],{"class":631},[621,2054,685],{"class":678},[621,2056,682],{"class":631},[621,2058,675],{"class":631},[621,2060,927],{"class":678},[621,2062,682],{"class":631},[621,2064,932],{"class":805},[621,2066,672],{"class":631},[621,2068,937],{"class":678},[621,2070,682],{"class":631},[621,2072,725],{"class":631},[621,2074,944],{"class":645},[621,2076,642],{"class":631},[621,2078,733],{"class":631},[621,2080,733],{"class":631},[621,2082,651],{"class":678},[621,2084,2085,2087,2089,2091,2093,2095,2097,2099,2101,2103,2105,2107,2109,2111,2113,2115,2117,2119],{"class":623,"line":1007},[621,2086,2044],{"class":627},[621,2088,632],{"class":631},[621,2090,913],{"class":635},[621,2092,639],{"class":678},[621,2094,918],{"class":631},[621,2096,967],{"class":678},[621,2098,682],{"class":631},[621,2100,675],{"class":631},[621,2102,983],{"class":678},[621,2104,682],{"class":631},[621,2106,988],{"class":805},[621,2108,672],{"class":631},[621,2110,993],{"class":678},[621,2112,682],{"class":631},[621,2114,998],{"class":805},[621,2116,733],{"class":631},[621,2118,733],{"class":631},[621,2120,651],{"class":678},[621,2122,2123],{"class":623,"line":1503},[621,2124,882],{"emptyLinePlaceholder":881},[621,2126,2127,2130,2132,2135,2137,2141],{"class":623,"line":1532},[621,2128,2129],{"class":857},"  return",[621,2131,675],{"class":631},[621,2133,2134],{"class":678}," success",[621,2136,682],{"class":631},[621,2138,2140],{"class":2139},"sfNiH"," true",[621,2142,1280],{"class":631},[621,2144,2145],{"class":623,"line":1537},[621,2146,2148],{"class":2147},"sHwdD","  \u002F\u002F auto-emitted on response end\n",[621,2150,2151,2153],{"class":623,"line":1551},[621,2152,693],{"class":631},[621,2154,651],{"class":627},[539,2156,2157,2159,2160,2162],{"color":636,"icon":1934},[618,2158,1950],{}," 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,2161,1950],{}," is auto-imported.",[599,2164,2166],{"id":2165},"after-emit-sealing-and-background-work","After emit: sealing and background work",[535,2168,2169,2170,2173,2174,2176,2177,2180,2181,1715,2183,1715,2186,1719,2188,2191,2192,2195,2196,2202,2203,2206,2207,2210,2211,2214],{},"When the wide event is ",[819,2171,2172],{},"emitted"," (automatically at the end of the request, or when you call ",[618,2175,1943],{}," yourself), that logger instance is ",[819,2178,2179],{},"sealed",". Further ",[618,2182,913],{},[618,2184,2185],{},"error",[618,2187,636],{},[618,2189,2190],{},"warn"," calls do ",[819,2193,2194],{},"not"," update the event that was already sent to your drains. They are ignored and evlog prints a ",[819,2197,2198,2201],{},[618,2199,2200],{},"[evlog]"," warning"," to the console with the keys that were dropped. This also applies when ",[819,2204,2205],{},"head sampling"," discards the event (",[618,2208,2209],{},"emit()"," returned ",[618,2212,2213],{},"null","): the logger is still sealed for that unit of work.",[535,2216,2217,2218,2221,2222,2225,2226,2229,2230,2233],{},"This matters for ",[819,2219,2220],{},"async work that outlives the handler"," (fire-and-forget promises, ",[618,2223,2224],{},"setTimeout",", tasks started but not awaited). On many runtimes, ",[618,2227,2228],{},"AsyncLocalStorage"," keeps returning the same request logger, so ",[618,2231,2232],{},"useLogger()"," still succeeds even though the HTTP response, and the wide event, are already finished. Without warnings, that looks like silent data loss.",[1351,2235,2237],{"id":2236},"logforklabel-fn",[618,2238,2239],{},"log.fork(label, fn)",[535,2241,2242,2243,2246,2247,2251,2252,2255,2256,1715,2259,2261,2262,2264],{},"For intentional background work that should produce ",[819,2244,2245],{},"its own"," wide event, use ",[819,2248,2249],{},[618,2250,2239],{}," when your integration provides it (Express, Fastify, NestJS, SvelteKit, React Router, Next.js ",[618,2253,2254],{},"withEvlog",", Elysia). Inside ",[618,2257,2258],{},"fn",[618,2260,2232],{}," resolves to the forked logger. When ",[618,2263,2258],{}," completes (or throws), that logger emits an event with:",[561,2266,2267,2279],{},[564,2268,2269,2274,2275,2278],{},[819,2270,2271],{},[618,2272,2273],{},"operation",": the ",[618,2276,2277],{},"label"," you passed",[564,2280,2281,2286,2287,2289],{},[819,2282,2283],{},[618,2284,2285],{},"_parentRequestId",": the parent request’s ",[618,2288,1722],{}," (for correlation in queries and dashboards)",[535,2291,2292,2293,2296],{},"The parent wide event may be emitted ",[819,2294,2295],{},"before"," the child event; they are two separate events ordered by time.",[535,2298,2299,2302,2303,2305,2306,2309,2310,2312],{},[819,2300,2301],{},"Not available yet:"," Hono (no ",[618,2304,1950],{}," without ",[618,2307,2308],{},"c.get('log')"," + ALS) and Nitro\u002FNuxt ",[618,2311,1957],{},", so use the post-emit warnings to catch mistakes; a different API may arrive later for event-scoped forks.",[535,2314,2315,2316,2319],{},"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,2317,2318],{},"createAILogger(log)"," metadata lands on the same request event automatically.",[610,2321,2324],{"className":612,"code":2322,"filename":2323,"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,2325,2326,2350,2354,2359,2375,2398,2402,2435,2448,2472],{"__ignoreMap":616},[621,2327,2328,2330,2332,2335,2337,2339,2341,2343,2345,2348],{"class":623,"line":624},[621,2329,858],{"class":857},[621,2331,675],{"class":631},[621,2333,2334],{"class":627}," evlog",[621,2336,672],{"class":631},[621,2338,863],{"class":627},[621,2340,733],{"class":631},[621,2342,868],{"class":857},[621,2344,725],{"class":631},[621,2346,2347],{"class":645},"evlog\u002Fexpress",[621,2349,876],{"class":631},[621,2351,2352],{"class":623,"line":654},[621,2353,882],{"emptyLinePlaceholder":881},[621,2355,2356],{"class":623,"line":698},[621,2357,2358],{"class":2147},"\u002F\u002F Inside a route after evlog middleware:\n",[621,2360,2361,2363,2365,2367,2370,2372],{"class":623,"line":738},[621,2362,888],{"class":887},[621,2364,891],{"class":627},[621,2366,894],{"class":631},[621,2368,2369],{"class":627}," req",[621,2371,632],{"class":631},[621,2373,2374],{"class":627},"log\n",[621,2376,2377,2379,2381,2383,2385,2387,2390,2392,2394,2396],{"class":623,"line":758},[621,2378,908],{"class":627},[621,2380,632],{"class":631},[621,2382,913],{"class":635},[621,2384,639],{"class":627},[621,2386,918],{"class":631},[621,2388,2389],{"class":678}," order_dispatched",[621,2391,682],{"class":631},[621,2393,2140],{"class":2139},[621,2395,733],{"class":631},[621,2397,651],{"class":627},[621,2399,2400],{"class":623,"line":778},[621,2401,882],{"emptyLinePlaceholder":881},[621,2403,2404,2406,2408,2411,2414,2416,2418,2421,2423,2425,2428,2431,2433],{"class":623,"line":1007},[621,2405,908],{"class":627},[621,2407,632],{"class":631},[621,2409,2410],{"class":635},"fork",[621,2412,2413],{"class":631},"?.",[621,2415,639],{"class":627},[621,2417,642],{"class":631},[621,2419,2420],{"class":645},"process_order",[621,2422,642],{"class":631},[621,2424,672],{"class":631},[621,2426,2427],{"class":887}," async",[621,2429,2430],{"class":631}," ()",[621,2432,2013],{"class":887},[621,2434,2016],{"class":631},[621,2436,2437,2439,2442,2444,2446],{"class":623,"line":1503},[621,2438,2021],{"class":887},[621,2440,2441],{"class":627}," child",[621,2443,2027],{"class":631},[621,2445,863],{"class":635},[621,2447,1227],{"class":678},[621,2449,2450,2453,2455,2457,2459,2461,2464,2466,2468,2470],{"class":623,"line":1532},[621,2451,2452],{"class":627},"  child",[621,2454,632],{"class":631},[621,2456,913],{"class":635},[621,2458,639],{"class":678},[621,2460,918],{"class":631},[621,2462,2463],{"class":678}," inventory_checked",[621,2465,682],{"class":631},[621,2467,2140],{"class":2139},[621,2469,733],{"class":631},[621,2471,651],{"class":678},[621,2473,2474,2476],{"class":623,"line":1537},[621,2475,693],{"class":631},[621,2477,651],{"class":627},[599,2479,2481],{"id":2480},"read-a-wide-event-field-by-field","Read a wide event field by field",[535,2483,2484,2485,2487,2488,1715,2490,2492,2493,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,2486,908],{}," is already created via ",[618,2489,1356],{},[618,2491,1701],{},", or ",[618,2494,1950],{},[1351,2496,2498],{"id":2497},"operation-context","Operation Context",[535,2500,2501],{},"Basic information about the operation:",[845,2503,2504,2608],{},[610,2505,2507],{"className":612,"code":2506,"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,2508,2509,2527,2531,2543,2555,2571,2586,2602],{"__ignoreMap":616},[621,2510,2511,2513,2515,2517,2519,2521,2523,2525],{"class":623,"line":624},[621,2512,858],{"class":857},[621,2514,675],{"class":631},[621,2516,863],{"class":627},[621,2518,733],{"class":631},[621,2520,868],{"class":857},[621,2522,725],{"class":631},[621,2524,873],{"class":645},[621,2526,876],{"class":631},[621,2528,2529],{"class":623,"line":654},[621,2530,882],{"emptyLinePlaceholder":881},[621,2532,2533,2535,2537,2539,2541],{"class":623,"line":698},[621,2534,888],{"class":887},[621,2536,891],{"class":627},[621,2538,894],{"class":631},[621,2540,863],{"class":635},[621,2542,899],{"class":627},[621,2544,2545,2547,2549,2551,2553],{"class":623,"line":738},[621,2546,908],{"class":627},[621,2548,632],{"class":631},[621,2550,913],{"class":635},[621,2552,639],{"class":627},[621,2554,1571],{"class":631},[621,2556,2557,2560,2562,2564,2566,2568],{"class":623,"line":758},[621,2558,2559],{"class":678},"  method",[621,2561,682],{"class":631},[621,2563,725],{"class":631},[621,2565,1813],{"class":645},[621,2567,642],{"class":631},[621,2569,2570],{"class":631},",\n",[621,2572,2573,2576,2578,2580,2582,2584],{"class":623,"line":778},[621,2574,2575],{"class":678},"  path",[621,2577,682],{"class":631},[621,2579,725],{"class":631},[621,2581,1827],{"class":645},[621,2583,642],{"class":631},[621,2585,2570],{"class":631},[621,2587,2588,2591,2593,2595,2598,2600],{"class":623,"line":1007},[621,2589,2590],{"class":678},"  requestId",[621,2592,682],{"class":631},[621,2594,725],{"class":631},[621,2596,2597],{"class":645},"abc-123-def",[621,2599,642],{"class":631},[621,2601,2570],{"class":631},[621,2603,2604,2606],{"class":623,"line":1503},[621,2605,693],{"class":631},[621,2607,651],{"class":627},[610,2609,2611],{"className":612,"code":2610,"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,2612,2613,2631,2635,2649,2664,2679,2694],{"__ignoreMap":616},[621,2614,2615,2617,2619,2621,2623,2625,2627,2629],{"class":623,"line":624},[621,2616,858],{"class":857},[621,2618,675],{"class":631},[621,2620,1071],{"class":627},[621,2622,733],{"class":631},[621,2624,868],{"class":857},[621,2626,725],{"class":631},[621,2628,873],{"class":645},[621,2630,876],{"class":631},[621,2632,2633],{"class":623,"line":654},[621,2634,882],{"emptyLinePlaceholder":881},[621,2636,2637,2639,2641,2643,2645,2647],{"class":623,"line":698},[621,2638,888],{"class":887},[621,2640,891],{"class":627},[621,2642,894],{"class":631},[621,2644,1071],{"class":635},[621,2646,639],{"class":627},[621,2648,1571],{"class":631},[621,2650,2651,2654,2656,2658,2660,2662],{"class":623,"line":738},[621,2652,2653],{"class":678},"  jobId",[621,2655,682],{"class":631},[621,2657,725],{"class":631},[621,2659,1109],{"class":645},[621,2661,642],{"class":631},[621,2663,2570],{"class":631},[621,2665,2666,2669,2671,2673,2675,2677],{"class":623,"line":758},[621,2667,2668],{"class":678},"  queue",[621,2670,682],{"class":631},[621,2672,725],{"class":631},[621,2674,1123],{"class":645},[621,2676,642],{"class":631},[621,2678,2570],{"class":631},[621,2680,2681,2684,2686,2688,2690,2692],{"class":623,"line":778},[621,2682,2683],{"class":678},"  source",[621,2685,682],{"class":631},[621,2687,725],{"class":631},[621,2689,728],{"class":645},[621,2691,642],{"class":631},[621,2693,2570],{"class":631},[621,2695,2696,2698],{"class":623,"line":1007},[621,2697,693],{"class":631},[621,2699,651],{"class":627},[539,2701,2702,2703,1715,2705,1715,2707,2709],{"color":636,"icon":1934},"In framework integrations, request context (",[618,2704,1714],{},[618,2706,1718],{},[618,2708,1722],{},") is auto-populated by the middleware. You don't need to set these fields manually.",[1351,2711,2713],{"id":2712},"user-actor-context","User \u002F Actor Context",[535,2715,2716],{},"Who triggered the operation:",[610,2718,2720],{"className":612,"code":2719,"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,2721,2722,2734,2749,2764,2779,2799],{"__ignoreMap":616},[621,2723,2724,2726,2728,2730,2732],{"class":623,"line":624},[621,2725,908],{"class":627},[621,2727,632],{"class":631},[621,2729,913],{"class":635},[621,2731,639],{"class":627},[621,2733,1571],{"class":631},[621,2735,2736,2739,2741,2743,2745,2747],{"class":623,"line":654},[621,2737,2738],{"class":678},"  userId",[621,2740,682],{"class":631},[621,2742,685],{"class":627},[621,2744,632],{"class":631},[621,2746,1600],{"class":627},[621,2748,2570],{"class":631},[621,2750,2751,2754,2756,2758,2760,2762],{"class":623,"line":698},[621,2752,2753],{"class":678},"  email",[621,2755,682],{"class":631},[621,2757,685],{"class":627},[621,2759,632],{"class":631},[621,2761,1614],{"class":627},[621,2763,2570],{"class":631},[621,2765,2766,2769,2771,2773,2775,2777],{"class":623,"line":738},[621,2767,2768],{"class":678},"  subscription",[621,2770,682],{"class":631},[621,2772,685],{"class":627},[621,2774,632],{"class":631},[621,2776,1627],{"class":627},[621,2778,2570],{"class":631},[621,2780,2781,2784,2786,2789,2792,2794,2797],{"class":623,"line":758},[621,2782,2783],{"class":678},"  accountAge",[621,2785,682],{"class":631},[621,2787,2788],{"class":635}," daysSince",[621,2790,2791],{"class":627},"(user",[621,2793,632],{"class":631},[621,2795,2796],{"class":627},"createdAt)",[621,2798,2570],{"class":631},[621,2800,2801,2803],{"class":623,"line":778},[621,2802,693],{"class":631},[621,2804,651],{"class":627},[1351,2806,2808],{"id":2807},"business-context","Business Context",[535,2810,2811],{},"Domain-specific data relevant to the operation:",[610,2813,2815],{"className":612,"code":2814,"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,2816,2817,2829,2838,2853,2874,2890,2906,2911,2920,2936,2953,2957,2973],{"__ignoreMap":616},[621,2818,2819,2821,2823,2825,2827],{"class":623,"line":624},[621,2820,908],{"class":627},[621,2822,632],{"class":631},[621,2824,913],{"class":635},[621,2826,639],{"class":627},[621,2828,1571],{"class":631},[621,2830,2831,2834,2836],{"class":623,"line":654},[621,2832,2833],{"class":678},"  cart",[621,2835,682],{"class":631},[621,2837,2016],{"class":631},[621,2839,2840,2843,2845,2847,2849,2851],{"class":623,"line":698},[621,2841,2842],{"class":678},"    id",[621,2844,682],{"class":631},[621,2846,967],{"class":627},[621,2848,632],{"class":631},[621,2850,1600],{"class":627},[621,2852,2570],{"class":631},[621,2854,2855,2858,2860,2862,2864,2867,2869,2872],{"class":623,"line":738},[621,2856,2857],{"class":678},"    items",[621,2859,682],{"class":631},[621,2861,967],{"class":627},[621,2863,632],{"class":631},[621,2865,2866],{"class":627},"items",[621,2868,632],{"class":631},[621,2870,2871],{"class":627},"length",[621,2873,2570],{"class":631},[621,2875,2876,2879,2881,2883,2885,2888],{"class":623,"line":758},[621,2877,2878],{"class":678},"    total",[621,2880,682],{"class":631},[621,2882,967],{"class":627},[621,2884,632],{"class":631},[621,2886,2887],{"class":627},"total",[621,2889,2570],{"class":631},[621,2891,2892,2895,2897,2899,2902,2904],{"class":623,"line":778},[621,2893,2894],{"class":678},"    currency",[621,2896,682],{"class":631},[621,2898,725],{"class":631},[621,2900,2901],{"class":645},"USD",[621,2903,642],{"class":631},[621,2905,2570],{"class":631},[621,2907,2908],{"class":623,"line":1007},[621,2909,2910],{"class":631},"  },\n",[621,2912,2913,2916,2918],{"class":623,"line":1503},[621,2914,2915],{"class":678},"  shipping",[621,2917,682],{"class":631},[621,2919,2016],{"class":631},[621,2921,2922,2925,2927,2929,2932,2934],{"class":623,"line":1532},[621,2923,2924],{"class":678},"    method",[621,2926,682],{"class":631},[621,2928,725],{"class":631},[621,2930,2931],{"class":645},"express",[621,2933,642],{"class":631},[621,2935,2570],{"class":631},[621,2937,2938,2941,2943,2946,2948,2951],{"class":623,"line":1537},[621,2939,2940],{"class":678},"    country",[621,2942,682],{"class":631},[621,2944,2945],{"class":627}," address",[621,2947,632],{"class":631},[621,2949,2950],{"class":627},"country",[621,2952,2570],{"class":631},[621,2954,2955],{"class":623,"line":1551},[621,2956,2910],{"class":631},[621,2958,2959,2962,2964,2967,2969,2971],{"class":623,"line":1574},[621,2960,2961],{"class":678},"  coupon",[621,2963,682],{"class":631},[621,2965,2966],{"class":627}," appliedCoupon",[621,2968,2413],{"class":631},[621,2970,618],{"class":627},[621,2972,2570],{"class":631},[621,2974,2975,2977],{"class":623,"line":1634},[621,2976,693],{"class":631},[621,2978,651],{"class":627},[1351,2980,2982],{"id":2981},"outcome","Outcome",[535,2984,2985],{},"The result of the operation:",[845,2987,2988,3061],{},[610,2989,2992],{"className":612,"code":2990,"filename":2991,"language":615,"meta":616,"style":616},"log.set({\n  status: 200,\n  duration: Date.now() - startTime,\n  success: true,\n})\n","Success",[618,2993,2994,3006,3018,3044,3055],{"__ignoreMap":616},[621,2995,2996,2998,3000,3002,3004],{"class":623,"line":624},[621,2997,908],{"class":627},[621,2999,632],{"class":631},[621,3001,913],{"class":635},[621,3003,639],{"class":627},[621,3005,1571],{"class":631},[621,3007,3008,3011,3013,3016],{"class":623,"line":654},[621,3009,3010],{"class":678},"  status",[621,3012,682],{"class":631},[621,3014,3015],{"class":805}," 200",[621,3017,2570],{"class":631},[621,3019,3020,3023,3025,3028,3030,3033,3036,3039,3042],{"class":623,"line":698},[621,3021,3022],{"class":678},"  duration",[621,3024,682],{"class":631},[621,3026,3027],{"class":627}," Date",[621,3029,632],{"class":631},[621,3031,3032],{"class":635},"now",[621,3034,3035],{"class":627},"() ",[621,3037,3038],{"class":631},"-",[621,3040,3041],{"class":627}," startTime",[621,3043,2570],{"class":631},[621,3045,3046,3049,3051,3053],{"class":623,"line":738},[621,3047,3048],{"class":678},"  success",[621,3050,682],{"class":631},[621,3052,2140],{"class":2139},[621,3054,2570],{"class":631},[621,3056,3057,3059],{"class":623,"line":758},[621,3058,693],{"class":631},[621,3060,651],{"class":627},[610,3062,3065],{"className":612,"code":3063,"filename":3064,"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,3066,3067,3079,3090,3099,3116,3131,3152,3156],{"__ignoreMap":616},[621,3068,3069,3071,3073,3075,3077],{"class":623,"line":624},[621,3070,908],{"class":627},[621,3072,632],{"class":631},[621,3074,913],{"class":635},[621,3076,639],{"class":627},[621,3078,1571],{"class":631},[621,3080,3081,3083,3085,3088],{"class":623,"line":654},[621,3082,3010],{"class":678},[621,3084,682],{"class":631},[621,3086,3087],{"class":805}," 500",[621,3089,2570],{"class":631},[621,3091,3092,3095,3097],{"class":623,"line":698},[621,3093,3094],{"class":678},"  error",[621,3096,682],{"class":631},[621,3098,2016],{"class":631},[621,3100,3101,3104,3106,3109,3111,3114],{"class":623,"line":738},[621,3102,3103],{"class":678},"    message",[621,3105,682],{"class":631},[621,3107,3108],{"class":627}," err",[621,3110,632],{"class":631},[621,3112,3113],{"class":627},"message",[621,3115,2570],{"class":631},[621,3117,3118,3121,3123,3125,3127,3129],{"class":623,"line":758},[621,3119,3120],{"class":678},"    code",[621,3122,682],{"class":631},[621,3124,3108],{"class":627},[621,3126,632],{"class":631},[621,3128,618],{"class":627},[621,3130,2570],{"class":631},[621,3132,3133,3136,3138,3140,3142,3145,3147,3150],{"class":623,"line":778},[621,3134,3135],{"class":678},"    type",[621,3137,682],{"class":631},[621,3139,3108],{"class":627},[621,3141,632],{"class":631},[621,3143,3144],{"class":627},"constructor",[621,3146,632],{"class":631},[621,3148,3149],{"class":627},"name",[621,3151,2570],{"class":631},[621,3153,3154],{"class":623,"line":1007},[621,3155,2910],{"class":631},[621,3157,3158,3160],{"class":623,"line":1503},[621,3159,693],{"class":631},[621,3161,651],{"class":627},[599,3163,513],{"id":3164},"best-practices",[1351,3166,3168],{"id":3167},"use-meaningful-keys","Use Meaningful Keys",[610,3170,3173],{"className":612,"code":3171,"filename":3172,"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,3174,3175,3180,3212,3216,3221],{"__ignoreMap":616},[621,3176,3177],{"class":623,"line":624},[621,3178,3179],{"class":2147},"\u002F\u002F Avoid generic keys\n",[621,3181,3182,3184,3186,3188,3190,3192,3195,3197,3199,3201,3203,3206,3208,3210],{"class":623,"line":654},[621,3183,908],{"class":627},[621,3185,632],{"class":631},[621,3187,913],{"class":635},[621,3189,639],{"class":627},[621,3191,918],{"class":631},[621,3193,3194],{"class":678}," data",[621,3196,682],{"class":631},[621,3198,675],{"class":631},[621,3200,927],{"class":678},[621,3202,682],{"class":631},[621,3204,3205],{"class":805}," 123",[621,3207,733],{"class":631},[621,3209,733],{"class":631},[621,3211,651],{"class":627},[621,3213,3214],{"class":623,"line":698},[621,3215,882],{"emptyLinePlaceholder":881},[621,3217,3218],{"class":623,"line":738},[621,3219,3220],{"class":2147},"\u002F\u002F Use specific, descriptive keys\n",[621,3222,3223,3225,3227,3229,3231,3233,3236,3238,3240,3242,3244,3246,3248,3250,3252,3254,3257,3259,3261,3263],{"class":623,"line":758},[621,3224,908],{"class":627},[621,3226,632],{"class":631},[621,3228,913],{"class":635},[621,3230,639],{"class":627},[621,3232,918],{"class":631},[621,3234,3235],{"class":678}," order",[621,3237,682],{"class":631},[621,3239,675],{"class":631},[621,3241,927],{"class":678},[621,3243,682],{"class":631},[621,3245,3205],{"class":805},[621,3247,672],{"class":631},[621,3249,1041],{"class":678},[621,3251,682],{"class":631},[621,3253,725],{"class":631},[621,3255,3256],{"class":645},"pending",[621,3258,642],{"class":631},[621,3260,733],{"class":631},[621,3262,733],{"class":631},[621,3264,651],{"class":627},[1351,3266,3268],{"id":3267},"group-related-data","Group Related Data",[610,3270,3272],{"className":612,"code":3271,"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,3273,3274,3279,3291,3301,3317,3329,3341,3347,3351,3356,3368,3398,3422],{"__ignoreMap":616},[621,3275,3276],{"class":623,"line":624},[621,3277,3278],{"class":2147},"\u002F\u002F Flat structure is hard to read\n",[621,3280,3281,3283,3285,3287,3289],{"class":623,"line":654},[621,3282,908],{"class":627},[621,3284,632],{"class":631},[621,3286,913],{"class":635},[621,3288,639],{"class":627},[621,3290,1571],{"class":631},[621,3292,3293,3295,3297,3299],{"class":623,"line":698},[621,3294,2738],{"class":678},[621,3296,682],{"class":631},[621,3298,932],{"class":805},[621,3300,2570],{"class":631},[621,3302,3303,3306,3308,3310,3313,3315],{"class":623,"line":738},[621,3304,3305],{"class":678},"  userEmail",[621,3307,682],{"class":631},[621,3309,725],{"class":631},[621,3311,3312],{"class":645},"a@b.com",[621,3314,642],{"class":631},[621,3316,2570],{"class":631},[621,3318,3319,3322,3324,3327],{"class":623,"line":758},[621,3320,3321],{"class":678},"  cartId",[621,3323,682],{"class":631},[621,3325,3326],{"class":805}," 2",[621,3328,2570],{"class":631},[621,3330,3331,3334,3336,3339],{"class":623,"line":778},[621,3332,3333],{"class":678},"  cartTotal",[621,3335,682],{"class":631},[621,3337,3338],{"class":805}," 100",[621,3340,2570],{"class":631},[621,3342,3343,3345],{"class":623,"line":1007},[621,3344,693],{"class":631},[621,3346,651],{"class":627},[621,3348,3349],{"class":623,"line":1503},[621,3350,882],{"emptyLinePlaceholder":881},[621,3352,3353],{"class":623,"line":1532},[621,3354,3355],{"class":2147},"\u002F\u002F Grouped structure is clearer\n",[621,3357,3358,3360,3362,3364,3366],{"class":623,"line":1537},[621,3359,908],{"class":627},[621,3361,632],{"class":631},[621,3363,913],{"class":635},[621,3365,639],{"class":627},[621,3367,1571],{"class":631},[621,3369,3370,3373,3375,3377,3379,3381,3383,3385,3387,3389,3391,3393,3395],{"class":623,"line":1551},[621,3371,3372],{"class":678},"  user",[621,3374,682],{"class":631},[621,3376,675],{"class":631},[621,3378,927],{"class":678},[621,3380,682],{"class":631},[621,3382,932],{"class":805},[621,3384,672],{"class":631},[621,3386,1605],{"class":678},[621,3388,682],{"class":631},[621,3390,725],{"class":631},[621,3392,3312],{"class":645},[621,3394,642],{"class":631},[621,3396,3397],{"class":631}," },\n",[621,3399,3400,3402,3404,3406,3408,3410,3412,3414,3416,3418,3420],{"class":623,"line":1574},[621,3401,2833],{"class":678},[621,3403,682],{"class":631},[621,3405,675],{"class":631},[621,3407,927],{"class":678},[621,3409,682],{"class":631},[621,3411,3326],{"class":805},[621,3413,672],{"class":631},[621,3415,993],{"class":678},[621,3417,682],{"class":631},[621,3419,3338],{"class":805},[621,3421,3397],{"class":631},[621,3423,3424,3426],{"class":623,"line":1634},[621,3425,693],{"class":631},[621,3427,651],{"class":627},[1351,3429,3431],{"id":3430},"add-context-incrementally","Add Context Incrementally",[535,3433,3434,3435,3438],{},"Call ",[618,3436,3437],{},"log.set()"," as you gather information:",[845,3440,3441,3748],{},[610,3442,3444],{"className":612,"code":3443,"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,3445,3446,3464,3468,3490,3506,3510,3529,3575,3579,3603,3653,3657,3677,3724,3728,3742],{"__ignoreMap":616},[621,3447,3448,3450,3452,3454,3456,3458,3460,3462],{"class":623,"line":624},[621,3449,858],{"class":857},[621,3451,675],{"class":631},[621,3453,863],{"class":627},[621,3455,733],{"class":631},[621,3457,868],{"class":857},[621,3459,725],{"class":631},[621,3461,873],{"class":645},[621,3463,876],{"class":631},[621,3465,3466],{"class":623,"line":654},[621,3467,882],{"emptyLinePlaceholder":881},[621,3469,3470,3472,3474,3476,3478,3480,3482,3484,3486,3488],{"class":623,"line":698},[621,3471,1990],{"class":857},[621,3473,1993],{"class":857},[621,3475,1996],{"class":635},[621,3477,639],{"class":627},[621,3479,2001],{"class":887},[621,3481,1557],{"class":631},[621,3483,2007],{"class":2006},[621,3485,2010],{"class":631},[621,3487,2013],{"class":887},[621,3489,2016],{"class":631},[621,3491,3492,3494,3496,3498,3500,3502,3504],{"class":623,"line":738},[621,3493,2021],{"class":887},[621,3495,2024],{"class":627},[621,3497,2027],{"class":631},[621,3499,863],{"class":635},[621,3501,639],{"class":678},[621,3503,2007],{"class":627},[621,3505,651],{"class":678},[621,3507,3508],{"class":623,"line":758},[621,3509,882],{"emptyLinePlaceholder":881},[621,3511,3512,3514,3516,3518,3520,3523,3525,3527],{"class":623,"line":778},[621,3513,2021],{"class":887},[621,3515,685],{"class":627},[621,3517,2027],{"class":631},[621,3519,1481],{"class":857},[621,3521,3522],{"class":635}," getUser",[621,3524,639],{"class":678},[621,3526,2007],{"class":627},[621,3528,651],{"class":678},[621,3530,3531,3533,3535,3537,3539,3541,3543,3545,3547,3549,3551,3553,3555,3557,3559,3561,3563,3565,3567,3569,3571,3573],{"class":623,"line":1007},[621,3532,2044],{"class":627},[621,3534,632],{"class":631},[621,3536,913],{"class":635},[621,3538,639],{"class":678},[621,3540,918],{"class":631},[621,3542,685],{"class":678},[621,3544,682],{"class":631},[621,3546,675],{"class":631},[621,3548,927],{"class":678},[621,3550,682],{"class":631},[621,3552,685],{"class":627},[621,3554,632],{"class":631},[621,3556,1600],{"class":627},[621,3558,672],{"class":631},[621,3560,937],{"class":678},[621,3562,682],{"class":631},[621,3564,685],{"class":627},[621,3566,632],{"class":631},[621,3568,1627],{"class":627},[621,3570,733],{"class":631},[621,3572,733],{"class":631},[621,3574,651],{"class":678},[621,3576,3577],{"class":623,"line":1503},[621,3578,882],{"emptyLinePlaceholder":881},[621,3580,3581,3583,3585,3587,3589,3592,3594,3597,3599,3601],{"class":623,"line":1532},[621,3582,2021],{"class":887},[621,3584,967],{"class":627},[621,3586,2027],{"class":631},[621,3588,1481],{"class":857},[621,3590,3591],{"class":635}," getCart",[621,3593,639],{"class":678},[621,3595,3596],{"class":627},"user",[621,3598,632],{"class":631},[621,3600,1600],{"class":627},[621,3602,651],{"class":678},[621,3604,3605,3607,3609,3611,3613,3615,3617,3619,3621,3623,3625,3627,3629,3631,3633,3635,3637,3639,3641,3643,3645,3647,3649,3651],{"class":623,"line":1537},[621,3606,2044],{"class":627},[621,3608,632],{"class":631},[621,3610,913],{"class":635},[621,3612,639],{"class":678},[621,3614,918],{"class":631},[621,3616,967],{"class":678},[621,3618,682],{"class":631},[621,3620,675],{"class":631},[621,3622,983],{"class":678},[621,3624,682],{"class":631},[621,3626,967],{"class":627},[621,3628,632],{"class":631},[621,3630,2866],{"class":627},[621,3632,632],{"class":631},[621,3634,2871],{"class":627},[621,3636,672],{"class":631},[621,3638,993],{"class":678},[621,3640,682],{"class":631},[621,3642,967],{"class":627},[621,3644,632],{"class":631},[621,3646,2887],{"class":627},[621,3648,733],{"class":631},[621,3650,733],{"class":631},[621,3652,651],{"class":678},[621,3654,3655],{"class":623,"line":1551},[621,3656,882],{"emptyLinePlaceholder":881},[621,3658,3659,3661,3663,3665,3667,3670,3672,3675],{"class":623,"line":1574},[621,3660,2021],{"class":887},[621,3662,1020],{"class":627},[621,3664,2027],{"class":631},[621,3666,1481],{"class":857},[621,3668,3669],{"class":635}," processPayment",[621,3671,639],{"class":678},[621,3673,3674],{"class":627},"cart",[621,3676,651],{"class":678},[621,3678,3679,3681,3683,3685,3687,3689,3691,3693,3695,3697,3699,3701,3703,3705,3707,3709,3711,3713,3715,3718,3720,3722],{"class":623,"line":1634},[621,3680,2044],{"class":627},[621,3682,632],{"class":631},[621,3684,913],{"class":635},[621,3686,639],{"class":678},[621,3688,918],{"class":631},[621,3690,1020],{"class":678},[621,3692,682],{"class":631},[621,3694,675],{"class":631},[621,3696,1027],{"class":678},[621,3698,682],{"class":631},[621,3700,1020],{"class":627},[621,3702,632],{"class":631},[621,3704,1714],{"class":627},[621,3706,672],{"class":631},[621,3708,1041],{"class":678},[621,3710,682],{"class":631},[621,3712,1020],{"class":627},[621,3714,632],{"class":631},[621,3716,3717],{"class":627},"status",[621,3719,733],{"class":631},[621,3721,733],{"class":631},[621,3723,651],{"class":678},[621,3725,3726],{"class":623,"line":1643},[621,3727,882],{"emptyLinePlaceholder":881},[621,3729,3730,3732,3734,3736,3738,3740],{"class":623,"line":1649},[621,3731,2129],{"class":857},[621,3733,675],{"class":631},[621,3735,2134],{"class":678},[621,3737,682],{"class":631},[621,3739,2140],{"class":2139},[621,3741,1280],{"class":631},[621,3743,3744,3746],{"class":623,"line":1654},[621,3745,693],{"class":631},[621,3747,651],{"class":627},[610,3749,3751],{"className":1230,"code":3750,"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,3752,3753,3768,3788,3804,3830],{"__ignoreMap":616},[621,3754,3755,3757,3759,3761,3763,3766],{"class":623,"line":624},[621,3756,1240],{"class":631},[621,3758,1243],{"class":627},[621,3760,1246],{"class":631},[621,3762,1249],{"class":627},[621,3764,3765],{"class":1252},"456ms",[621,3767,651],{"class":627},[621,3769,3770,3772,3774,3776,3778,3780,3782,3784,3786],{"class":623,"line":654},[621,3771,1260],{"class":1252},[621,3773,675],{"class":645},[621,3775,1265],{"class":645},[621,3777,1268],{"class":645},[621,3779,1271],{"class":645},[621,3781,725],{"class":631},[621,3783,944],{"class":645},[621,3785,642],{"class":631},[621,3787,1280],{"class":645},[621,3789,3790,3792,3794,3796,3798,3800,3802],{"class":623,"line":698},[621,3791,1285],{"class":1252},[621,3793,675],{"class":645},[621,3795,1295],{"class":645},[621,3797,1298],{"class":645},[621,3799,1301],{"class":645},[621,3801,998],{"class":805},[621,3803,1280],{"class":645},[621,3805,3806,3808,3810,3812,3814,3816,3818,3820,3822,3824,3826,3828],{"class":623,"line":738},[621,3807,1310],{"class":1252},[621,3809,675],{"class":645},[621,3811,1315],{"class":645},[621,3813,725],{"class":631},[621,3815,1034],{"class":645},[621,3817,642],{"class":631},[621,3819,672],{"class":645},[621,3821,1326],{"class":645},[621,3823,725],{"class":631},[621,3825,1048],{"class":645},[621,3827,642],{"class":631},[621,3829,1280],{"class":645},[621,3831,3832,3834],{"class":623,"line":758},[621,3833,1339],{"class":1252},[621,3835,1342],{"class":805},[1351,3837,3839],{"id":3838},"handle-errors-gracefully","Handle Errors Gracefully",[535,3841,3842],{},"When errors occur, the wide event still emits with error context:",[845,3844,3845,4071],{},[610,3846,3848],{"className":612,"code":3847,"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,3849,3850,3868,3872,3894,3910,3914,3921,3941,3949,3967,3980,3989,4004,4019,4038,4043,4050,4058,4064],{"__ignoreMap":616},[621,3851,3852,3854,3856,3858,3860,3862,3864,3866],{"class":623,"line":624},[621,3853,858],{"class":857},[621,3855,675],{"class":631},[621,3857,863],{"class":627},[621,3859,733],{"class":631},[621,3861,868],{"class":857},[621,3863,725],{"class":631},[621,3865,873],{"class":645},[621,3867,876],{"class":631},[621,3869,3870],{"class":623,"line":654},[621,3871,882],{"emptyLinePlaceholder":881},[621,3873,3874,3876,3878,3880,3882,3884,3886,3888,3890,3892],{"class":623,"line":698},[621,3875,1990],{"class":857},[621,3877,1993],{"class":857},[621,3879,1996],{"class":635},[621,3881,639],{"class":627},[621,3883,2001],{"class":887},[621,3885,1557],{"class":631},[621,3887,2007],{"class":2006},[621,3889,2010],{"class":631},[621,3891,2013],{"class":887},[621,3893,2016],{"class":631},[621,3895,3896,3898,3900,3902,3904,3906,3908],{"class":623,"line":738},[621,3897,2021],{"class":887},[621,3899,2024],{"class":627},[621,3901,2027],{"class":631},[621,3903,863],{"class":635},[621,3905,639],{"class":678},[621,3907,2007],{"class":627},[621,3909,651],{"class":678},[621,3911,3912],{"class":623,"line":758},[621,3913,882],{"emptyLinePlaceholder":881},[621,3915,3916,3919],{"class":623,"line":778},[621,3917,3918],{"class":857},"  try",[621,3920,2016],{"class":631},[621,3922,3923,3926,3929,3931,3933,3935,3937,3939],{"class":623,"line":1007},[621,3924,3925],{"class":887},"    const",[621,3927,3928],{"class":627}," result",[621,3930,2027],{"class":631},[621,3932,1481],{"class":857},[621,3934,3669],{"class":635},[621,3936,639],{"class":678},[621,3938,3674],{"class":627},[621,3940,651],{"class":678},[621,3942,3943,3946],{"class":623,"line":1503},[621,3944,3945],{"class":857},"    return",[621,3947,3948],{"class":627}," result\n",[621,3950,3951,3954,3957,3959,3962,3965],{"class":623,"line":1532},[621,3952,3953],{"class":631},"  }",[621,3955,3956],{"class":857}," catch",[621,3958,1557],{"class":678},[621,3960,3961],{"class":627},"err",[621,3963,3964],{"class":678},") ",[621,3966,1571],{"class":631},[621,3968,3969,3972,3974,3976,3978],{"class":623,"line":1537},[621,3970,3971],{"class":627},"    log",[621,3973,632],{"class":631},[621,3975,913],{"class":635},[621,3977,639],{"class":678},[621,3979,1571],{"class":631},[621,3981,3982,3985,3987],{"class":623,"line":1551},[621,3983,3984],{"class":678},"      error",[621,3986,682],{"class":631},[621,3988,2016],{"class":631},[621,3990,3991,3994,3996,3998,4000,4002],{"class":623,"line":1574},[621,3992,3993],{"class":678},"        message",[621,3995,682],{"class":631},[621,3997,3108],{"class":627},[621,3999,632],{"class":631},[621,4001,3113],{"class":627},[621,4003,2570],{"class":631},[621,4005,4006,4009,4011,4013,4015,4017],{"class":623,"line":1634},[621,4007,4008],{"class":678},"        code",[621,4010,682],{"class":631},[621,4012,3108],{"class":627},[621,4014,632],{"class":631},[621,4016,618],{"class":627},[621,4018,2570],{"class":631},[621,4020,4021,4024,4026,4028,4030,4032,4034,4036],{"class":623,"line":1643},[621,4022,4023],{"class":678},"        type",[621,4025,682],{"class":631},[621,4027,3108],{"class":627},[621,4029,632],{"class":631},[621,4031,3144],{"class":627},[621,4033,632],{"class":631},[621,4035,3149],{"class":627},[621,4037,2570],{"class":631},[621,4039,4040],{"class":623,"line":1649},[621,4041,4042],{"class":631},"      },\n",[621,4044,4045,4048],{"class":623,"line":1654},[621,4046,4047],{"class":631},"    }",[621,4049,651],{"class":678},[621,4051,4052,4055],{"class":623,"line":1687},[621,4053,4054],{"class":857},"    throw",[621,4056,4057],{"class":627}," err\n",[621,4059,4061],{"class":623,"line":4060},18,[621,4062,4063],{"class":631},"  }\n",[621,4065,4067,4069],{"class":623,"line":4066},19,[621,4068,693],{"class":631},[621,4070,651],{"class":627},[610,4072,4074],{"className":1230,"code":4073,"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,4075,4076,4084,4098,4109,4132,4151,4178,4202,4218],{"__ignoreMap":616},[621,4077,4078,4081],{"class":623,"line":624},[621,4079,4080],{"class":1252},"ERROR",[621,4082,4083],{"class":627}," [checkout] POST \u002Fapi\u002Fcheckout 402 in 123ms\n",[621,4085,4086,4089,4092,4095],{"class":623,"line":654},[621,4087,4088],{"class":1252},"  ├─",[621,4090,4091],{"class":645}," error:",[621,4093,4094],{"class":645}," Card",[621,4096,4097],{"class":645}," declined\n",[621,4099,4100,4103,4106],{"class":623,"line":698},[621,4101,4102],{"class":1252},"  │",[621,4104,4105],{"class":645},"     at",[621,4107,4108],{"class":645}," server\u002Fapi\u002Fcheckout.post.ts:42\n",[621,4110,4111,4113,4116,4118,4121,4124,4127,4129],{"class":623,"line":738},[621,4112,4102],{"class":1252},[621,4114,4115],{"class":645},"   ❯",[621,4117,978],{"class":805},[621,4119,4120],{"class":645}," ┃",[621,4122,4123],{"class":645}," throw",[621,4125,4126],{"class":645}," createError",[621,4128,639],{"class":631},[621,4130,4131],{"class":627},"{ code: 'CARD_DECLINED', ... })\n",[621,4133,4134,4136,4139,4142,4145,4148],{"class":623,"line":758},[621,4135,4102],{"class":1252},[621,4137,4138],{"class":645},"     Why:",[621,4140,4141],{"class":645}," Issuer",[621,4143,4144],{"class":645}," declined",[621,4146,4147],{"class":645}," the",[621,4149,4150],{"class":645}," charge\n",[621,4152,4153,4155,4158,4161,4163,4166,4169,4172,4175],{"class":623,"line":778},[621,4154,4102],{"class":1252},[621,4156,4157],{"class":645},"     Fix:",[621,4159,4160],{"class":645}," Ask",[621,4162,4147],{"class":645},[621,4164,4165],{"class":645}," customer",[621,4167,4168],{"class":645}," to",[621,4170,4171],{"class":645}," use",[621,4173,4174],{"class":645}," another",[621,4176,4177],{"class":645}," card\n",[621,4179,4180,4182,4185,4188,4191,4194,4197,4200],{"class":623,"line":1007},[621,4181,4102],{"class":1252},[621,4183,4184],{"class":645},"     stack",[621,4186,4187],{"class":627}," (3 ",[621,4189,4190],{"class":645},"frames",[621,4192,4193],{"class":645}," hidden",[621,4195,4196],{"class":645}," in",[621,4198,4199],{"class":645}," node_modules",[621,4201,651],{"class":631},[621,4203,4204,4206,4209,4212,4215],{"class":623,"line":1503},[621,4205,4088],{"class":1252},[621,4207,4208],{"class":645}," user:",[621,4210,4211],{"class":645}," id=",[621,4213,4214],{"class":805},"1",[621,4216,4217],{"class":645}," plan=pro\n",[621,4219,4220,4223,4226,4229,4232,4235],{"class":623,"line":1532},[621,4221,4222],{"class":1252},"  └─",[621,4224,4225],{"class":645}," cart:",[621,4227,4228],{"class":645}," items=",[621,4230,4231],{"class":805},"3",[621,4233,4234],{"class":645}," total=",[621,4236,4237],{"class":805},"9999\n",[1351,4239,4241],{"id":4240},"setting-the-level-manually","Setting the Level Manually",[535,4243,4244,4247,4248,4250,4251,4254,4255,4258,4259,4261,4262,4265],{},[618,4245,4246],{},"log.error(err)"," populates the ",[618,4249,2185],{}," field with ",[618,4252,4253],{},"{ name, message, stack }"," and promotes the wide event to ",[618,4256,4257],{},"level: 'error'",". When you want to control the ",[618,4260,2185],{}," field yourself (typed error codes, no stack, or richer custom shapes), use ",[618,4263,4264],{},"log.setLevel()"," to promote the level without touching the context:",[610,4267,4269],{"className":612,"code":4268,"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,4270,4271,4290,4302,4310,4325,4341,4345],{"__ignoreMap":616},[621,4272,4273,4275,4277,4280,4282,4284,4286,4288],{"class":623,"line":624},[621,4274,908],{"class":627},[621,4276,632],{"class":631},[621,4278,4279],{"class":635},"setLevel",[621,4281,639],{"class":627},[621,4283,642],{"class":631},[621,4285,2185],{"class":645},[621,4287,642],{"class":631},[621,4289,651],{"class":627},[621,4291,4292,4294,4296,4298,4300],{"class":623,"line":654},[621,4293,908],{"class":627},[621,4295,632],{"class":631},[621,4297,913],{"class":635},[621,4299,639],{"class":627},[621,4301,1571],{"class":631},[621,4303,4304,4306,4308],{"class":623,"line":698},[621,4305,3094],{"class":678},[621,4307,682],{"class":631},[621,4309,2016],{"class":631},[621,4311,4312,4314,4316,4318,4321,4323],{"class":623,"line":738},[621,4313,3120],{"class":678},[621,4315,682],{"class":631},[621,4317,725],{"class":631},[621,4319,4320],{"class":645},"PAYMENT_DECLINED",[621,4322,642],{"class":631},[621,4324,2570],{"class":631},[621,4326,4327,4330,4332,4334,4337,4339],{"class":623,"line":758},[621,4328,4329],{"class":678},"    reason",[621,4331,682],{"class":631},[621,4333,725],{"class":631},[621,4335,4336],{"class":645},"insufficient_funds",[621,4338,642],{"class":631},[621,4340,2570],{"class":631},[621,4342,4343],{"class":623,"line":778},[621,4344,2910],{"class":631},[621,4346,4347,4349],{"class":623,"line":1007},[621,4348,693],{"class":631},[621,4350,651],{"class":627},[535,4352,4353,4356,4357,4360,4361,4364,4365,4368,4369,4371],{},[618,4354,4355],{},"setLevel()"," accepts ",[618,4358,4359],{},"'error' | 'warn' | 'info' | 'debug'"," and wins over the level computed from ",[618,4362,4363],{},".error()"," \u002F ",[618,4366,4367],{},".warn()",". Combine it with ",[618,4370,3437],{}," to keep the wide event tidy while still routing through error-level sampling and drains.",[599,4373,4375],{"id":4374},"choose-how-the-event-is-rendered","Choose how the event is rendered",[535,4377,4378],{},"evlog automatically switches between formats based on environment: pretty in development, JSON in production. This is the default behavior, no configuration needed.",[845,4380,4381,4463],{},[610,4382,4385],{"className":1230,"code":4383,"filename":4384,"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,4386,4387,4401,4421,4437],{"__ignoreMap":616},[621,4388,4389,4391,4393,4395,4397,4399],{"class":623,"line":624},[621,4390,1240],{"class":631},[621,4392,1243],{"class":627},[621,4394,1246],{"class":631},[621,4396,1249],{"class":627},[621,4398,1253],{"class":1252},[621,4400,651],{"class":627},[621,4402,4403,4405,4407,4409,4411,4413,4415,4417,4419],{"class":623,"line":654},[621,4404,1260],{"class":1252},[621,4406,675],{"class":645},[621,4408,1265],{"class":645},[621,4410,1268],{"class":645},[621,4412,1271],{"class":645},[621,4414,725],{"class":631},[621,4416,944],{"class":645},[621,4418,642],{"class":631},[621,4420,1280],{"class":645},[621,4422,4423,4425,4427,4429,4431,4433,4435],{"class":623,"line":698},[621,4424,1285],{"class":1252},[621,4426,675],{"class":645},[621,4428,1295],{"class":645},[621,4430,1298],{"class":645},[621,4432,1301],{"class":645},[621,4434,998],{"class":805},[621,4436,1280],{"class":645},[621,4438,4439,4441,4443,4445,4447,4449,4451,4453,4455,4457,4459,4461],{"class":623,"line":738},[621,4440,1310],{"class":1252},[621,4442,675],{"class":645},[621,4444,1315],{"class":645},[621,4446,725],{"class":631},[621,4448,1034],{"class":645},[621,4450,642],{"class":631},[621,4452,672],{"class":645},[621,4454,1326],{"class":645},[621,4456,725],{"class":631},[621,4458,1048],{"class":645},[621,4460,642],{"class":631},[621,4462,1280],{"class":645},[610,4464,4469],{"className":4465,"code":4466,"filename":4467,"language":4468,"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,4470,4471,4475,4497,4515,4533,4548,4588,4624,4669],{"__ignoreMap":616},[621,4472,4473],{"class":623,"line":624},[621,4474,1571],{"class":631},[621,4476,4477,4480,4483,4486,4488,4491,4493,4495],{"class":623,"line":654},[621,4478,4479],{"class":631},"  \"",[621,4481,4482],{"class":887},"level",[621,4484,4485],{"class":631},"\"",[621,4487,682],{"class":631},[621,4489,4490],{"class":631}," \"",[621,4492,636],{"class":645},[621,4494,4485],{"class":631},[621,4496,2570],{"class":631},[621,4498,4499,4501,4503,4505,4507,4509,4511,4513],{"class":623,"line":698},[621,4500,4479],{"class":631},[621,4502,1714],{"class":887},[621,4504,4485],{"class":631},[621,4506,682],{"class":631},[621,4508,4490],{"class":631},[621,4510,1813],{"class":645},[621,4512,4485],{"class":631},[621,4514,2570],{"class":631},[621,4516,4517,4519,4521,4523,4525,4527,4529,4531],{"class":623,"line":738},[621,4518,4479],{"class":631},[621,4520,1718],{"class":887},[621,4522,4485],{"class":631},[621,4524,682],{"class":631},[621,4526,4490],{"class":631},[621,4528,1827],{"class":645},[621,4530,4485],{"class":631},[621,4532,2570],{"class":631},[621,4534,4535,4537,4540,4542,4544,4546],{"class":623,"line":758},[621,4536,4479],{"class":631},[621,4538,4539],{"class":887},"duration",[621,4541,4485],{"class":631},[621,4543,682],{"class":631},[621,4545,806],{"class":805},[621,4547,2570],{"class":631},[621,4549,4550,4552,4554,4556,4558,4560,4562,4564,4566,4568,4570,4572,4574,4576,4578,4580,4582,4584,4586],{"class":623,"line":778},[621,4551,4479],{"class":631},[621,4553,3596],{"class":887},[621,4555,4485],{"class":631},[621,4557,682],{"class":631},[621,4559,675],{"class":631},[621,4561,4490],{"class":631},[621,4563,1600],{"class":1252},[621,4565,4485],{"class":631},[621,4567,682],{"class":631},[621,4569,932],{"class":805},[621,4571,672],{"class":631},[621,4573,4490],{"class":631},[621,4575,1627],{"class":1252},[621,4577,4485],{"class":631},[621,4579,682],{"class":631},[621,4581,4490],{"class":631},[621,4583,944],{"class":645},[621,4585,4485],{"class":631},[621,4587,3397],{"class":631},[621,4589,4590,4592,4594,4596,4598,4600,4602,4604,4606,4608,4610,4612,4614,4616,4618,4620,4622],{"class":623,"line":1007},[621,4591,4479],{"class":631},[621,4593,3674],{"class":887},[621,4595,4485],{"class":631},[621,4597,682],{"class":631},[621,4599,675],{"class":631},[621,4601,4490],{"class":631},[621,4603,2866],{"class":1252},[621,4605,4485],{"class":631},[621,4607,682],{"class":631},[621,4609,988],{"class":805},[621,4611,672],{"class":631},[621,4613,4490],{"class":631},[621,4615,2887],{"class":1252},[621,4617,4485],{"class":631},[621,4619,682],{"class":631},[621,4621,998],{"class":805},[621,4623,3397],{"class":631},[621,4625,4626,4628,4631,4633,4635,4637,4639,4641,4643,4645,4647,4649,4651,4653,4655,4657,4659,4661,4663,4665,4667],{"class":623,"line":1503},[621,4627,4479],{"class":631},[621,4629,4630],{"class":887},"payment",[621,4632,4485],{"class":631},[621,4634,682],{"class":631},[621,4636,675],{"class":631},[621,4638,4490],{"class":631},[621,4640,1714],{"class":1252},[621,4642,4485],{"class":631},[621,4644,682],{"class":631},[621,4646,4490],{"class":631},[621,4648,1034],{"class":645},[621,4650,4485],{"class":631},[621,4652,672],{"class":631},[621,4654,4490],{"class":631},[621,4656,3717],{"class":1252},[621,4658,4485],{"class":631},[621,4660,682],{"class":631},[621,4662,4490],{"class":631},[621,4664,1048],{"class":645},[621,4666,4485],{"class":631},[621,4668,1280],{"class":631},[621,4670,4671],{"class":623,"line":1532},[621,4672,1646],{"class":631},[599,4674,4676],{"id":4675},"next-steps","Next Steps",[561,4678,4679,4684,4689,4694],{},[564,4680,4681,4683],{},[545,4682,39],{"href":40}," - Fire-and-forget logs when you don't need context accumulation",[564,4685,4686,4688],{},[545,4687,68],{"href":69}," - Add compile-time type safety to your wide events",[564,4690,4691,4693],{},[545,4692,49],{"href":50}," - Errors with actionable context",[564,4695,4696,4698],{},[545,4697,217],{"href":222}," - Auto-managed request logging per framework",[4700,4701,4702],"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":4704},[4705,4706,4714,4717,4723,4730,4731],{"id":601,"depth":654,"text":602},{"id":1348,"depth":654,"text":1349,"children":4707},[4708,4710,4712],{"id":1353,"depth":698,"text":4709},"createLogger (General Purpose)",{"id":1698,"depth":698,"text":4711},"createRequestLogger (HTTP Contexts)",{"id":1947,"depth":698,"text":4713},"useLogger (Retrieving the Request Logger)",{"id":2165,"depth":654,"text":2166,"children":4715},[4716],{"id":2236,"depth":698,"text":2239},{"id":2480,"depth":654,"text":2481,"children":4718},[4719,4720,4721,4722],{"id":2497,"depth":698,"text":2498},{"id":2712,"depth":698,"text":2713},{"id":2807,"depth":698,"text":2808},{"id":2981,"depth":698,"text":2982},{"id":3164,"depth":654,"text":513,"children":4724},[4725,4726,4727,4728,4729],{"id":3167,"depth":698,"text":3168},{"id":3267,"depth":698,"text":3268},{"id":3430,"depth":698,"text":3431},{"id":3838,"depth":698,"text":3839},{"id":4240,"depth":698,"text":4241},{"id":4374,"depth":654,"text":4375},{"id":4675,"depth":654,"text":4676},"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",[4735,4737],{"label":49,"icon":52,"to":50,"color":541,"variant":4736},"subtle",{"label":513,"icon":376,"to":514,"color":541,"variant":4736},{},{"icon":47},{"title":44,"description":4732},"_-MHW1qSpHWdAODh5k7p-pA7X9xHWh6tilXG9b3-uRQ",[4743,4745],{"title":39,"path":40,"stem":41,"description":4744,"icon":42,"children":-1},"evlog's general-purpose logger, a drop-in for console.log, pino, or consola, with the same levels, drains, redaction, and output as wide events.",{"title":49,"path":50,"stem":51,"description":4746,"icon":52,"children":-1},"Create errors that explain why they occurred and how to fix them. Add actionable context with why, fix, and link fields for humans and AI agents.",1786800757552]