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