[{"data":1,"prerenderedAt":1554},["ShallowReactive",2],{"navigation_docs":3,"-start-introduction":424,"-start-introduction-surround":1550},[4,25,75,230,338,393],{"title":5,"path":6,"stem":7,"children":8,"page":24},"Start","\u002Fstart","1.start",[9,14,19],{"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},"Installation","\u002Fstart\u002Finstallation","1.start\u002F2.installation","i-lucide-download",{"title":20,"path":21,"stem":22,"icon":23},"Quick Start","\u002Fstart\u002Fquick-start","1.start\u002F3.quick-start","i-lucide-zap",false,{"title":26,"path":27,"stem":28,"children":29,"page":24},"Learn","\u002Flearn","2.learn",[30,35,40,45,50,55,60,65,70],{"title":31,"path":32,"stem":33,"icon":34},"Overview","\u002Flearn\u002Foverview","2.learn\u002F0.overview","i-lucide-list",{"title":36,"path":37,"stem":38,"icon":39},"Simple Logging","\u002Flearn\u002Fsimple-logging","2.learn\u002F1.simple-logging","i-lucide-terminal",{"title":41,"path":42,"stem":43,"icon":44},"Wide Events","\u002Flearn\u002Fwide-events","2.learn\u002F2.wide-events","i-lucide-layers",{"title":46,"path":47,"stem":48,"icon":49},"Structured Errors","\u002Flearn\u002Fstructured-errors","2.learn\u002F3.structured-errors","i-lucide-shield-alert",{"title":51,"path":52,"stem":53,"icon":54},"Lifecycle","\u002Flearn\u002Flifecycle","2.learn\u002F4.lifecycle","i-lucide-arrow-right-left",{"title":56,"path":57,"stem":58,"icon":59},"Sampling","\u002Flearn\u002Fsampling","2.learn\u002F5.sampling","i-lucide-filter",{"title":61,"path":62,"stem":63,"icon":64},"Auto-Redaction","\u002Flearn\u002Fredaction","2.learn\u002F6.redaction","i-lucide-eye-off",{"title":66,"path":67,"stem":68,"icon":69},"Typed Fields","\u002Flearn\u002Ftyped-fields","2.learn\u002F7.typed-fields","i-simple-icons-typescript",{"title":71,"path":72,"stem":73,"icon":74},"Catalogs","\u002Flearn\u002Fcatalogs","2.learn\u002F8.catalogs","i-lucide-book-open",{"title":76,"path":77,"stem":78,"children":79,"page":24},"Integrate","\u002Fintegrate","3.integrate",[80,84,147],{"title":31,"path":81,"stem":82,"icon":83},"\u002Fintegrate\u002Foverview","3.integrate\u002F0.overview","i-lucide-plug",{"title":85,"path":86,"stem":87,"children":88,"page":24},"Adapters","\u002Fintegrate\u002Fadapters","3.integrate\u002Fadapters",[89,92,132],{"title":31,"path":90,"stem":91,"icon":34},"\u002Fintegrate\u002Fadapters\u002Foverview","3.integrate\u002Fadapters\u002F01.overview",{"title":93,"path":94,"stem":95,"children":96,"page":24},"Cloud","\u002Fintegrate\u002Fadapters\u002Fcloud","3.integrate\u002Fadapters\u002Fcloud",[97,102,107,112,117,122,127],{"title":98,"path":99,"stem":100,"icon":101},"Axiom","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Faxiom","3.integrate\u002Fadapters\u002Fcloud\u002F01.axiom","i-custom-axiom",{"title":103,"path":104,"stem":105,"icon":106},"OTLP","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fotlp","3.integrate\u002Fadapters\u002Fcloud\u002F02.otlp","i-simple-icons-opentelemetry",{"title":108,"path":109,"stem":110,"icon":111},"PostHog","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fposthog","3.integrate\u002Fadapters\u002Fcloud\u002F03.posthog","i-simple-icons-posthog",{"title":113,"path":114,"stem":115,"icon":116},"Sentry","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fsentry","3.integrate\u002Fadapters\u002Fcloud\u002F04.sentry","i-simple-icons-sentry",{"title":118,"path":119,"stem":120,"icon":121},"Better Stack","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fbetter-stack","3.integrate\u002Fadapters\u002Fcloud\u002F05.better-stack","i-simple-icons-betterstack",{"title":123,"path":124,"stem":125,"icon":126},"Datadog","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fdatadog","3.integrate\u002Fadapters\u002Fcloud\u002F06.datadog","i-simple-icons-datadog",{"title":128,"path":129,"stem":130,"icon":131},"HyperDX","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fhyperdx","3.integrate\u002Fadapters\u002Fcloud\u002F07.hyperdx","i-custom-hyperdx",{"title":133,"path":134,"stem":135,"children":136,"page":24},"Self-Hosted","\u002Fintegrate\u002Fadapters\u002Fself-hosted","3.integrate\u002Fadapters\u002Fself-hosted",[137,142],{"title":138,"path":139,"stem":140,"icon":141},"File System","\u002Fintegrate\u002Fadapters\u002Fself-hosted\u002Ffs","3.integrate\u002Fadapters\u002Fself-hosted\u002F01.fs","i-lucide-hard-drive",{"title":143,"path":144,"stem":145,"icon":146},"NuxtHub","\u002Fintegrate\u002Fadapters\u002Fself-hosted\u002Fnuxthub","3.integrate\u002Fadapters\u002Fself-hosted\u002F02.nuxthub","i-simple-icons-nuxt",{"title":148,"path":149,"stem":150,"children":151,"page":24},"Frameworks","\u002Fintegrate\u002Fframeworks","3.integrate\u002Fframeworks",[152,156,161,166,171,176,181,186,191,196,201,206,211,216,220,225],{"title":31,"path":153,"stem":154,"icon":155},"\u002Fintegrate\u002Fframeworks\u002Foverview","3.integrate\u002Fframeworks\u002F00.overview","i-lucide-layout-grid",{"title":157,"path":158,"stem":159,"icon":160},"Nuxt","\u002Fintegrate\u002Fframeworks\u002Fnuxt","3.integrate\u002Fframeworks\u002F01.nuxt","i-simple-icons-nuxtdotjs",{"title":162,"path":163,"stem":164,"icon":165},"Next.js","\u002Fintegrate\u002Fframeworks\u002Fnextjs","3.integrate\u002Fframeworks\u002F02.nextjs","i-simple-icons-nextdotjs",{"title":167,"path":168,"stem":169,"icon":170},"SvelteKit","\u002Fintegrate\u002Fframeworks\u002Fsveltekit","3.integrate\u002Fframeworks\u002F03.sveltekit","i-simple-icons-svelte",{"title":172,"path":173,"stem":174,"icon":175},"Nitro","\u002Fintegrate\u002Fframeworks\u002Fnitro","3.integrate\u002Fframeworks\u002F04.nitro","i-custom-nitro",{"title":177,"path":178,"stem":179,"icon":180},"TanStack Start","\u002Fintegrate\u002Fframeworks\u002Ftanstack-start","3.integrate\u002Fframeworks\u002F05.tanstack-start","i-custom-tanstack",{"title":182,"path":183,"stem":184,"icon":185},"NestJS","\u002Fintegrate\u002Fframeworks\u002Fnestjs","3.integrate\u002Fframeworks\u002F06.nestjs","i-simple-icons-nestjs",{"title":187,"path":188,"stem":189,"icon":190},"Express","\u002Fintegrate\u002Fframeworks\u002Fexpress","3.integrate\u002Fframeworks\u002F07.express","i-simple-icons-express",{"title":192,"path":193,"stem":194,"icon":195},"Hono","\u002Fintegrate\u002Fframeworks\u002Fhono","3.integrate\u002Fframeworks\u002F08.hono","i-simple-icons-hono",{"title":197,"path":198,"stem":199,"icon":200},"Fastify","\u002Fintegrate\u002Fframeworks\u002Ffastify","3.integrate\u002Fframeworks\u002F09.fastify","i-simple-icons-fastify",{"title":202,"path":203,"stem":204,"icon":205},"Elysia","\u002Fintegrate\u002Fframeworks\u002Felysia","3.integrate\u002Fframeworks\u002F10.elysia","i-custom-elysia",{"title":207,"path":208,"stem":209,"icon":210},"React Router","\u002Fintegrate\u002Fframeworks\u002Freact-router","3.integrate\u002Fframeworks\u002F11.react-router","i-custom-reactrouter",{"title":212,"path":213,"stem":214,"icon":215},"Cloudflare Workers","\u002Fintegrate\u002Fframeworks\u002Fcloudflare-workers","3.integrate\u002Fframeworks\u002F12.cloudflare-workers","i-simple-icons-cloudflare",{"title":217,"path":218,"stem":219,"icon":69},"Standalone","\u002Fintegrate\u002Fframeworks\u002Fstandalone","3.integrate\u002Fframeworks\u002F13.standalone",{"title":221,"path":222,"stem":223,"icon":224},"Astro","\u002Fintegrate\u002Fframeworks\u002Fastro","3.integrate\u002Fframeworks\u002F14.astro","i-simple-icons-astro",{"title":226,"path":227,"stem":228,"icon":229},"AWS Lambda","\u002Fintegrate\u002Fframeworks\u002Faws-lambda","3.integrate\u002Fframeworks\u002F16.aws-lambda","i-custom-lambda",{"title":231,"path":232,"stem":233,"children":234,"page":24},"Use Cases","\u002Fuse-cases","4.use-cases",[235,239,244,273,301,333],{"title":31,"path":236,"stem":237,"icon":238},"\u002Fuse-cases\u002Foverview","4.use-cases\u002F0.overview","i-lucide-list-checks",{"title":240,"path":241,"stem":242,"icon":243},"Client Logging","\u002Fuse-cases\u002Fclient-logging","4.use-cases\u002F1.client-logging","i-lucide-monitor",{"title":245,"icon":246,"path":247,"stem":248,"children":249,"page":24},"AI SDK","i-simple-icons-vercel","\u002Fuse-cases\u002Fai-sdk","4.use-cases\u002F2.ai-sdk",[250,253,258,263,268],{"title":31,"path":251,"stem":252,"icon":34},"\u002Fuse-cases\u002Fai-sdk\u002Foverview","4.use-cases\u002F2.ai-sdk\u002F01.overview",{"title":254,"path":255,"stem":256,"icon":257},"Usage","\u002Fuse-cases\u002Fai-sdk\u002Fusage","4.use-cases\u002F2.ai-sdk\u002F02.usage","i-lucide-code",{"title":259,"path":260,"stem":261,"icon":262},"Options","\u002Fuse-cases\u002Fai-sdk\u002Foptions","4.use-cases\u002F2.ai-sdk\u002F03.options","i-lucide-sliders",{"title":264,"path":265,"stem":266,"icon":267},"Metadata","\u002Fuse-cases\u002Fai-sdk\u002Fmetadata","4.use-cases\u002F2.ai-sdk\u002F04.metadata","i-lucide-database",{"title":269,"path":270,"stem":271,"icon":272},"Telemetry","\u002Fuse-cases\u002Fai-sdk\u002Ftelemetry","4.use-cases\u002F2.ai-sdk\u002F05.telemetry","i-lucide-activity",{"title":274,"icon":275,"path":276,"stem":277,"children":278,"page":24},"Better Auth","i-simple-icons-betterauth","\u002Fuse-cases\u002Fbetter-auth","4.use-cases\u002F3.better-auth",[279,282,287,292,296],{"title":31,"path":280,"stem":281,"icon":34},"\u002Fuse-cases\u002Fbetter-auth\u002Foverview","4.use-cases\u002F3.better-auth\u002F01.overview",{"title":283,"path":284,"stem":285,"icon":286},"Identify User","\u002Fuse-cases\u002Fbetter-auth\u002Fidentify-user","4.use-cases\u002F3.better-auth\u002F02.identify-user","i-lucide-user-check",{"title":288,"path":289,"stem":290,"icon":291},"Middleware","\u002Fuse-cases\u002Fbetter-auth\u002Fmiddleware","4.use-cases\u002F3.better-auth\u002F03.middleware","i-lucide-shield",{"title":293,"path":294,"stem":295,"icon":243},"Client Sync","\u002Fuse-cases\u002Fbetter-auth\u002Fclient-sync","4.use-cases\u002F3.better-auth\u002F04.client-sync",{"title":297,"path":298,"stem":299,"icon":300},"Performance","\u002Fuse-cases\u002Fbetter-auth\u002Fperformance","4.use-cases\u002F3.better-auth\u002F05.performance","i-lucide-gauge",{"title":302,"icon":303,"path":304,"stem":305,"children":306,"page":24},"Audit Logs","i-lucide-shield-check","\u002Fuse-cases\u002Faudit","4.use-cases\u002F4.audit",[307,310,315,320,325,329],{"title":31,"path":308,"stem":309,"icon":34},"\u002Fuse-cases\u002Faudit\u002Foverview","4.use-cases\u002F4.audit\u002F01.overview",{"title":311,"path":312,"stem":313,"icon":314},"Schema","\u002Fuse-cases\u002Faudit\u002Fschema","4.use-cases\u002F4.audit\u002F02.schema","i-lucide-file-text",{"title":316,"path":317,"stem":318,"icon":319},"Recording","\u002Fuse-cases\u002Faudit\u002Frecording","4.use-cases\u002F4.audit\u002F03.recording","i-lucide-pen-line",{"title":321,"path":322,"stem":323,"icon":324},"Drains","\u002Fuse-cases\u002Faudit\u002Fpipeline","4.use-cases\u002F4.audit\u002F04.pipeline","i-lucide-link",{"title":326,"path":327,"stem":328,"icon":303},"Compliance","\u002Fuse-cases\u002Faudit\u002Fcompliance","4.use-cases\u002F4.audit\u002F05.compliance",{"title":330,"path":331,"stem":332,"icon":74},"Recipes","\u002Fuse-cases\u002Faudit\u002Frecipes","4.use-cases\u002F4.audit\u002F06.recipes",{"title":334,"path":335,"stem":336,"icon":337},"Enrichers","\u002Fuse-cases\u002Fenrichers","4.use-cases\u002F5.enrichers","i-lucide-sparkles",{"title":339,"path":340,"stem":341,"children":342,"page":24},"Extend","\u002Fextend","5.extend",[343,347,352,357,362,366,370,374,378,383,388],{"title":31,"path":344,"stem":345,"icon":346},"\u002Fextend\u002Foverview","5.extend\u002F0.overview","i-lucide-blocks",{"title":348,"path":349,"stem":350,"icon":351},"Stream","\u002Fextend\u002Fstream","5.extend\u002F1.stream","i-lucide-radio-tower",{"title":353,"path":354,"stem":355,"icon":356},"Custom framework","\u002Fextend\u002Fcustom-framework","5.extend\u002F10.custom-framework","i-lucide-puzzle",{"title":358,"path":359,"stem":360,"icon":361},"FS reader","\u002Fextend\u002Ffs-reader","5.extend\u002F2.fs-reader","i-lucide-folder-search",{"title":330,"path":363,"stem":364,"icon":365},"\u002Fextend\u002Fconsumer-recipes","5.extend\u002F3.consumer-recipes","i-lucide-chef-hat",{"title":367,"path":368,"stem":369,"icon":346},"Plugins","\u002Fextend\u002Fplugins","5.extend\u002F4.plugins",{"title":371,"path":372,"stem":373,"icon":337},"Custom enrichers","\u002Fextend\u002Fcustom-enrichers","5.extend\u002F5.custom-enrichers",{"title":375,"path":376,"stem":377,"icon":59},"Tail sampling","\u002Fextend\u002Ftail-sampling","5.extend\u002F6.tail-sampling",{"title":379,"path":380,"stem":381,"icon":382},"Identity headers","\u002Fextend\u002Fidentity-headers","5.extend\u002F7.identity-headers","i-lucide-fingerprint",{"title":384,"path":385,"stem":386,"icon":387},"Custom drains","\u002Fextend\u002Fcustom-drains","5.extend\u002F8.custom-drains","i-lucide-share-2",{"title":389,"path":390,"stem":391,"icon":392},"Drain pipeline","\u002Fextend\u002Fdrain-pipeline","5.extend\u002F9.drain-pipeline","i-lucide-workflow",{"title":394,"path":395,"stem":396,"children":397,"page":24},"Reference","\u002Freference","6.reference",[398,403,406,411,415,420],{"title":399,"path":400,"stem":401,"icon":402},"Configuration","\u002Freference\u002Fconfiguration","6.reference\u002F1.configuration","i-lucide-settings",{"title":297,"path":404,"stem":405,"icon":300},"\u002Freference\u002Fperformance","6.reference\u002F2.performance",{"title":407,"path":408,"stem":409,"icon":410},"Vite Plugin","\u002Freference\u002Fvite-plugin","6.reference\u002F3.vite-plugin","i-custom-vite",{"title":412,"path":413,"stem":414,"icon":303},"Best Practices","\u002Freference\u002Fbest-practices","6.reference\u002F4.best-practices",{"title":416,"path":417,"stem":418,"icon":419},"vs Other Loggers","\u002Freference\u002Fvs-other-loggers","6.reference\u002F5.vs-other-loggers","i-lucide-scale",{"title":421,"path":422,"stem":423,"icon":337},"Agent Skills","\u002Freference\u002Fagent-skills","6.reference\u002F6.agent-skills",{"id":425,"title":10,"body":426,"description":1535,"extension":1536,"links":1537,"meta":1546,"navigation":1547,"path":11,"seo":1548,"stem":12,"__hash__":1549},"docs\u002F1.start\u002F1.introduction.md",{"type":427,"value":428,"toc":1524},"minimark",[429,442,459,464,467,472,494,507,511,514,577,584,588,591,595,601,743,746,749,1172,1175,1178,1190,1443,1447,1454,1477,1487,1491,1520],[430,431,432,436,437,441],"p",{},[433,434,435],"strong",{},"evlog"," is a modern TypeScript logger built for everything you ship. It gives you simple structured logs (a drop-in for ",[438,439,440],"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.",[430,443,444,445,452,453,458],{},"Inspired by ",[446,447,451],"a",{"href":448,"rel":449},"https:\u002F\u002Floggingsucks.com\u002F",[450],"nofollow","Logging Sucks"," by ",[446,454,457],{"href":455,"rel":456},"https:\u002F\u002Fx.com\u002Fboristane",[450],"Boris Tane",".",[460,461,463],"h2",{"id":462},"philosophy","Philosophy",[430,465,466],{},"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.",[430,468,469,471],{},[433,470,435],{}," takes a different approach:",[473,474,475,483,486,489],"card-group",{},[476,477,479,480,482],"card",{"icon":39,"title":478},"Structured Logging","Replace ",[438,481,440],{}," with typed, structured events that flow through a drain pipeline. Same level filtering, redaction, and pretty\u002FJSON output as pino or consola.",[476,484,485],{"icon":44,"title":41},"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.",[476,487,488],{"icon":49,"title":46},"Errors that explain why they occurred and how to fix them.",[476,490,493],{"icon":491,"title":492},"i-lucide-palette","Pretty for Dev","Human-readable in development, machine-parseable JSON in production.",[495,496,499,500,503,504,506],"callout",{"color":497,"icon":498},"info","i-lucide-globe","Not running an HTTP framework? See ",[446,501,502],{"href":218},"Standalone TypeScript"," for scripts, workers, and CLIs, and ",[446,505,212],{"href":213}," for the edge runtime.",[460,508,510],{"id":509},"why-evlog-over-pino-winston-or-consola","Why evlog over pino, winston, or consola",[430,512,513],{},"evlog is a fully-featured general-purpose logger that happens to also do wide events. Concretely:",[515,516,517,528,546,563],"ul",{},[518,519,520,523,524,527],"li",{},[433,521,522],{},"Zero transitive dependencies"," and ~6 kB gzip — nothing to audit, nothing that breaks on the next Node LTS. Benchmarked at ",[446,525,526],{"href":404},"~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.",[518,529,530,533,534,537,538,541,542,545],{},[433,531,532],{},"Same API in every context"," — scripts, frameworks, edge runtimes, browser, library code. No ",[438,535,536],{},"pino-http"," vs ",[438,539,540],{},"pino"," split, no separate ",[438,543,544],{},"consola"," reporters per environment.",[518,547,548,562],{},[433,549,550,551,554,555,554,558,561],{},"Structured errors with ",[438,552,553],{},"why"," \u002F ",[438,556,557],{},"fix",[438,559,560],{},"link"," built in"," — your error toast finally tells users what went wrong and what to do, your on-call stops reverse-engineering stack traces.",[518,564,565,568,569,572,573,576],{},[433,566,567],{},"Wide events as a free upgrade path"," — when you need to correlate context across an operation, the same logger gives you ",[438,570,571],{},"log.set"," + ",[438,574,575],{},"log.emit"," instead of stitching log lines together later.",[430,578,579,580,583],{},"See the full ",[446,581,582],{"href":417},"feature comparison"," (parity matrix, honest gaps, and migration snippets) for a side-by-side with pino, winston, and consola.",[460,585,587],{"id":586},"three-ways-to-log","Three Ways to Log",[430,589,590],{},"evlog provides three APIs for different contexts. You can use all three in the same project.",[592,593,36],"h3",{"id":594},"simple-logging",[430,596,597,598,600],{},"Fire-and-forget structured logs. Replace ",[438,599,440],{},", consola, or pino:",[602,603,609],"pre",{"className":604,"code":605,"filename":606,"language":607,"meta":608,"style":608},"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","",[438,610,611,643,650,685],{"__ignoreMap":608},[612,613,616,620,624,628,631,634,637,640],"span",{"class":614,"line":615},"line",1,[612,617,619],{"class":618},"s7zQu","import",[612,621,623],{"class":622},"sMK4o"," {",[612,625,627],{"class":626},"sTEyZ"," log",[612,629,630],{"class":622}," }",[612,632,633],{"class":618}," from",[612,635,636],{"class":622}," '",[612,638,435],{"class":639},"sfazB",[612,641,642],{"class":622},"'\n",[612,644,646],{"class":614,"line":645},2,[612,647,649],{"emptyLinePlaceholder":648},true,"\n",[612,651,653,656,658,661,664,667,670,672,675,677,680,682],{"class":614,"line":652},3,[612,654,655],{"class":626},"log",[612,657,458],{"class":622},[612,659,497],{"class":660},"s2Zo4",[612,662,663],{"class":626},"(",[612,665,666],{"class":622},"'",[612,668,669],{"class":639},"auth",[612,671,666],{"class":622},[612,673,674],{"class":622},",",[612,676,636],{"class":622},[612,678,679],{"class":639},"User logged in",[612,681,666],{"class":622},[612,683,684],{"class":626},")\n",[612,686,688,690,692,695,697,700,704,707,709,712,714,716,719,721,723,726,728,730,733,735,739,741],{"class":614,"line":687},4,[612,689,655],{"class":626},[612,691,458],{"class":622},[612,693,694],{"class":660},"error",[612,696,663],{"class":626},[612,698,699],{"class":622},"{",[612,701,703],{"class":702},"swJcz"," action",[612,705,706],{"class":622},":",[612,708,636],{"class":622},[612,710,711],{"class":639},"payment",[612,713,666],{"class":622},[612,715,674],{"class":622},[612,717,718],{"class":702}," error",[612,720,706],{"class":622},[612,722,636],{"class":622},[612,724,725],{"class":639},"card_declined",[612,727,666],{"class":622},[612,729,674],{"class":622},[612,731,732],{"class":702}," userId",[612,734,706],{"class":622},[612,736,738],{"class":737},"sbssI"," 42",[612,740,630],{"class":622},[612,742,684],{"class":626},[592,744,41],{"id":745},"wide-events",[430,747,748],{},"Accumulate context progressively over any operation, then emit a single comprehensive event:",[750,751,752,885,1015],"code-group",{},[602,753,756],{"className":604,"code":754,"filename":755,"language":607,"meta":608,"style":608},"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",[438,757,758,777,781,829,872],{"__ignoreMap":608},[612,759,760,762,764,767,769,771,773,775],{"class":614,"line":615},[612,761,619],{"class":618},[612,763,623],{"class":622},[612,765,766],{"class":626}," createLogger",[612,768,630],{"class":622},[612,770,633],{"class":618},[612,772,636],{"class":622},[612,774,435],{"class":639},[612,776,642],{"class":622},[612,778,779],{"class":614,"line":645},[612,780,649],{"emptyLinePlaceholder":648},[612,782,783,787,790,793,795,797,799,802,804,806,809,811,813,816,818,820,823,825,827],{"class":614,"line":652},[612,784,786],{"class":785},"spNyl","const",[612,788,789],{"class":626}," log ",[612,791,792],{"class":622},"=",[612,794,766],{"class":660},[612,796,663],{"class":626},[612,798,699],{"class":622},[612,800,801],{"class":702}," jobId",[612,803,706],{"class":622},[612,805,636],{"class":622},[612,807,808],{"class":639},"sync-001",[612,810,666],{"class":622},[612,812,674],{"class":622},[612,814,815],{"class":702}," queue",[612,817,706],{"class":622},[612,819,636],{"class":622},[612,821,822],{"class":639},"emails",[612,824,666],{"class":622},[612,826,630],{"class":622},[612,828,684],{"class":626},[612,830,831,833,835,838,840,842,845,847,849,852,854,857,859,862,864,866,868,870],{"class":614,"line":687},[612,832,655],{"class":626},[612,834,458],{"class":622},[612,836,837],{"class":660},"set",[612,839,663],{"class":626},[612,841,699],{"class":622},[612,843,844],{"class":702}," batch",[612,846,706],{"class":622},[612,848,623],{"class":622},[612,850,851],{"class":702}," size",[612,853,706],{"class":622},[612,855,856],{"class":737}," 50",[612,858,674],{"class":622},[612,860,861],{"class":702}," processed",[612,863,706],{"class":622},[612,865,856],{"class":737},[612,867,630],{"class":622},[612,869,630],{"class":622},[612,871,684],{"class":626},[612,873,875,877,879,882],{"class":614,"line":874},5,[612,876,655],{"class":626},[612,878,458],{"class":622},[612,880,881],{"class":660},"emit",[612,883,884],{"class":626},"()\n",[602,886,889],{"className":604,"code":887,"filename":888,"language":607,"meta":608,"style":608},"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",[438,890,891,910,914,958,1005],{"__ignoreMap":608},[612,892,893,895,897,900,902,904,906,908],{"class":614,"line":615},[612,894,619],{"class":618},[612,896,623],{"class":622},[612,898,899],{"class":626}," createRequestLogger",[612,901,630],{"class":622},[612,903,633],{"class":618},[612,905,636],{"class":622},[612,907,435],{"class":639},[612,909,642],{"class":622},[612,911,912],{"class":614,"line":645},[612,913,649],{"emptyLinePlaceholder":648},[612,915,916,918,920,922,924,926,928,931,933,935,938,940,942,945,947,949,952,954,956],{"class":614,"line":652},[612,917,786],{"class":785},[612,919,789],{"class":626},[612,921,792],{"class":622},[612,923,899],{"class":660},[612,925,663],{"class":626},[612,927,699],{"class":622},[612,929,930],{"class":702}," method",[612,932,706],{"class":622},[612,934,636],{"class":622},[612,936,937],{"class":639},"POST",[612,939,666],{"class":622},[612,941,674],{"class":622},[612,943,944],{"class":702}," path",[612,946,706],{"class":622},[612,948,636],{"class":622},[612,950,951],{"class":639},"\u002Fapi\u002Fcheckout",[612,953,666],{"class":622},[612,955,630],{"class":622},[612,957,684],{"class":626},[612,959,960,962,964,966,968,970,973,975,977,980,982,985,987,990,992,994,997,999,1001,1003],{"class":614,"line":687},[612,961,655],{"class":626},[612,963,458],{"class":622},[612,965,837],{"class":660},[612,967,663],{"class":626},[612,969,699],{"class":622},[612,971,972],{"class":702}," user",[612,974,706],{"class":622},[612,976,623],{"class":622},[612,978,979],{"class":702}," id",[612,981,706],{"class":622},[612,983,984],{"class":737}," 1",[612,986,674],{"class":622},[612,988,989],{"class":702}," plan",[612,991,706],{"class":622},[612,993,636],{"class":622},[612,995,996],{"class":639},"pro",[612,998,666],{"class":622},[612,1000,630],{"class":622},[612,1002,630],{"class":622},[612,1004,684],{"class":626},[612,1006,1007,1009,1011,1013],{"class":614,"line":874},[612,1008,655],{"class":626},[612,1010,458],{"class":622},[612,1012,881],{"class":660},[612,1014,884],{"class":626},[602,1016,1019],{"className":604,"code":1017,"filename":1018,"language":607,"meta":608,"style":608},"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",[438,1020,1021,1040,1044,1076,1094,1137,1157,1164],{"__ignoreMap":608},[612,1022,1023,1025,1027,1030,1032,1034,1036,1038],{"class":614,"line":615},[612,1024,619],{"class":618},[612,1026,623],{"class":622},[612,1028,1029],{"class":626}," useLogger",[612,1031,630],{"class":622},[612,1033,633],{"class":618},[612,1035,636],{"class":622},[612,1037,435],{"class":639},[612,1039,642],{"class":622},[612,1041,1042],{"class":614,"line":645},[612,1043,649],{"emptyLinePlaceholder":648},[612,1045,1046,1049,1052,1055,1057,1060,1063,1067,1070,1073],{"class":614,"line":652},[612,1047,1048],{"class":618},"export",[612,1050,1051],{"class":618}," default",[612,1053,1054],{"class":660}," defineEventHandler",[612,1056,663],{"class":626},[612,1058,1059],{"class":785},"async",[612,1061,1062],{"class":622}," (",[612,1064,1066],{"class":1065},"sHdIc","event",[612,1068,1069],{"class":622},")",[612,1071,1072],{"class":785}," =>",[612,1074,1075],{"class":622}," {\n",[612,1077,1078,1081,1083,1086,1088,1090,1092],{"class":614,"line":687},[612,1079,1080],{"class":785},"  const",[612,1082,627],{"class":626},[612,1084,1085],{"class":622}," =",[612,1087,1029],{"class":660},[612,1089,663],{"class":702},[612,1091,1066],{"class":626},[612,1093,684],{"class":702},[612,1095,1096,1099,1101,1103,1105,1107,1109,1111,1113,1115,1117,1119,1121,1123,1125,1127,1129,1131,1133,1135],{"class":614,"line":874},[612,1097,1098],{"class":626},"  log",[612,1100,458],{"class":622},[612,1102,837],{"class":660},[612,1104,663],{"class":702},[612,1106,699],{"class":622},[612,1108,972],{"class":702},[612,1110,706],{"class":622},[612,1112,623],{"class":622},[612,1114,979],{"class":702},[612,1116,706],{"class":622},[612,1118,984],{"class":737},[612,1120,674],{"class":622},[612,1122,989],{"class":702},[612,1124,706],{"class":622},[612,1126,636],{"class":622},[612,1128,996],{"class":639},[612,1130,666],{"class":622},[612,1132,630],{"class":622},[612,1134,630],{"class":622},[612,1136,684],{"class":702},[612,1138,1140,1143,1145,1148,1150,1154],{"class":614,"line":1139},6,[612,1141,1142],{"class":618},"  return",[612,1144,623],{"class":622},[612,1146,1147],{"class":702}," success",[612,1149,706],{"class":622},[612,1151,1153],{"class":1152},"sfNiH"," true",[612,1155,1156],{"class":622}," }\n",[612,1158,1160],{"class":614,"line":1159},7,[612,1161,1163],{"class":1162},"sHwdD","  \u002F\u002F auto-emitted on response end\n",[612,1165,1167,1170],{"class":614,"line":1166},8,[612,1168,1169],{"class":622},"}",[612,1171,684],{"class":626},[430,1173,1174],{},"One log, all context. Everything you need to understand what happened.",[592,1176,46],{"id":1177},"structured-errors",[430,1179,1180,1181,1183,1184,1186,1187,1189],{},"Errors with actionable context: ",[438,1182,553],{}," it happened, how to ",[438,1185,557],{}," it, and a ",[438,1188,560],{}," to docs:",[750,1191,1192,1316],{},[602,1193,1195],{"className":604,"code":1194,"filename":1018,"language":607,"meta":608,"style":608},"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",[438,1196,1197,1216,1220,1232,1249,1261,1277,1293,1309],{"__ignoreMap":608},[612,1198,1199,1201,1203,1206,1208,1210,1212,1214],{"class":614,"line":615},[612,1200,619],{"class":618},[612,1202,623],{"class":622},[612,1204,1205],{"class":626}," createError",[612,1207,630],{"class":622},[612,1209,633],{"class":618},[612,1211,636],{"class":622},[612,1213,435],{"class":639},[612,1215,642],{"class":622},[612,1217,1218],{"class":614,"line":645},[612,1219,649],{"emptyLinePlaceholder":648},[612,1221,1222,1225,1227,1229],{"class":614,"line":652},[612,1223,1224],{"class":618},"throw",[612,1226,1205],{"class":660},[612,1228,663],{"class":626},[612,1230,1231],{"class":622},"{\n",[612,1233,1234,1237,1239,1241,1244,1246],{"class":614,"line":687},[612,1235,1236],{"class":702},"  message",[612,1238,706],{"class":622},[612,1240,636],{"class":622},[612,1242,1243],{"class":639},"Payment failed",[612,1245,666],{"class":622},[612,1247,1248],{"class":622},",\n",[612,1250,1251,1254,1256,1259],{"class":614,"line":874},[612,1252,1253],{"class":702},"  status",[612,1255,706],{"class":622},[612,1257,1258],{"class":737}," 402",[612,1260,1248],{"class":622},[612,1262,1263,1266,1268,1270,1273,1275],{"class":614,"line":1139},[612,1264,1265],{"class":702},"  why",[612,1267,706],{"class":622},[612,1269,636],{"class":622},[612,1271,1272],{"class":639},"Card declined by issuer (insufficient funds)",[612,1274,666],{"class":622},[612,1276,1248],{"class":622},[612,1278,1279,1282,1284,1286,1289,1291],{"class":614,"line":1159},[612,1280,1281],{"class":702},"  fix",[612,1283,706],{"class":622},[612,1285,636],{"class":622},[612,1287,1288],{"class":639},"Try a different payment method or contact your bank",[612,1290,666],{"class":622},[612,1292,1248],{"class":622},[612,1294,1295,1298,1300,1302,1305,1307],{"class":614,"line":1166},[612,1296,1297],{"class":702},"  link",[612,1299,706],{"class":622},[612,1301,636],{"class":622},[612,1303,1304],{"class":639},"https:\u002F\u002Fdocs.example.com\u002Fpayments\u002Fdeclined",[612,1306,666],{"class":622},[612,1308,1248],{"class":622},[612,1310,1312,1314],{"class":614,"line":1311},9,[612,1313,1169],{"class":622},[612,1315,684],{"class":626},[602,1317,1322],{"className":1318,"code":1319,"filename":1320,"language":1321,"meta":608,"style":608},"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",[438,1323,1324,1328,1345,1365,1378,1398,1416,1433,1438],{"__ignoreMap":608},[612,1325,1326],{"class":614,"line":615},[612,1327,1231],{"class":622},[612,1329,1330,1333,1336,1339,1341,1343],{"class":614,"line":645},[612,1331,1332],{"class":622},"  \"",[612,1334,1335],{"class":785},"statusCode",[612,1337,1338],{"class":622},"\"",[612,1340,706],{"class":622},[612,1342,1258],{"class":737},[612,1344,1248],{"class":622},[612,1346,1347,1349,1352,1354,1356,1359,1361,1363],{"class":614,"line":652},[612,1348,1332],{"class":622},[612,1350,1351],{"class":785},"message",[612,1353,1338],{"class":622},[612,1355,706],{"class":622},[612,1357,1358],{"class":622}," \"",[612,1360,1243],{"class":639},[612,1362,1338],{"class":622},[612,1364,1248],{"class":622},[612,1366,1367,1369,1372,1374,1376],{"class":614,"line":687},[612,1368,1332],{"class":622},[612,1370,1371],{"class":785},"data",[612,1373,1338],{"class":622},[612,1375,706],{"class":622},[612,1377,1075],{"class":622},[612,1379,1380,1383,1386,1388,1390,1392,1394,1396],{"class":614,"line":874},[612,1381,1382],{"class":622},"    \"",[612,1384,553],{"class":1385},"sBMFI",[612,1387,1338],{"class":622},[612,1389,706],{"class":622},[612,1391,1358],{"class":622},[612,1393,1272],{"class":639},[612,1395,1338],{"class":622},[612,1397,1248],{"class":622},[612,1399,1400,1402,1404,1406,1408,1410,1412,1414],{"class":614,"line":1139},[612,1401,1382],{"class":622},[612,1403,557],{"class":1385},[612,1405,1338],{"class":622},[612,1407,706],{"class":622},[612,1409,1358],{"class":622},[612,1411,1288],{"class":639},[612,1413,1338],{"class":622},[612,1415,1248],{"class":622},[612,1417,1418,1420,1422,1424,1426,1428,1430],{"class":614,"line":1159},[612,1419,1382],{"class":622},[612,1421,560],{"class":1385},[612,1423,1338],{"class":622},[612,1425,706],{"class":622},[612,1427,1358],{"class":622},[612,1429,1304],{"class":639},[612,1431,1432],{"class":622},"\"\n",[612,1434,1435],{"class":614,"line":1166},[612,1436,1437],{"class":622},"  }\n",[612,1439,1440],{"class":614,"line":1311},[612,1441,1442],{"class":622},"}\n",[460,1444,1446],{"id":1445},"why-context-matters","Why Context Matters",[430,1448,1449,1450,1453],{},"We're entering an era where AI agents build, debug, and maintain applications. These agents need ",[433,1451,1452],{},"structured context"," to work effectively:",[515,1455,1456,1463,1470],{},[518,1457,1458,1462],{},[433,1459,1460],{},[438,1461,553],{},": The root cause, so the agent understands what went wrong",[518,1464,1465,1469],{},[433,1466,1467],{},[438,1468,557],{},": An actionable solution the agent can suggest or apply",[518,1471,1472,1476],{},[433,1473,1474],{},[438,1475,560],{},": Documentation for complex issues",[430,1478,1479,1480,1482,1483,1486],{},"Traditional ",[438,1481,440],{}," and generic ",[438,1484,1485],{},"throw new Error()"," provide no actionable context. evlog's structured output is designed for both humans and AI to parse and act on.",[460,1488,1490],{"id":1489},"next-steps","Next Steps",[515,1492,1493,1498,1503,1509,1515],{},[518,1494,1495,1497],{},[446,1496,15],{"href":16}," - Install evlog in your project",[518,1499,1500,1502],{},[446,1501,20],{"href":21}," - Get up and running in minutes",[518,1504,1505,1508],{},[446,1506,1507],{"href":32},"Logging Overview"," - Understand the three logging modes in depth",[518,1510,1511,1514],{},[446,1512,1513],{"href":417},"evlog vs pino, winston, consola"," - Feature parity, honest gaps, and migration snippets",[518,1516,1517,1519],{},[446,1518,502],{"href":218}," — scripts, workers, libraries without a web framework",[1521,1522,1523],"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":608,"searchDepth":645,"depth":645,"links":1525},[1526,1527,1528,1533,1534],{"id":462,"depth":645,"text":463},{"id":509,"depth":645,"text":510},{"id":586,"depth":645,"text":587,"children":1529},[1530,1531,1532],{"id":594,"depth":652,"text":36},{"id":745,"depth":652,"text":41},{"id":1177,"depth":652,"text":46},{"id":1445,"depth":645,"text":1446},{"id":1489,"depth":645,"text":1490},"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",[1538,1541],{"label":20,"icon":23,"to":21,"color":1539,"variant":1540},"neutral","subtle",{"label":1542,"icon":1543,"to":1544,"target":1545,"color":1539,"variant":1540},"GitHub","i-simple-icons-github","https:\u002F\u002Fgithub.com\u002Fhugorcd\u002Fevlog","_blank",{},{"icon":13},{"title":10,"description":1535},"6gCCPhH5N1BfYMFT7G31xGX15oU3ia3Gev96XkRowDM",[1551,1552],null,{"title":15,"path":16,"stem":17,"description":1553,"icon":18,"children":-1},"Install evlog in your TypeScript project. Supports Nuxt, Next.js, SvelteKit, Hono, Express, Fastify, Elysia, NestJS, and standalone scripts.",1778365365767]