[{"data":1,"prerenderedAt":1586},["ShallowReactive",2],{"navigation_docs":3,"-start-introduction":451,"-start-introduction-surround":1582},[4,30,80,245,365,420],{"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,353,358],{"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":349,"path":350,"stem":351,"icon":352},"Enrichers","\u002Fuse-cases\u002Fenrichers","4.use-cases\u002F5.enrichers","i-lucide-sparkles",{"title":354,"path":355,"stem":356,"icon":357},"eve","\u002Fuse-cases\u002Feve","4.use-cases\u002F5.eve","i-custom-eve",{"title":284,"path":359,"stem":360,"children":361,"page":29},"\u002Fuse-cases\u002Ftelemetry","4.use-cases\u002F6.telemetry",[362],{"title":284,"path":363,"stem":364,"icon":315},"\u002Fuse-cases\u002Ftelemetry\u002Foverview","4.use-cases\u002F6.telemetry\u002F01.overview",{"title":366,"path":367,"stem":368,"children":369,"page":29},"Extend","\u002Fextend","5.extend",[370,374,379,384,389,393,397,401,405,410,415],{"title":36,"path":371,"stem":372,"icon":373},"\u002Fextend\u002Foverview","5.extend\u002F0.overview","i-lucide-blocks",{"title":375,"path":376,"stem":377,"icon":378},"Stream","\u002Fextend\u002Fstream","5.extend\u002F1.stream","i-lucide-radio-tower",{"title":380,"path":381,"stem":382,"icon":383},"Custom framework","\u002Fextend\u002Fcustom-framework","5.extend\u002F10.custom-framework","i-lucide-puzzle",{"title":385,"path":386,"stem":387,"icon":388},"FS reader","\u002Fextend\u002Ffs-reader","5.extend\u002F2.fs-reader","i-lucide-folder-search",{"title":345,"path":390,"stem":391,"icon":392},"\u002Fextend\u002Fconsumer-recipes","5.extend\u002F3.consumer-recipes","i-lucide-chef-hat",{"title":394,"path":395,"stem":396,"icon":373},"Plugins","\u002Fextend\u002Fplugins","5.extend\u002F4.plugins",{"title":398,"path":399,"stem":400,"icon":352},"Custom enrichers","\u002Fextend\u002Fcustom-enrichers","5.extend\u002F5.custom-enrichers",{"title":402,"path":403,"stem":404,"icon":64},"Tail sampling","\u002Fextend\u002Ftail-sampling","5.extend\u002F6.tail-sampling",{"title":406,"path":407,"stem":408,"icon":409},"Identity headers","\u002Fextend\u002Fidentity-headers","5.extend\u002F7.identity-headers","i-lucide-fingerprint",{"title":411,"path":412,"stem":413,"icon":414},"Custom drains","\u002Fextend\u002Fcustom-drains","5.extend\u002F8.custom-drains","i-lucide-share-2",{"title":416,"path":417,"stem":418,"icon":419},"Drain pipeline","\u002Fextend\u002Fdrain-pipeline","5.extend\u002F9.drain-pipeline","i-lucide-workflow",{"title":421,"path":422,"stem":423,"children":424,"page":29},"Reference","\u002Freference","6.reference",[425,430,433,438,442,447],{"title":426,"path":427,"stem":428,"icon":429},"Configuration","\u002Freference\u002Fconfiguration","6.reference\u002F1.configuration","i-lucide-settings",{"title":312,"path":431,"stem":432,"icon":315},"\u002Freference\u002Fperformance","6.reference\u002F2.performance",{"title":434,"path":435,"stem":436,"icon":437},"Vite Plugin","\u002Freference\u002Fvite-plugin","6.reference\u002F3.vite-plugin","i-custom-vite",{"title":439,"path":440,"stem":441,"icon":318},"Best Practices","\u002Freference\u002Fbest-practices","6.reference\u002F4.best-practices",{"title":443,"path":444,"stem":445,"icon":446},"vs Other Loggers","\u002Freference\u002Fvs-other-loggers","6.reference\u002F5.vs-other-loggers","i-lucide-scale",{"title":448,"path":449,"stem":450,"icon":352},"Agent Skills","\u002Freference\u002Fagent-skills","6.reference\u002F6.agent-skills",{"id":452,"title":10,"body":453,"description":1567,"extension":1568,"links":1569,"meta":1578,"navigation":1579,"path":11,"seo":1580,"stem":12,"__hash__":1581},"docs\u002F1.start\u002F1.introduction.md",{"type":454,"value":455,"toc":1556},"minimark",[456,469,486,491,494,499,521,534,538,541,604,611,615,618,622,628,770,773,776,1199,1202,1205,1217,1470,1474,1481,1504,1514,1518,1552],[457,458,459,463,464,468],"p",{},[460,461,462],"strong",{},"evlog"," is a modern TypeScript logger built for everything you ship. It gives you simple structured logs (a drop-in for ",[465,466,467],"code",{},"console.log",", pino, or consola), wide events that accumulate context across an operation, and structured errors that explain why they happened — all in one API, all behind the same drain pipeline. Use it in CLIs, libraries, background jobs, edge workers, and HTTP handlers without switching loggers.",[457,470,471,472,479,480,485],{},"Inspired by ",[473,474,478],"a",{"href":475,"rel":476},"https:\u002F\u002Floggingsucks.com\u002F",[477],"nofollow","Logging Sucks"," by ",[473,481,484],{"href":482,"rel":483},"https:\u002F\u002Fx.com\u002Fboristane",[477],"Boris Tane",".",[487,488,490],"h2",{"id":489},"philosophy","Philosophy",[457,492,493],{},"Traditional logging is broken. Your logs are scattered across dozens of files. Each request generates 10+ log lines. When something goes wrong, you're left grep-ing through noise hoping to find signal.",[457,495,496,498],{},[460,497,462],{}," takes a different approach:",[500,501,502,510,513,516],"card-group",{},[503,504,506,507,509],"card",{"icon":44,"title":505},"Structured Logging","Replace ",[465,508,467],{}," with typed, structured events that flow through a drain pipeline. Same level filtering, redaction, and pretty\u002FJSON output as pino or consola.",[503,511,512],{"icon":49,"title":46},"Accumulate context over any unit of work (a request, script, or job) and emit once. The two modes coexist — neither is an upgrade of the other.",[503,514,515],{"icon":54,"title":51},"Errors that explain why they occurred and how to fix them.",[503,517,520],{"icon":518,"title":519},"i-lucide-palette","Pretty for Dev","Human-readable in development, machine-parseable JSON in production.",[522,523,526,527,530,531,533],"callout",{"color":524,"icon":525},"info","i-lucide-globe","Not running an HTTP framework? See ",[473,528,529],{"href":228},"Standalone TypeScript"," for scripts, workers, and CLIs, and ",[473,532,222],{"href":223}," for the edge runtime.",[487,535,537],{"id":536},"why-evlog-over-pino-winston-or-consola","Why evlog over pino, winston, or consola",[457,539,540],{},"evlog is a fully-featured general-purpose logger that happens to also do wide events. Concretely:",[542,543,544,555,573,590],"ul",{},[545,546,547,550,551,554],"li",{},[460,548,549],{},"Zero transitive dependencies"," and ~6 kB gzip — nothing to audit, nothing that breaks on the next Node LTS. Benchmarked at ",[473,552,553],{"href":431},"~3 µs\u002Frequest",", 7.7x faster than pino in the wide event pattern (1 event vs 4 log lines) and competitive on every other path.",[545,556,557,560,561,564,565,568,569,572],{},[460,558,559],{},"Same API in every context"," — scripts, frameworks, edge runtimes, browser, library code. No ",[465,562,563],{},"pino-http"," vs ",[465,566,567],{},"pino"," split, no separate ",[465,570,571],{},"consola"," reporters per environment.",[545,574,575,589],{},[460,576,577,578,581,582,581,585,588],{},"Structured errors with ",[465,579,580],{},"why"," \u002F ",[465,583,584],{},"fix",[465,586,587],{},"link"," built in"," — your error toast finally tells users what went wrong and what to do, your on-call stops reverse-engineering stack traces.",[545,591,592,595,596,599,600,603],{},[460,593,594],{},"Wide events as a free upgrade path"," — when you need to correlate context across an operation, the same logger gives you ",[465,597,598],{},"log.set"," + ",[465,601,602],{},"log.emit"," instead of stitching log lines together later.",[457,605,606,607,610],{},"See the full ",[473,608,609],{"href":444},"feature comparison"," (parity matrix, honest gaps, and migration snippets) for a side-by-side with pino, winston, and consola.",[487,612,614],{"id":613},"three-ways-to-log","Three Ways to Log",[457,616,617],{},"evlog provides three APIs for different contexts. You can use all three in the same project.",[619,620,41],"h3",{"id":621},"simple-logging",[457,623,624,625,627],{},"Fire-and-forget structured logs. Replace ",[465,626,467],{},", consola, or pino:",[629,630,636],"pre",{"className":631,"code":632,"filename":633,"language":634,"meta":635,"style":635},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { log } from 'evlog'\n\nlog.info('auth', 'User logged in')\nlog.error({ action: 'payment', error: 'card_declined', userId: 42 })\n","src\u002Findex.ts","typescript","",[465,637,638,670,677,712],{"__ignoreMap":635},[639,640,643,647,651,655,658,661,664,667],"span",{"class":641,"line":642},"line",1,[639,644,646],{"class":645},"s7zQu","import",[639,648,650],{"class":649},"sMK4o"," {",[639,652,654],{"class":653},"sTEyZ"," log",[639,656,657],{"class":649}," }",[639,659,660],{"class":645}," from",[639,662,663],{"class":649}," '",[639,665,462],{"class":666},"sfazB",[639,668,669],{"class":649},"'\n",[639,671,673],{"class":641,"line":672},2,[639,674,676],{"emptyLinePlaceholder":675},true,"\n",[639,678,680,683,685,688,691,694,697,699,702,704,707,709],{"class":641,"line":679},3,[639,681,682],{"class":653},"log",[639,684,485],{"class":649},[639,686,524],{"class":687},"s2Zo4",[639,689,690],{"class":653},"(",[639,692,693],{"class":649},"'",[639,695,696],{"class":666},"auth",[639,698,693],{"class":649},[639,700,701],{"class":649},",",[639,703,663],{"class":649},[639,705,706],{"class":666},"User logged in",[639,708,693],{"class":649},[639,710,711],{"class":653},")\n",[639,713,715,717,719,722,724,727,731,734,736,739,741,743,746,748,750,753,755,757,760,762,766,768],{"class":641,"line":714},4,[639,716,682],{"class":653},[639,718,485],{"class":649},[639,720,721],{"class":687},"error",[639,723,690],{"class":653},[639,725,726],{"class":649},"{",[639,728,730],{"class":729},"swJcz"," action",[639,732,733],{"class":649},":",[639,735,663],{"class":649},[639,737,738],{"class":666},"payment",[639,740,693],{"class":649},[639,742,701],{"class":649},[639,744,745],{"class":729}," error",[639,747,733],{"class":649},[639,749,663],{"class":649},[639,751,752],{"class":666},"card_declined",[639,754,693],{"class":649},[639,756,701],{"class":649},[639,758,759],{"class":729}," userId",[639,761,733],{"class":649},[639,763,765],{"class":764},"sbssI"," 42",[639,767,657],{"class":649},[639,769,711],{"class":653},[619,771,46],{"id":772},"wide-events",[457,774,775],{},"Accumulate context progressively over any operation, then emit a single comprehensive event:",[777,778,779,912,1042],"code-group",{},[629,780,783],{"className":631,"code":781,"filename":782,"language":634,"meta":635,"style":635},"import { createLogger } from 'evlog'\n\nconst log = createLogger({ jobId: 'sync-001', queue: 'emails' })\nlog.set({ batch: { size: 50, processed: 50 } })\nlog.emit()\n","scripts\u002Fsync-job.ts",[465,784,785,804,808,856,899],{"__ignoreMap":635},[639,786,787,789,791,794,796,798,800,802],{"class":641,"line":642},[639,788,646],{"class":645},[639,790,650],{"class":649},[639,792,793],{"class":653}," createLogger",[639,795,657],{"class":649},[639,797,660],{"class":645},[639,799,663],{"class":649},[639,801,462],{"class":666},[639,803,669],{"class":649},[639,805,806],{"class":641,"line":672},[639,807,676],{"emptyLinePlaceholder":675},[639,809,810,814,817,820,822,824,826,829,831,833,836,838,840,843,845,847,850,852,854],{"class":641,"line":679},[639,811,813],{"class":812},"spNyl","const",[639,815,816],{"class":653}," log ",[639,818,819],{"class":649},"=",[639,821,793],{"class":687},[639,823,690],{"class":653},[639,825,726],{"class":649},[639,827,828],{"class":729}," jobId",[639,830,733],{"class":649},[639,832,663],{"class":649},[639,834,835],{"class":666},"sync-001",[639,837,693],{"class":649},[639,839,701],{"class":649},[639,841,842],{"class":729}," queue",[639,844,733],{"class":649},[639,846,663],{"class":649},[639,848,849],{"class":666},"emails",[639,851,693],{"class":649},[639,853,657],{"class":649},[639,855,711],{"class":653},[639,857,858,860,862,865,867,869,872,874,876,879,881,884,886,889,891,893,895,897],{"class":641,"line":714},[639,859,682],{"class":653},[639,861,485],{"class":649},[639,863,864],{"class":687},"set",[639,866,690],{"class":653},[639,868,726],{"class":649},[639,870,871],{"class":729}," batch",[639,873,733],{"class":649},[639,875,650],{"class":649},[639,877,878],{"class":729}," size",[639,880,733],{"class":649},[639,882,883],{"class":764}," 50",[639,885,701],{"class":649},[639,887,888],{"class":729}," processed",[639,890,733],{"class":649},[639,892,883],{"class":764},[639,894,657],{"class":649},[639,896,657],{"class":649},[639,898,711],{"class":653},[639,900,902,904,906,909],{"class":641,"line":901},5,[639,903,682],{"class":653},[639,905,485],{"class":649},[639,907,908],{"class":687},"emit",[639,910,911],{"class":653},"()\n",[629,913,916],{"className":631,"code":914,"filename":915,"language":634,"meta":635,"style":635},"import { createRequestLogger } from 'evlog'\n\nconst log = createRequestLogger({ method: 'POST', path: '\u002Fapi\u002Fcheckout' })\nlog.set({ user: { id: 1, plan: 'pro' } })\nlog.emit()\n","src\u002Fworker.ts",[465,917,918,937,941,985,1032],{"__ignoreMap":635},[639,919,920,922,924,927,929,931,933,935],{"class":641,"line":642},[639,921,646],{"class":645},[639,923,650],{"class":649},[639,925,926],{"class":653}," createRequestLogger",[639,928,657],{"class":649},[639,930,660],{"class":645},[639,932,663],{"class":649},[639,934,462],{"class":666},[639,936,669],{"class":649},[639,938,939],{"class":641,"line":672},[639,940,676],{"emptyLinePlaceholder":675},[639,942,943,945,947,949,951,953,955,958,960,962,965,967,969,972,974,976,979,981,983],{"class":641,"line":679},[639,944,813],{"class":812},[639,946,816],{"class":653},[639,948,819],{"class":649},[639,950,926],{"class":687},[639,952,690],{"class":653},[639,954,726],{"class":649},[639,956,957],{"class":729}," method",[639,959,733],{"class":649},[639,961,663],{"class":649},[639,963,964],{"class":666},"POST",[639,966,693],{"class":649},[639,968,701],{"class":649},[639,970,971],{"class":729}," path",[639,973,733],{"class":649},[639,975,663],{"class":649},[639,977,978],{"class":666},"\u002Fapi\u002Fcheckout",[639,980,693],{"class":649},[639,982,657],{"class":649},[639,984,711],{"class":653},[639,986,987,989,991,993,995,997,1000,1002,1004,1007,1009,1012,1014,1017,1019,1021,1024,1026,1028,1030],{"class":641,"line":714},[639,988,682],{"class":653},[639,990,485],{"class":649},[639,992,864],{"class":687},[639,994,690],{"class":653},[639,996,726],{"class":649},[639,998,999],{"class":729}," user",[639,1001,733],{"class":649},[639,1003,650],{"class":649},[639,1005,1006],{"class":729}," id",[639,1008,733],{"class":649},[639,1010,1011],{"class":764}," 1",[639,1013,701],{"class":649},[639,1015,1016],{"class":729}," plan",[639,1018,733],{"class":649},[639,1020,663],{"class":649},[639,1022,1023],{"class":666},"pro",[639,1025,693],{"class":649},[639,1027,657],{"class":649},[639,1029,657],{"class":649},[639,1031,711],{"class":653},[639,1033,1034,1036,1038,1040],{"class":641,"line":901},[639,1035,682],{"class":653},[639,1037,485],{"class":649},[639,1039,908],{"class":687},[639,1041,911],{"class":653},[629,1043,1046],{"className":631,"code":1044,"filename":1045,"language":634,"meta":635,"style":635},"import { useLogger } from 'evlog'\n\nexport default defineEventHandler(async (event) => {\n  const log = useLogger(event)\n  log.set({ user: { id: 1, plan: 'pro' } })\n  return { success: true }\n  \u002F\u002F auto-emitted on response end\n})\n","server\u002Fapi\u002Fcheckout.post.ts",[465,1047,1048,1067,1071,1103,1121,1164,1184,1191],{"__ignoreMap":635},[639,1049,1050,1052,1054,1057,1059,1061,1063,1065],{"class":641,"line":642},[639,1051,646],{"class":645},[639,1053,650],{"class":649},[639,1055,1056],{"class":653}," useLogger",[639,1058,657],{"class":649},[639,1060,660],{"class":645},[639,1062,663],{"class":649},[639,1064,462],{"class":666},[639,1066,669],{"class":649},[639,1068,1069],{"class":641,"line":672},[639,1070,676],{"emptyLinePlaceholder":675},[639,1072,1073,1076,1079,1082,1084,1087,1090,1094,1097,1100],{"class":641,"line":679},[639,1074,1075],{"class":645},"export",[639,1077,1078],{"class":645}," default",[639,1080,1081],{"class":687}," defineEventHandler",[639,1083,690],{"class":653},[639,1085,1086],{"class":812},"async",[639,1088,1089],{"class":649}," (",[639,1091,1093],{"class":1092},"sHdIc","event",[639,1095,1096],{"class":649},")",[639,1098,1099],{"class":812}," =>",[639,1101,1102],{"class":649}," {\n",[639,1104,1105,1108,1110,1113,1115,1117,1119],{"class":641,"line":714},[639,1106,1107],{"class":812},"  const",[639,1109,654],{"class":653},[639,1111,1112],{"class":649}," =",[639,1114,1056],{"class":687},[639,1116,690],{"class":729},[639,1118,1093],{"class":653},[639,1120,711],{"class":729},[639,1122,1123,1126,1128,1130,1132,1134,1136,1138,1140,1142,1144,1146,1148,1150,1152,1154,1156,1158,1160,1162],{"class":641,"line":901},[639,1124,1125],{"class":653},"  log",[639,1127,485],{"class":649},[639,1129,864],{"class":687},[639,1131,690],{"class":729},[639,1133,726],{"class":649},[639,1135,999],{"class":729},[639,1137,733],{"class":649},[639,1139,650],{"class":649},[639,1141,1006],{"class":729},[639,1143,733],{"class":649},[639,1145,1011],{"class":764},[639,1147,701],{"class":649},[639,1149,1016],{"class":729},[639,1151,733],{"class":649},[639,1153,663],{"class":649},[639,1155,1023],{"class":666},[639,1157,693],{"class":649},[639,1159,657],{"class":649},[639,1161,657],{"class":649},[639,1163,711],{"class":729},[639,1165,1167,1170,1172,1175,1177,1181],{"class":641,"line":1166},6,[639,1168,1169],{"class":645},"  return",[639,1171,650],{"class":649},[639,1173,1174],{"class":729}," success",[639,1176,733],{"class":649},[639,1178,1180],{"class":1179},"sfNiH"," true",[639,1182,1183],{"class":649}," }\n",[639,1185,1187],{"class":641,"line":1186},7,[639,1188,1190],{"class":1189},"sHwdD","  \u002F\u002F auto-emitted on response end\n",[639,1192,1194,1197],{"class":641,"line":1193},8,[639,1195,1196],{"class":649},"}",[639,1198,711],{"class":653},[457,1200,1201],{},"One log, all context. Everything you need to understand what happened.",[619,1203,51],{"id":1204},"structured-errors",[457,1206,1207,1208,1210,1211,1213,1214,1216],{},"Errors with actionable context: ",[465,1209,580],{}," it happened, how to ",[465,1212,584],{}," it, and a ",[465,1215,587],{}," to docs:",[777,1218,1219,1343],{},[629,1220,1222],{"className":631,"code":1221,"filename":1045,"language":634,"meta":635,"style":635},"import { createError } from 'evlog'\n\nthrow createError({\n  message: 'Payment failed',\n  status: 402,\n  why: 'Card declined by issuer (insufficient funds)',\n  fix: 'Try a different payment method or contact your bank',\n  link: 'https:\u002F\u002Fdocs.example.com\u002Fpayments\u002Fdeclined',\n})\n",[465,1223,1224,1243,1247,1259,1276,1288,1304,1320,1336],{"__ignoreMap":635},[639,1225,1226,1228,1230,1233,1235,1237,1239,1241],{"class":641,"line":642},[639,1227,646],{"class":645},[639,1229,650],{"class":649},[639,1231,1232],{"class":653}," createError",[639,1234,657],{"class":649},[639,1236,660],{"class":645},[639,1238,663],{"class":649},[639,1240,462],{"class":666},[639,1242,669],{"class":649},[639,1244,1245],{"class":641,"line":672},[639,1246,676],{"emptyLinePlaceholder":675},[639,1248,1249,1252,1254,1256],{"class":641,"line":679},[639,1250,1251],{"class":645},"throw",[639,1253,1232],{"class":687},[639,1255,690],{"class":653},[639,1257,1258],{"class":649},"{\n",[639,1260,1261,1264,1266,1268,1271,1273],{"class":641,"line":714},[639,1262,1263],{"class":729},"  message",[639,1265,733],{"class":649},[639,1267,663],{"class":649},[639,1269,1270],{"class":666},"Payment failed",[639,1272,693],{"class":649},[639,1274,1275],{"class":649},",\n",[639,1277,1278,1281,1283,1286],{"class":641,"line":901},[639,1279,1280],{"class":729},"  status",[639,1282,733],{"class":649},[639,1284,1285],{"class":764}," 402",[639,1287,1275],{"class":649},[639,1289,1290,1293,1295,1297,1300,1302],{"class":641,"line":1166},[639,1291,1292],{"class":729},"  why",[639,1294,733],{"class":649},[639,1296,663],{"class":649},[639,1298,1299],{"class":666},"Card declined by issuer (insufficient funds)",[639,1301,693],{"class":649},[639,1303,1275],{"class":649},[639,1305,1306,1309,1311,1313,1316,1318],{"class":641,"line":1186},[639,1307,1308],{"class":729},"  fix",[639,1310,733],{"class":649},[639,1312,663],{"class":649},[639,1314,1315],{"class":666},"Try a different payment method or contact your bank",[639,1317,693],{"class":649},[639,1319,1275],{"class":649},[639,1321,1322,1325,1327,1329,1332,1334],{"class":641,"line":1193},[639,1323,1324],{"class":729},"  link",[639,1326,733],{"class":649},[639,1328,663],{"class":649},[639,1330,1331],{"class":666},"https:\u002F\u002Fdocs.example.com\u002Fpayments\u002Fdeclined",[639,1333,693],{"class":649},[639,1335,1275],{"class":649},[639,1337,1339,1341],{"class":641,"line":1338},9,[639,1340,1196],{"class":649},[639,1342,711],{"class":653},[629,1344,1349],{"className":1345,"code":1346,"filename":1347,"language":1348,"meta":635,"style":635},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"statusCode\": 402,\n  \"message\": \"Payment failed\",\n  \"data\": {\n    \"why\": \"Card declined by issuer (insufficient funds)\",\n    \"fix\": \"Try a different payment method or contact your bank\",\n    \"link\": \"https:\u002F\u002Fdocs.example.com\u002Fpayments\u002Fdeclined\"\n  }\n}\n","Response","json",[465,1350,1351,1355,1372,1392,1405,1425,1443,1460,1465],{"__ignoreMap":635},[639,1352,1353],{"class":641,"line":642},[639,1354,1258],{"class":649},[639,1356,1357,1360,1363,1366,1368,1370],{"class":641,"line":672},[639,1358,1359],{"class":649},"  \"",[639,1361,1362],{"class":812},"statusCode",[639,1364,1365],{"class":649},"\"",[639,1367,733],{"class":649},[639,1369,1285],{"class":764},[639,1371,1275],{"class":649},[639,1373,1374,1376,1379,1381,1383,1386,1388,1390],{"class":641,"line":679},[639,1375,1359],{"class":649},[639,1377,1378],{"class":812},"message",[639,1380,1365],{"class":649},[639,1382,733],{"class":649},[639,1384,1385],{"class":649}," \"",[639,1387,1270],{"class":666},[639,1389,1365],{"class":649},[639,1391,1275],{"class":649},[639,1393,1394,1396,1399,1401,1403],{"class":641,"line":714},[639,1395,1359],{"class":649},[639,1397,1398],{"class":812},"data",[639,1400,1365],{"class":649},[639,1402,733],{"class":649},[639,1404,1102],{"class":649},[639,1406,1407,1410,1413,1415,1417,1419,1421,1423],{"class":641,"line":901},[639,1408,1409],{"class":649},"    \"",[639,1411,580],{"class":1412},"sBMFI",[639,1414,1365],{"class":649},[639,1416,733],{"class":649},[639,1418,1385],{"class":649},[639,1420,1299],{"class":666},[639,1422,1365],{"class":649},[639,1424,1275],{"class":649},[639,1426,1427,1429,1431,1433,1435,1437,1439,1441],{"class":641,"line":1166},[639,1428,1409],{"class":649},[639,1430,584],{"class":1412},[639,1432,1365],{"class":649},[639,1434,733],{"class":649},[639,1436,1385],{"class":649},[639,1438,1315],{"class":666},[639,1440,1365],{"class":649},[639,1442,1275],{"class":649},[639,1444,1445,1447,1449,1451,1453,1455,1457],{"class":641,"line":1186},[639,1446,1409],{"class":649},[639,1448,587],{"class":1412},[639,1450,1365],{"class":649},[639,1452,733],{"class":649},[639,1454,1385],{"class":649},[639,1456,1331],{"class":666},[639,1458,1459],{"class":649},"\"\n",[639,1461,1462],{"class":641,"line":1193},[639,1463,1464],{"class":649},"  }\n",[639,1466,1467],{"class":641,"line":1338},[639,1468,1469],{"class":649},"}\n",[487,1471,1473],{"id":1472},"why-context-matters","Why Context Matters",[457,1475,1476,1477,1480],{},"We're entering an era where AI agents build, debug, and maintain applications. These agents need ",[460,1478,1479],{},"structured context"," to work effectively:",[542,1482,1483,1490,1497],{},[545,1484,1485,1489],{},[460,1486,1487],{},[465,1488,580],{},": The root cause, so the agent understands what went wrong",[545,1491,1492,1496],{},[460,1493,1494],{},[465,1495,584],{},": An actionable solution the agent can suggest or apply",[545,1498,1499,1503],{},[460,1500,1501],{},[465,1502,587],{},": Documentation for complex issues",[457,1505,1506,1507,1509,1510,1513],{},"Traditional ",[465,1508,467],{}," and generic ",[465,1511,1512],{},"throw new Error()"," provide no actionable context. evlog's structured output is designed for both humans and AI to parse and act on.",[487,1515,1517],{"id":1516},"next-steps","Next Steps",[542,1519,1520,1525,1530,1535,1541,1547],{},[545,1521,1522,1524],{},[473,1523,15],{"href":16}," - The case for adopting evlog on day zero",[545,1526,1527,1529],{},[473,1528,20],{"href":21}," - Install evlog in your project",[545,1531,1532,1534],{},[473,1533,25],{"href":26}," - Get up and running in minutes",[545,1536,1537,1540],{},[473,1538,1539],{"href":37},"Logging Overview"," - Understand the three logging modes in depth",[545,1542,1543,1546],{},[473,1544,1545],{"href":444},"evlog vs pino, winston, consola"," - Feature parity, honest gaps, and migration snippets",[545,1548,1549,1551],{},[473,1550,529],{"href":228}," — scripts, workers, libraries without a web framework",[1553,1554,1555],"style",{},"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 .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}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 .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}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}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}",{"title":635,"searchDepth":672,"depth":672,"links":1557},[1558,1559,1560,1565,1566],{"id":489,"depth":672,"text":490},{"id":536,"depth":672,"text":537},{"id":613,"depth":672,"text":614,"children":1561},[1562,1563,1564],{"id":621,"depth":679,"text":41},{"id":772,"depth":679,"text":46},{"id":1204,"depth":679,"text":51},{"id":1472,"depth":672,"text":1473},{"id":1516,"depth":672,"text":1517},"A modern TypeScript logger built for everything you ship. Simple structured logs, wide events, and structured errors in one API — drop-in for console.log, pino, or consola.","md",[1570,1573],{"label":25,"icon":28,"to":26,"color":1571,"variant":1572},"neutral","subtle",{"label":1574,"icon":1575,"to":1576,"target":1577,"color":1571,"variant":1572},"GitHub","i-simple-icons-github","https:\u002F\u002Fgithub.com\u002Fhugorcd\u002Fevlog","_blank",{},{"icon":13},{"title":10,"description":1567},"mVhx71oKgHyTzLn-ydrK0KNoL7AriAU8krm9m2N2H60",[1583,1584],null,{"title":15,"path":16,"stem":17,"description":1585,"icon":18,"children":-1},"The cheapest moment to add structured logging is before the first request. Pick evlog on day zero and your application inherits a structured surface, typed catalogs, an audit trail, AI SDK telemetry, and a drain pipeline you don't have to build later.",1784142029722]