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