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