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