[{"data":1,"prerenderedAt":2358},["ShallowReactive",2],{"navigation_docs":3,"-start-introduction":607,"-start-introduction-surround":2354},[4,35,85,143,323,484,543,582],{"title":5,"path":6,"stem":7,"children":8,"page":34},"Start","\u002Fstart","1.start",[9,14,19,24,29],{"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",{"title":30,"path":31,"stem":32,"icon":33},"Choose your logger","\u002Fstart\u002Ftypescript-logging-library","1.start\u002F5.typescript-logging-library","i-lucide-file-code",false,{"title":36,"path":37,"stem":38,"children":39,"page":34},"Learn","\u002Flearn","2.learn",[40,45,50,55,60,65,70,75,80],{"title":41,"path":42,"stem":43,"icon":44},"Overview","\u002Flearn\u002Foverview","2.learn\u002F0.overview","i-lucide-list",{"title":46,"path":47,"stem":48,"icon":49},"Simple Logging","\u002Flearn\u002Fsimple-logging","2.learn\u002F1.simple-logging","i-lucide-terminal",{"title":51,"path":52,"stem":53,"icon":54},"Wide Events","\u002Flearn\u002Fwide-events","2.learn\u002F2.wide-events","i-lucide-layers",{"title":56,"path":57,"stem":58,"icon":59},"Structured Errors","\u002Flearn\u002Fstructured-errors","2.learn\u002F3.structured-errors","i-lucide-shield-alert",{"title":61,"path":62,"stem":63,"icon":64},"Lifecycle","\u002Flearn\u002Flifecycle","2.learn\u002F4.lifecycle","i-lucide-arrow-right-left",{"title":66,"path":67,"stem":68,"icon":69},"Sampling","\u002Flearn\u002Fsampling","2.learn\u002F5.sampling","i-lucide-filter",{"title":71,"path":72,"stem":73,"icon":74},"Auto-Redaction","\u002Flearn\u002Fredaction","2.learn\u002F6.redaction","i-lucide-eye-off",{"title":76,"path":77,"stem":78,"icon":79},"Typed Fields","\u002Flearn\u002Ftyped-fields","2.learn\u002F7.typed-fields","i-simple-icons-typescript",{"title":81,"path":82,"stem":83,"icon":84},"Catalogs","\u002Flearn\u002Fcatalogs","2.learn\u002F8.catalogs","i-lucide-book-open",{"title":86,"path":87,"stem":88,"children":89,"page":34},"CLI","\u002Fcli","3.cli",[90,93,98,103,108,113,118,123,128,133,138],{"title":41,"path":91,"stem":92,"icon":49},"\u002Fcli\u002Foverview","3.cli\u002F0.overview",{"title":94,"path":95,"stem":96,"icon":97},"init","\u002Fcli\u002Finit","3.cli\u002F1.init","i-lucide-wand-sparkles",{"title":99,"path":100,"stem":101,"icon":102},"logs","\u002Fcli\u002Flogs","3.cli\u002F10.logs","i-lucide-scroll-text",{"title":104,"path":105,"stem":106,"icon":107},"map","\u002Fcli\u002Fmap","3.cli\u002F2.map","i-lucide-radar",{"title":109,"path":110,"stem":111,"icon":112},"Rules","\u002Fcli\u002Frules","3.cli\u002F3.rules","i-lucide-list-checks",{"title":114,"path":115,"stem":116,"icon":117},"Scoring","\u002Fcli\u002Fscoring","3.cli\u002F4.scoring","i-lucide-gauge",{"title":119,"path":120,"stem":121,"icon":122},"CI","\u002Fcli\u002Fci","3.cli\u002F5.ci","i-lucide-git-pull-request",{"title":124,"path":125,"stem":126,"icon":127},"doctor","\u002Fcli\u002Fdoctor","3.cli\u002F6.doctor","i-lucide-stethoscope",{"title":129,"path":130,"stem":131,"icon":132},"telemetry","\u002Fcli\u002Ftelemetry","3.cli\u002F7.telemetry","i-lucide-bar-chart-3",{"title":134,"path":135,"stem":136,"icon":137},"agents","\u002Fcli\u002Fagents","3.cli\u002F8.agents","i-lucide-bot",{"title":139,"path":140,"stem":141,"icon":142},"Observability Score","\u002Fcli\u002Fobservability-score","3.cli\u002F9.observability-score","i-lucide-activity",{"title":144,"path":145,"stem":146,"children":147,"page":34},"Integrate","\u002Fintegrate","4.integrate",[148,152,235],{"title":41,"path":149,"stem":150,"icon":151},"\u002Fintegrate\u002Foverview","4.integrate\u002F0.overview","i-lucide-plug",{"title":153,"path":154,"stem":155,"children":156,"page":34},"Adapters","\u002Fintegrate\u002Fadapters","4.integrate\u002Fadapters",[157,160,190,215],{"title":41,"path":158,"stem":159,"icon":44},"\u002Fintegrate\u002Fadapters\u002Foverview","4.integrate\u002Fadapters\u002F01.overview",{"title":161,"path":162,"stem":163,"children":164,"page":34},"Cloud","\u002Fintegrate\u002Fadapters\u002Fcloud","4.integrate\u002Fadapters\u002Fcloud",[165,170,175,180,185],{"title":166,"path":167,"stem":168,"icon":169},"Axiom","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Faxiom","4.integrate\u002Fadapters\u002Fcloud\u002F01.axiom","i-custom-axiom",{"title":171,"path":172,"stem":173,"icon":174},"PostHog","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fposthog","4.integrate\u002Fadapters\u002Fcloud\u002F02.posthog","i-simple-icons-posthog",{"title":176,"path":177,"stem":178,"icon":179},"Sentry","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fsentry","4.integrate\u002Fadapters\u002Fcloud\u002F03.sentry","i-simple-icons-sentry",{"title":181,"path":182,"stem":183,"icon":184},"Better Stack","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fbetter-stack","4.integrate\u002Fadapters\u002Fcloud\u002F04.better-stack","i-simple-icons-betterstack",{"title":186,"path":187,"stem":188,"icon":189},"Datadog","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fdatadog","4.integrate\u002Fadapters\u002Fcloud\u002F05.datadog","i-simple-icons-datadog",{"title":191,"path":192,"stem":193,"children":194,"page":34},"Cloud or Self-Hosted","\u002Fintegrate\u002Fadapters\u002Fhybrid","4.integrate\u002Fadapters\u002Fhybrid",[195,200,205,210],{"title":196,"path":197,"stem":198,"icon":199},"Grafana Loki","\u002Fintegrate\u002Fadapters\u002Fhybrid\u002Floki","4.integrate\u002Fadapters\u002Fhybrid\u002F01.loki","i-simple-icons-grafana",{"title":201,"path":202,"stem":203,"icon":204},"ClickHouse","\u002Fintegrate\u002Fadapters\u002Fhybrid\u002Fclickhouse","4.integrate\u002Fadapters\u002Fhybrid\u002F02.clickhouse","i-simple-icons-clickhouse",{"title":206,"path":207,"stem":208,"icon":209},"OTLP","\u002Fintegrate\u002Fadapters\u002Fhybrid\u002Fotlp","4.integrate\u002Fadapters\u002Fhybrid\u002F03.otlp","i-simple-icons-opentelemetry",{"title":211,"path":212,"stem":213,"icon":214},"HyperDX","\u002Fintegrate\u002Fadapters\u002Fhybrid\u002Fhyperdx","4.integrate\u002Fadapters\u002Fhybrid\u002F04.hyperdx","i-custom-hyperdx",{"title":216,"path":217,"stem":218,"children":219,"page":34},"Self-Hosted","\u002Fintegrate\u002Fadapters\u002Fself-hosted","4.integrate\u002Fadapters\u002Fself-hosted",[220,225,230],{"title":221,"path":222,"stem":223,"icon":224},"File System","\u002Fintegrate\u002Fadapters\u002Fself-hosted\u002Ffs","4.integrate\u002Fadapters\u002Fself-hosted\u002F01.fs","i-lucide-hard-drive",{"title":226,"path":227,"stem":228,"icon":229},"NuxtHub","\u002Fintegrate\u002Fadapters\u002Fself-hosted\u002Fnuxthub","4.integrate\u002Fadapters\u002Fself-hosted\u002F02.nuxthub","i-simple-icons-nuxt",{"title":231,"path":232,"stem":233,"icon":234},"Memory","\u002Fintegrate\u002Fadapters\u002Fself-hosted\u002Fmemory","4.integrate\u002Fadapters\u002Fself-hosted\u002F03.memory","i-lucide-cpu",{"title":236,"path":237,"stem":238,"children":239,"page":34},"Frameworks","\u002Fintegrate\u002Fframeworks","4.integrate\u002Fframeworks",[240,244,249,254,259,264,269,274,279,284,289,294,299,304,308,313,318],{"title":41,"path":241,"stem":242,"icon":243},"\u002Fintegrate\u002Fframeworks\u002Foverview","4.integrate\u002Fframeworks\u002F00.overview","i-lucide-layout-grid",{"title":245,"path":246,"stem":247,"icon":248},"Nuxt","\u002Fintegrate\u002Fframeworks\u002Fnuxt","4.integrate\u002Fframeworks\u002F01.nuxt","i-simple-icons-nuxtdotjs",{"title":250,"path":251,"stem":252,"icon":253},"Next.js","\u002Fintegrate\u002Fframeworks\u002Fnextjs","4.integrate\u002Fframeworks\u002F02.nextjs","i-simple-icons-nextdotjs",{"title":255,"path":256,"stem":257,"icon":258},"SvelteKit","\u002Fintegrate\u002Fframeworks\u002Fsveltekit","4.integrate\u002Fframeworks\u002F03.sveltekit","i-simple-icons-svelte",{"title":260,"path":261,"stem":262,"icon":263},"Nitro","\u002Fintegrate\u002Fframeworks\u002Fnitro","4.integrate\u002Fframeworks\u002F04.nitro","i-custom-nitro",{"title":265,"path":266,"stem":267,"icon":268},"TanStack Start","\u002Fintegrate\u002Fframeworks\u002Ftanstack-start","4.integrate\u002Fframeworks\u002F05.tanstack-start","i-custom-tanstack",{"title":270,"path":271,"stem":272,"icon":273},"NestJS","\u002Fintegrate\u002Fframeworks\u002Fnestjs","4.integrate\u002Fframeworks\u002F06.nestjs","i-simple-icons-nestjs",{"title":275,"path":276,"stem":277,"icon":278},"Express","\u002Fintegrate\u002Fframeworks\u002Fexpress","4.integrate\u002Fframeworks\u002F07.express","i-simple-icons-express",{"title":280,"path":281,"stem":282,"icon":283},"Hono","\u002Fintegrate\u002Fframeworks\u002Fhono","4.integrate\u002Fframeworks\u002F08.hono","i-simple-icons-hono",{"title":285,"path":286,"stem":287,"icon":288},"Fastify","\u002Fintegrate\u002Fframeworks\u002Ffastify","4.integrate\u002Fframeworks\u002F09.fastify","i-simple-icons-fastify",{"title":290,"path":291,"stem":292,"icon":293},"Elysia","\u002Fintegrate\u002Fframeworks\u002Felysia","4.integrate\u002Fframeworks\u002F10.elysia","i-custom-elysia",{"title":295,"path":296,"stem":297,"icon":298},"React Router","\u002Fintegrate\u002Fframeworks\u002Freact-router","4.integrate\u002Fframeworks\u002F11.react-router","i-custom-reactrouter",{"title":300,"path":301,"stem":302,"icon":303},"Cloudflare Workers","\u002Fintegrate\u002Fframeworks\u002Fcloudflare-workers","4.integrate\u002Fframeworks\u002F12.cloudflare-workers","i-simple-icons-cloudflare",{"title":305,"path":306,"stem":307,"icon":79},"Standalone","\u002Fintegrate\u002Fframeworks\u002Fstandalone","4.integrate\u002Fframeworks\u002F13.standalone",{"title":309,"path":310,"stem":311,"icon":312},"Astro","\u002Fintegrate\u002Fframeworks\u002Fastro","4.integrate\u002Fframeworks\u002F14.astro","i-simple-icons-astro",{"title":314,"path":315,"stem":316,"icon":317},"oRPC","\u002Fintegrate\u002Fframeworks\u002Forpc","4.integrate\u002Fframeworks\u002F15.orpc","i-lucide-network",{"title":319,"path":320,"stem":321,"icon":322},"AWS Lambda","\u002Fintegrate\u002Fframeworks\u002Faws-lambda","4.integrate\u002Fframeworks\u002F16.aws-lambda","i-custom-lambda",{"title":324,"path":325,"stem":326,"children":327,"page":34},"Use Cases","\u002Fuse-cases","5.use-cases",[328,331,336,364,391,423,444,449,454,458],{"title":41,"path":329,"stem":330,"icon":112},"\u002Fuse-cases\u002Foverview","5.use-cases\u002F0.overview",{"title":332,"path":333,"stem":334,"icon":335},"Client Logging","\u002Fuse-cases\u002Fclient-logging","5.use-cases\u002F1.client-logging","i-lucide-monitor",{"title":337,"icon":338,"path":339,"stem":340,"children":341,"page":34},"AI SDK","i-simple-icons-vercel","\u002Fuse-cases\u002Fai-sdk","5.use-cases\u002F2.ai-sdk",[342,345,350,355,360],{"title":41,"path":343,"stem":344,"icon":44},"\u002Fuse-cases\u002Fai-sdk\u002Foverview","5.use-cases\u002F2.ai-sdk\u002F01.overview",{"title":346,"path":347,"stem":348,"icon":349},"Usage","\u002Fuse-cases\u002Fai-sdk\u002Fusage","5.use-cases\u002F2.ai-sdk\u002F02.usage","i-lucide-code",{"title":351,"path":352,"stem":353,"icon":354},"Options","\u002Fuse-cases\u002Fai-sdk\u002Foptions","5.use-cases\u002F2.ai-sdk\u002F03.options","i-lucide-sliders",{"title":356,"path":357,"stem":358,"icon":359},"Metadata","\u002Fuse-cases\u002Fai-sdk\u002Fmetadata","5.use-cases\u002F2.ai-sdk\u002F04.metadata","i-lucide-database",{"title":361,"path":362,"stem":363,"icon":142},"Telemetry","\u002Fuse-cases\u002Fai-sdk\u002Ftelemetry","5.use-cases\u002F2.ai-sdk\u002F05.telemetry",{"title":365,"icon":366,"path":367,"stem":368,"children":369,"page":34},"Better Auth","i-simple-icons-betterauth","\u002Fuse-cases\u002Fbetter-auth","5.use-cases\u002F3.better-auth",[370,373,378,383,387],{"title":41,"path":371,"stem":372,"icon":44},"\u002Fuse-cases\u002Fbetter-auth\u002Foverview","5.use-cases\u002F3.better-auth\u002F01.overview",{"title":374,"path":375,"stem":376,"icon":377},"Identify User","\u002Fuse-cases\u002Fbetter-auth\u002Fidentify-user","5.use-cases\u002F3.better-auth\u002F02.identify-user","i-lucide-user-check",{"title":379,"path":380,"stem":381,"icon":382},"Middleware","\u002Fuse-cases\u002Fbetter-auth\u002Fmiddleware","5.use-cases\u002F3.better-auth\u002F03.middleware","i-lucide-shield",{"title":384,"path":385,"stem":386,"icon":335},"Client Sync","\u002Fuse-cases\u002Fbetter-auth\u002Fclient-sync","5.use-cases\u002F3.better-auth\u002F04.client-sync",{"title":388,"path":389,"stem":390,"icon":117},"Performance","\u002Fuse-cases\u002Fbetter-auth\u002Fperformance","5.use-cases\u002F3.better-auth\u002F05.performance",{"title":392,"icon":393,"path":394,"stem":395,"children":396,"page":34},"Audit Logs","i-lucide-shield-check","\u002Fuse-cases\u002Faudit","5.use-cases\u002F4.audit",[397,400,405,410,415,419],{"title":41,"path":398,"stem":399,"icon":44},"\u002Fuse-cases\u002Faudit\u002Foverview","5.use-cases\u002F4.audit\u002F01.overview",{"title":401,"path":402,"stem":403,"icon":404},"Schema","\u002Fuse-cases\u002Faudit\u002Fschema","5.use-cases\u002F4.audit\u002F02.schema","i-lucide-file-text",{"title":406,"path":407,"stem":408,"icon":409},"Recording","\u002Fuse-cases\u002Faudit\u002Frecording","5.use-cases\u002F4.audit\u002F03.recording","i-lucide-pen-line",{"title":411,"path":412,"stem":413,"icon":414},"Drains","\u002Fuse-cases\u002Faudit\u002Fpipeline","5.use-cases\u002F4.audit\u002F04.pipeline","i-lucide-link",{"title":416,"path":417,"stem":418,"icon":393},"Compliance","\u002Fuse-cases\u002Faudit\u002Fcompliance","5.use-cases\u002F4.audit\u002F05.compliance",{"title":420,"path":421,"stem":422,"icon":84},"Recipes","\u002Fuse-cases\u002Faudit\u002Frecipes","5.use-cases\u002F4.audit\u002F06.recipes",{"title":361,"icon":117,"path":424,"stem":425,"children":426,"page":34},"\u002Fuse-cases\u002Ftelemetry","5.use-cases\u002F4.telemetry",[427,430,435,440],{"title":41,"path":428,"stem":429,"icon":44},"\u002Fuse-cases\u002Ftelemetry\u002Foverview","5.use-cases\u002F4.telemetry\u002F01.overview",{"title":431,"path":432,"stem":433,"icon":434},"Setup","\u002Fuse-cases\u002Ftelemetry\u002Fsetup","5.use-cases\u002F4.telemetry\u002F02.setup","i-lucide-wrench",{"title":436,"path":437,"stem":438,"icon":439},"Ingest","\u002Fuse-cases\u002Ftelemetry\u002Fingest","5.use-cases\u002F4.telemetry\u002F03.ingest","i-lucide-server",{"title":441,"path":442,"stem":443,"icon":84},"Reference","\u002Fuse-cases\u002Ftelemetry\u002Freference","5.use-cases\u002F4.telemetry\u002F04.reference",{"title":445,"path":446,"stem":447,"icon":448},"Enrichers","\u002Fuse-cases\u002Fenrichers","5.use-cases\u002F5.enrichers","i-lucide-sparkles",{"title":450,"path":451,"stem":452,"icon":453},"eve","\u002Fuse-cases\u002Feve","5.use-cases\u002F5.eve","i-custom-eve",{"title":455,"path":456,"stem":457,"icon":439},"Node.js request logging","\u002Fuse-cases\u002Fstructured-logging-nodejs","5.use-cases\u002F6.structured-logging-nodejs",{"title":459,"icon":460,"path":461,"stem":462,"children":463,"page":34},"Signals","i-lucide-scan-search","\u002Fuse-cases\u002Fsignals","5.use-cases\u002F7.signals",[464,467,472,477,480],{"title":41,"path":465,"stem":466,"icon":44},"\u002Fuse-cases\u002Fsignals\u002Foverview","5.use-cases\u002F7.signals\u002F01.overview",{"title":468,"path":469,"stem":470,"icon":471},"What You Can Ask","\u002Fuse-cases\u002Fsignals\u002Fask","5.use-cases\u002F7.signals\u002F02.ask","i-lucide-message-circle-question",{"title":473,"path":474,"stem":475,"icon":476},"What It Costs","\u002Fuse-cases\u002Fsignals\u002Fcost","5.use-cases\u002F7.signals\u002F03.cost","i-lucide-coins",{"title":441,"path":478,"stem":479,"icon":84},"\u002Fuse-cases\u002Fsignals\u002Freference","5.use-cases\u002F7.signals\u002F04.reference",{"title":420,"path":481,"stem":482,"icon":483},"\u002Fuse-cases\u002Fsignals\u002Frecipes","5.use-cases\u002F7.signals\u002F05.recipes","i-lucide-lightbulb",{"title":485,"path":486,"stem":487,"children":488,"page":34},"Extend","\u002Fextend","6.extend",[489,493,498,503,507,512,516,520,524,528,533,538],{"title":41,"path":490,"stem":491,"icon":492},"\u002Fextend\u002Foverview","6.extend\u002F0.overview","i-lucide-blocks",{"title":494,"path":495,"stem":496,"icon":497},"Stream","\u002Fextend\u002Fstream","6.extend\u002F1.stream","i-lucide-radio-tower",{"title":499,"path":500,"stem":501,"icon":502},"Custom framework","\u002Fextend\u002Fcustom-framework","6.extend\u002F10.custom-framework","i-lucide-puzzle",{"title":504,"path":505,"stem":506,"icon":497},"Diagnostics channel","\u002Fextend\u002Fdiagnostics-channel","6.extend\u002F11.diagnostics-channel",{"title":508,"path":509,"stem":510,"icon":511},"FS reader","\u002Fextend\u002Ffs-reader","6.extend\u002F2.fs-reader","i-lucide-folder-search",{"title":420,"path":513,"stem":514,"icon":515},"\u002Fextend\u002Fconsumer-recipes","6.extend\u002F3.consumer-recipes","i-lucide-chef-hat",{"title":517,"path":518,"stem":519,"icon":492},"Plugins","\u002Fextend\u002Fplugins","6.extend\u002F4.plugins",{"title":521,"path":522,"stem":523,"icon":448},"Custom enrichers","\u002Fextend\u002Fcustom-enrichers","6.extend\u002F5.custom-enrichers",{"title":525,"path":526,"stem":527,"icon":69},"Tail sampling","\u002Fextend\u002Ftail-sampling","6.extend\u002F6.tail-sampling",{"title":529,"path":530,"stem":531,"icon":532},"Identity headers","\u002Fextend\u002Fidentity-headers","6.extend\u002F7.identity-headers","i-lucide-fingerprint",{"title":534,"path":535,"stem":536,"icon":537},"Custom drains","\u002Fextend\u002Fcustom-drains","6.extend\u002F8.custom-drains","i-lucide-share-2",{"title":539,"path":540,"stem":541,"icon":542},"Drain pipeline","\u002Fextend\u002Fdrain-pipeline","6.extend\u002F9.drain-pipeline","i-lucide-workflow",{"title":441,"path":544,"stem":545,"children":546,"page":34},"\u002Freference","7.reference",[547,551,556,559,564,568,573,577],{"title":41,"path":548,"stem":549,"icon":550},"\u002Freference\u002Foverview","7.reference\u002F0.overview","i-lucide-book-marked",{"title":552,"path":553,"stem":554,"icon":555},"Configuration","\u002Freference\u002Fconfiguration","7.reference\u002F1.configuration","i-lucide-settings",{"title":388,"path":557,"stem":558,"icon":117},"\u002Freference\u002Fperformance","7.reference\u002F2.performance",{"title":560,"path":561,"stem":562,"icon":563},"Vite Plugin","\u002Freference\u002Fvite-plugin","7.reference\u002F3.vite-plugin","i-custom-vite",{"title":565,"path":566,"stem":567,"icon":393},"Best Practices","\u002Freference\u002Fbest-practices","7.reference\u002F4.best-practices",{"title":569,"path":570,"stem":571,"icon":572},"vs Other Loggers","\u002Freference\u002Fvs-other-loggers","7.reference\u002F5.vs-other-loggers","i-lucide-scale",{"title":574,"path":575,"stem":576,"icon":448},"Agent Skills","\u002Freference\u002Fagent-skills","7.reference\u002F6.agent-skills",{"title":578,"path":579,"stem":580,"icon":581},"Cost","\u002Freference\u002Fcost","7.reference\u002F7.cost","i-lucide-receipt",{"title":583,"path":584,"stem":585,"children":586,"page":34},"Compare","\u002Fcompare","8.compare",[587,591,595,599,603],{"title":588,"path":589,"stem":590,"icon":572},"evlog vs Pino","\u002Fcompare\u002Fpino","8.compare\u002F1.pino",{"title":592,"path":593,"stem":594,"icon":209},"evlog vs OpenTelemetry","\u002Fcompare\u002Fopentelemetry","8.compare\u002F2.opentelemetry",{"title":596,"path":597,"stem":598,"icon":572},"evlog vs LogTape","\u002Fcompare\u002Flogtape","8.compare\u002F3.logtape",{"title":600,"path":601,"stem":602,"icon":572},"evlog vs Winston: formats and request events","\u002Fcompare\u002Fwinston","8.compare\u002F4.winston",{"title":604,"path":605,"stem":606,"icon":572},"evlog vs Consola: reporters and request context","\u002Fcompare\u002Fconsola","8.compare\u002F5.consola",{"id":608,"title":10,"body":609,"description":2339,"extension":2340,"links":2341,"meta":2350,"navigation":2351,"path":11,"seo":2352,"stem":12,"__hash__":2353},"docs\u002F1.start\u002F1.introduction.md",{"type":610,"value":611,"toc":2328},"minimark",[612,620,631,651,656,659,664,688,701,705,708,770,777,781,784,788,794,937,940,943,1209,1212,1970,1973,1976,1988,2240,2244,2251,2274,2284,2288,2324],[613,614,615,619],"p",{},[616,617,618],"strong",{},"evlog"," is a TypeScript logging library that helps you understand what happened in your app. Start with structured logs, bring a request’s context together in one wide event, and turn failures into errors that explain what went wrong and how to fix it.",[613,621,622,623,626,627,630],{},"Use it in your next project or introduce it alongside your existing logger. The ",[624,625,25],"a",{"href":26}," gets you going; the ",[624,628,629],{"href":47},"migration examples"," show how to bring familiar logging patterns to evlog.",[613,632,633,634,640,641,646,647,650],{},"Inspired by ",[624,635,639],{"href":636,"rel":637},"https:\u002F\u002Floggingsucks.com\u002F",[638],"nofollow","Logging Sucks"," by ",[624,642,645],{"href":643,"rel":644},"https:\u002F\u002Fx.com\u002Fboristane",[638],"Boris Tane",". The separate ",[624,648,649],{"href":91},"evlog CLI"," helps you explore your logs and spot missing logging patterns with static checks.",[652,653,655],"h2",{"id":654},"philosophy","Philosophy",[613,657,658],{},"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.",[613,660,661,663],{},[616,662,618],{}," takes a different approach:",[665,666,667,677,680,683],"card-group",{},[668,669,671,672,676],"card",{"icon":49,"title":670},"Structured Logging","Replace ",[673,674,675],"code",{},"console.log"," with typed, structured events that flow through a drain pipeline. Same level filtering, redaction, and pretty\u002FJSON output as pino or consola.",[668,678,679],{"icon":54,"title":51},"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.",[668,681,682],{"icon":59,"title":56},"Errors that explain why they occurred and how to fix them.",[668,684,687],{"icon":685,"title":686},"i-lucide-palette","Pretty for Dev","Human-readable in development, machine-parseable JSON in production.",[689,690,693,694,697,698,700],"callout",{"color":691,"icon":692},"info","i-lucide-globe","Not running an HTTP framework? See ",[624,695,696],{"href":306},"Standalone TypeScript"," for scripts, workers, and CLIs, and ",[624,699,300],{"href":301}," for the edge runtime.",[652,702,704],{"id":703},"why-evlog-over-pino-winston-or-consola","Why evlog over pino, winston, or consola",[613,706,707],{},"evlog is a fully-featured general-purpose logger that happens to also do wide events. Concretely:",[709,710,711,721,739,756],"ul",{},[712,713,714,717,718,720],"li",{},[616,715,716],{},"Zero runtime dependencies in the core package."," Start with the logger and add integrations as you need them. See ",[624,719,388],{"href":557}," for bundle sizes and benchmarks.",[712,722,723,726,727,730,731,734,735,738],{},[616,724,725],{},"Same API in every context",": scripts, frameworks, edge runtimes, browser, library code. No ",[673,728,729],{},"pino-http"," vs ",[673,732,733],{},"pino"," split, no separate ",[673,736,737],{},"consola"," reporters per environment.",[712,740,741,755],{},[616,742,743,744,747,748,747,751,754],{},"Structured errors with ",[673,745,746],{},"why"," \u002F ",[673,749,750],{},"fix",[673,752,753],{},"link"," built in",": your error toast finally tells users what went wrong and what to do, your on-call stops reverse-engineering stack traces.",[712,757,758,761,762,765,766,769],{},[616,759,760],{},"Wide events as a free upgrade path",": when you need to correlate context across an operation, the same logger gives you ",[673,763,764],{},"log.set"," + ",[673,767,768],{},"log.emit"," instead of stitching log lines together later.",[613,771,772,773,776],{},"See the full ",[624,774,775],{"href":570},"feature comparison"," (parity matrix, honest gaps, and migration snippets) for a side-by-side with pino, winston, and consola.",[652,778,780],{"id":779},"pick-one-of-three-ways-to-log","Pick one of three ways to log",[613,782,783],{},"evlog provides three APIs for different contexts. You can use all three in the same project.",[785,786,46],"h3",{"id":787},"simple-logging",[613,789,790,791,793],{},"Fire-and-forget structured logs. Replace ",[673,792,675],{},", consola, or pino:",[795,796,802],"pre",{"className":797,"code":798,"filename":799,"language":800,"meta":801,"style":801},"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","",[673,803,804,836,843,879],{"__ignoreMap":801},[805,806,809,813,817,821,824,827,830,833],"span",{"class":807,"line":808},"line",1,[805,810,812],{"class":811},"s7zQu","import",[805,814,816],{"class":815},"sMK4o"," {",[805,818,820],{"class":819},"sTEyZ"," log",[805,822,823],{"class":815}," }",[805,825,826],{"class":811}," from",[805,828,829],{"class":815}," '",[805,831,618],{"class":832},"sfazB",[805,834,835],{"class":815},"'\n",[805,837,839],{"class":807,"line":838},2,[805,840,842],{"emptyLinePlaceholder":841},true,"\n",[805,844,846,849,852,855,858,861,864,866,869,871,874,876],{"class":807,"line":845},3,[805,847,848],{"class":819},"log",[805,850,851],{"class":815},".",[805,853,691],{"class":854},"s2Zo4",[805,856,857],{"class":819},"(",[805,859,860],{"class":815},"'",[805,862,863],{"class":832},"auth",[805,865,860],{"class":815},[805,867,868],{"class":815},",",[805,870,829],{"class":815},[805,872,873],{"class":832},"User logged in",[805,875,860],{"class":815},[805,877,878],{"class":819},")\n",[805,880,882,884,886,889,891,894,898,901,903,906,908,910,913,915,917,920,922,924,927,929,933,935],{"class":807,"line":881},4,[805,883,848],{"class":819},[805,885,851],{"class":815},[805,887,888],{"class":854},"error",[805,890,857],{"class":819},[805,892,893],{"class":815},"{",[805,895,897],{"class":896},"swJcz"," action",[805,899,900],{"class":815},":",[805,902,829],{"class":815},[805,904,905],{"class":832},"payment",[805,907,860],{"class":815},[805,909,868],{"class":815},[805,911,912],{"class":896}," error",[805,914,900],{"class":815},[805,916,829],{"class":815},[805,918,919],{"class":832},"card_declined",[805,921,860],{"class":815},[805,923,868],{"class":815},[805,925,926],{"class":896}," userId",[805,928,900],{"class":815},[805,930,932],{"class":931},"sbssI"," 42",[805,934,823],{"class":815},[805,936,878],{"class":819},[785,938,51],{"id":939},"wide-events",[613,941,942],{},"Accumulate context progressively over any operation, then emit a single comprehensive event:",[944,945,946,1079],"code-group",{},[795,947,950],{"className":797,"code":948,"filename":949,"language":800,"meta":801,"style":801},"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",[673,951,952,971,975,1023,1066],{"__ignoreMap":801},[805,953,954,956,958,961,963,965,967,969],{"class":807,"line":808},[805,955,812],{"class":811},[805,957,816],{"class":815},[805,959,960],{"class":819}," createLogger",[805,962,823],{"class":815},[805,964,826],{"class":811},[805,966,829],{"class":815},[805,968,618],{"class":832},[805,970,835],{"class":815},[805,972,973],{"class":807,"line":838},[805,974,842],{"emptyLinePlaceholder":841},[805,976,977,981,984,987,989,991,993,996,998,1000,1003,1005,1007,1010,1012,1014,1017,1019,1021],{"class":807,"line":845},[805,978,980],{"class":979},"spNyl","const",[805,982,983],{"class":819}," log ",[805,985,986],{"class":815},"=",[805,988,960],{"class":854},[805,990,857],{"class":819},[805,992,893],{"class":815},[805,994,995],{"class":896}," jobId",[805,997,900],{"class":815},[805,999,829],{"class":815},[805,1001,1002],{"class":832},"sync-001",[805,1004,860],{"class":815},[805,1006,868],{"class":815},[805,1008,1009],{"class":896}," queue",[805,1011,900],{"class":815},[805,1013,829],{"class":815},[805,1015,1016],{"class":832},"emails",[805,1018,860],{"class":815},[805,1020,823],{"class":815},[805,1022,878],{"class":819},[805,1024,1025,1027,1029,1032,1034,1036,1039,1041,1043,1046,1048,1051,1053,1056,1058,1060,1062,1064],{"class":807,"line":881},[805,1026,848],{"class":819},[805,1028,851],{"class":815},[805,1030,1031],{"class":854},"set",[805,1033,857],{"class":819},[805,1035,893],{"class":815},[805,1037,1038],{"class":896}," batch",[805,1040,900],{"class":815},[805,1042,816],{"class":815},[805,1044,1045],{"class":896}," size",[805,1047,900],{"class":815},[805,1049,1050],{"class":931}," 50",[805,1052,868],{"class":815},[805,1054,1055],{"class":896}," processed",[805,1057,900],{"class":815},[805,1059,1050],{"class":931},[805,1061,823],{"class":815},[805,1063,823],{"class":815},[805,1065,878],{"class":819},[805,1067,1069,1071,1073,1076],{"class":807,"line":1068},5,[805,1070,848],{"class":819},[805,1072,851],{"class":815},[805,1074,1075],{"class":854},"emit",[805,1077,1078],{"class":819},"()\n",[795,1080,1083],{"className":797,"code":1081,"filename":1082,"language":800,"meta":801,"style":801},"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",[673,1084,1085,1104,1108,1152,1199],{"__ignoreMap":801},[805,1086,1087,1089,1091,1094,1096,1098,1100,1102],{"class":807,"line":808},[805,1088,812],{"class":811},[805,1090,816],{"class":815},[805,1092,1093],{"class":819}," createRequestLogger",[805,1095,823],{"class":815},[805,1097,826],{"class":811},[805,1099,829],{"class":815},[805,1101,618],{"class":832},[805,1103,835],{"class":815},[805,1105,1106],{"class":807,"line":838},[805,1107,842],{"emptyLinePlaceholder":841},[805,1109,1110,1112,1114,1116,1118,1120,1122,1125,1127,1129,1132,1134,1136,1139,1141,1143,1146,1148,1150],{"class":807,"line":845},[805,1111,980],{"class":979},[805,1113,983],{"class":819},[805,1115,986],{"class":815},[805,1117,1093],{"class":854},[805,1119,857],{"class":819},[805,1121,893],{"class":815},[805,1123,1124],{"class":896}," method",[805,1126,900],{"class":815},[805,1128,829],{"class":815},[805,1130,1131],{"class":832},"POST",[805,1133,860],{"class":815},[805,1135,868],{"class":815},[805,1137,1138],{"class":896}," path",[805,1140,900],{"class":815},[805,1142,829],{"class":815},[805,1144,1145],{"class":832},"\u002Fapi\u002Fcheckout",[805,1147,860],{"class":815},[805,1149,823],{"class":815},[805,1151,878],{"class":819},[805,1153,1154,1156,1158,1160,1162,1164,1167,1169,1171,1174,1176,1179,1181,1184,1186,1188,1191,1193,1195,1197],{"class":807,"line":881},[805,1155,848],{"class":819},[805,1157,851],{"class":815},[805,1159,1031],{"class":854},[805,1161,857],{"class":819},[805,1163,893],{"class":815},[805,1165,1166],{"class":896}," user",[805,1168,900],{"class":815},[805,1170,816],{"class":815},[805,1172,1173],{"class":896}," id",[805,1175,900],{"class":815},[805,1177,1178],{"class":931}," 1",[805,1180,868],{"class":815},[805,1182,1183],{"class":896}," plan",[805,1185,900],{"class":815},[805,1187,829],{"class":815},[805,1189,1190],{"class":832},"pro",[805,1192,860],{"class":815},[805,1194,823],{"class":815},[805,1196,823],{"class":815},[805,1198,878],{"class":819},[805,1200,1201,1203,1205,1207],{"class":807,"line":1068},[805,1202,848],{"class":819},[805,1204,851],{"class":815},[805,1206,1075],{"class":854},[805,1208,1078],{"class":819},[613,1210,1211],{},"With a framework integration, the logger is created when the request starts and emitted when the response ends. A handler only adds what it learns:",[1213,1214,1215,1377,1535,1688,1833],"framework-tabs",{},[795,1216,1219],{"className":797,"code":1217,"filename":245,"language":800,"meta":1218,"style":801},"import { useLogger } from 'evlog'\n\nexport default defineEventHandler(async (event) => {\n  const log = useLogger(event)\n\n  log.set({ user: { id: 1, plan: 'pro' } })\n  return { success: true }\n  \u002F\u002F auto-emitted on response end\n})\n","server\u002Fapi\u002Fcheckout.post.ts",[673,1220,1221,1240,1244,1276,1294,1298,1342,1362,1369],{"__ignoreMap":801},[805,1222,1223,1225,1227,1230,1232,1234,1236,1238],{"class":807,"line":808},[805,1224,812],{"class":811},[805,1226,816],{"class":815},[805,1228,1229],{"class":819}," useLogger",[805,1231,823],{"class":815},[805,1233,826],{"class":811},[805,1235,829],{"class":815},[805,1237,618],{"class":832},[805,1239,835],{"class":815},[805,1241,1242],{"class":807,"line":838},[805,1243,842],{"emptyLinePlaceholder":841},[805,1245,1246,1249,1252,1255,1257,1260,1263,1267,1270,1273],{"class":807,"line":845},[805,1247,1248],{"class":811},"export",[805,1250,1251],{"class":811}," default",[805,1253,1254],{"class":854}," defineEventHandler",[805,1256,857],{"class":819},[805,1258,1259],{"class":979},"async",[805,1261,1262],{"class":815}," (",[805,1264,1266],{"class":1265},"sHdIc","event",[805,1268,1269],{"class":815},")",[805,1271,1272],{"class":979}," =>",[805,1274,1275],{"class":815}," {\n",[805,1277,1278,1281,1283,1286,1288,1290,1292],{"class":807,"line":881},[805,1279,1280],{"class":979},"  const",[805,1282,820],{"class":819},[805,1284,1285],{"class":815}," =",[805,1287,1229],{"class":854},[805,1289,857],{"class":896},[805,1291,1266],{"class":819},[805,1293,878],{"class":896},[805,1295,1296],{"class":807,"line":1068},[805,1297,842],{"emptyLinePlaceholder":841},[805,1299,1301,1304,1306,1308,1310,1312,1314,1316,1318,1320,1322,1324,1326,1328,1330,1332,1334,1336,1338,1340],{"class":807,"line":1300},6,[805,1302,1303],{"class":819},"  log",[805,1305,851],{"class":815},[805,1307,1031],{"class":854},[805,1309,857],{"class":896},[805,1311,893],{"class":815},[805,1313,1166],{"class":896},[805,1315,900],{"class":815},[805,1317,816],{"class":815},[805,1319,1173],{"class":896},[805,1321,900],{"class":815},[805,1323,1178],{"class":931},[805,1325,868],{"class":815},[805,1327,1183],{"class":896},[805,1329,900],{"class":815},[805,1331,829],{"class":815},[805,1333,1190],{"class":832},[805,1335,860],{"class":815},[805,1337,823],{"class":815},[805,1339,823],{"class":815},[805,1341,878],{"class":896},[805,1343,1345,1348,1350,1353,1355,1359],{"class":807,"line":1344},7,[805,1346,1347],{"class":811},"  return",[805,1349,816],{"class":815},[805,1351,1352],{"class":896}," success",[805,1354,900],{"class":815},[805,1356,1358],{"class":1357},"sfNiH"," true",[805,1360,1361],{"class":815}," }\n",[805,1363,1365],{"class":807,"line":1364},8,[805,1366,1368],{"class":1367},"sHwdD","  \u002F\u002F auto-emitted on response end\n",[805,1370,1372,1375],{"class":807,"line":1371},9,[805,1373,1374],{"class":815},"}",[805,1376,878],{"class":819},[795,1378,1381],{"className":797,"code":1379,"filename":260,"language":800,"meta":1380,"style":801},"import { defineHandler } from 'nitro\u002Fh3'\nimport { useLogger } from 'evlog\u002Fnitro\u002Fv3'\n\nexport default defineHandler(async (event) => {\n  const log = useLogger(event)\n\n  log.set({ user: { id: 1, plan: 'pro' } })\n  return { success: true }\n  \u002F\u002F auto-emitted on response end\n})\n","routes\u002Fapi\u002Fcheckout.post.ts",[673,1382,1383,1403,1422,1426,1448,1464,1468,1510,1524,1528],{"__ignoreMap":801},[805,1384,1385,1387,1389,1392,1394,1396,1398,1401],{"class":807,"line":808},[805,1386,812],{"class":811},[805,1388,816],{"class":815},[805,1390,1391],{"class":819}," defineHandler",[805,1393,823],{"class":815},[805,1395,826],{"class":811},[805,1397,829],{"class":815},[805,1399,1400],{"class":832},"nitro\u002Fh3",[805,1402,835],{"class":815},[805,1404,1405,1407,1409,1411,1413,1415,1417,1420],{"class":807,"line":838},[805,1406,812],{"class":811},[805,1408,816],{"class":815},[805,1410,1229],{"class":819},[805,1412,823],{"class":815},[805,1414,826],{"class":811},[805,1416,829],{"class":815},[805,1418,1419],{"class":832},"evlog\u002Fnitro\u002Fv3",[805,1421,835],{"class":815},[805,1423,1424],{"class":807,"line":845},[805,1425,842],{"emptyLinePlaceholder":841},[805,1427,1428,1430,1432,1434,1436,1438,1440,1442,1444,1446],{"class":807,"line":881},[805,1429,1248],{"class":811},[805,1431,1251],{"class":811},[805,1433,1391],{"class":854},[805,1435,857],{"class":819},[805,1437,1259],{"class":979},[805,1439,1262],{"class":815},[805,1441,1266],{"class":1265},[805,1443,1269],{"class":815},[805,1445,1272],{"class":979},[805,1447,1275],{"class":815},[805,1449,1450,1452,1454,1456,1458,1460,1462],{"class":807,"line":1068},[805,1451,1280],{"class":979},[805,1453,820],{"class":819},[805,1455,1285],{"class":815},[805,1457,1229],{"class":854},[805,1459,857],{"class":896},[805,1461,1266],{"class":819},[805,1463,878],{"class":896},[805,1465,1466],{"class":807,"line":1300},[805,1467,842],{"emptyLinePlaceholder":841},[805,1469,1470,1472,1474,1476,1478,1480,1482,1484,1486,1488,1490,1492,1494,1496,1498,1500,1502,1504,1506,1508],{"class":807,"line":1344},[805,1471,1303],{"class":819},[805,1473,851],{"class":815},[805,1475,1031],{"class":854},[805,1477,857],{"class":896},[805,1479,893],{"class":815},[805,1481,1166],{"class":896},[805,1483,900],{"class":815},[805,1485,816],{"class":815},[805,1487,1173],{"class":896},[805,1489,900],{"class":815},[805,1491,1178],{"class":931},[805,1493,868],{"class":815},[805,1495,1183],{"class":896},[805,1497,900],{"class":815},[805,1499,829],{"class":815},[805,1501,1190],{"class":832},[805,1503,860],{"class":815},[805,1505,823],{"class":815},[805,1507,823],{"class":815},[805,1509,878],{"class":896},[805,1511,1512,1514,1516,1518,1520,1522],{"class":807,"line":1364},[805,1513,1347],{"class":811},[805,1515,816],{"class":815},[805,1517,1352],{"class":896},[805,1519,900],{"class":815},[805,1521,1358],{"class":1357},[805,1523,1361],{"class":815},[805,1525,1526],{"class":807,"line":1371},[805,1527,1368],{"class":1367},[805,1529,1531,1533],{"class":807,"line":1530},10,[805,1532,1374],{"class":815},[805,1534,878],{"class":819},[795,1536,1539],{"className":797,"code":1537,"filename":250,"language":800,"meta":1538,"style":801},"import { withEvlog, useLogger } from '@\u002Flib\u002Fevlog'\n\nexport const POST = withEvlog(async () => {\n  const log = useLogger()\n\n  log.set({ user: { id: 1, plan: 'pro' } })\n  return Response.json({ success: true })\n  \u002F\u002F auto-emitted on response end\n})\n","app\u002Fapi\u002Fcheckout\u002Froute.ts",[673,1540,1541,1565,1569,1594,1606,1610,1652,1678,1682],{"__ignoreMap":801},[805,1542,1543,1545,1547,1550,1552,1554,1556,1558,1560,1563],{"class":807,"line":808},[805,1544,812],{"class":811},[805,1546,816],{"class":815},[805,1548,1549],{"class":819}," withEvlog",[805,1551,868],{"class":815},[805,1553,1229],{"class":819},[805,1555,823],{"class":815},[805,1557,826],{"class":811},[805,1559,829],{"class":815},[805,1561,1562],{"class":832},"@\u002Flib\u002Fevlog",[805,1564,835],{"class":815},[805,1566,1567],{"class":807,"line":838},[805,1568,842],{"emptyLinePlaceholder":841},[805,1570,1571,1573,1576,1579,1581,1583,1585,1587,1590,1592],{"class":807,"line":845},[805,1572,1248],{"class":811},[805,1574,1575],{"class":979}," const",[805,1577,1578],{"class":819}," POST ",[805,1580,986],{"class":815},[805,1582,1549],{"class":854},[805,1584,857],{"class":819},[805,1586,1259],{"class":979},[805,1588,1589],{"class":815}," ()",[805,1591,1272],{"class":979},[805,1593,1275],{"class":815},[805,1595,1596,1598,1600,1602,1604],{"class":807,"line":881},[805,1597,1280],{"class":979},[805,1599,820],{"class":819},[805,1601,1285],{"class":815},[805,1603,1229],{"class":854},[805,1605,1078],{"class":896},[805,1607,1608],{"class":807,"line":1068},[805,1609,842],{"emptyLinePlaceholder":841},[805,1611,1612,1614,1616,1618,1620,1622,1624,1626,1628,1630,1632,1634,1636,1638,1640,1642,1644,1646,1648,1650],{"class":807,"line":1300},[805,1613,1303],{"class":819},[805,1615,851],{"class":815},[805,1617,1031],{"class":854},[805,1619,857],{"class":896},[805,1621,893],{"class":815},[805,1623,1166],{"class":896},[805,1625,900],{"class":815},[805,1627,816],{"class":815},[805,1629,1173],{"class":896},[805,1631,900],{"class":815},[805,1633,1178],{"class":931},[805,1635,868],{"class":815},[805,1637,1183],{"class":896},[805,1639,900],{"class":815},[805,1641,829],{"class":815},[805,1643,1190],{"class":832},[805,1645,860],{"class":815},[805,1647,823],{"class":815},[805,1649,823],{"class":815},[805,1651,878],{"class":896},[805,1653,1654,1656,1659,1661,1664,1666,1668,1670,1672,1674,1676],{"class":807,"line":1344},[805,1655,1347],{"class":811},[805,1657,1658],{"class":819}," Response",[805,1660,851],{"class":815},[805,1662,1663],{"class":854},"json",[805,1665,857],{"class":896},[805,1667,893],{"class":815},[805,1669,1352],{"class":896},[805,1671,900],{"class":815},[805,1673,1358],{"class":1357},[805,1675,823],{"class":815},[805,1677,878],{"class":896},[805,1679,1680],{"class":807,"line":1364},[805,1681,1368],{"class":1367},[805,1683,1684,1686],{"class":807,"line":1371},[805,1685,1374],{"class":815},[805,1687,878],{"class":819},[795,1689,1691],{"className":797,"code":1690,"filename":280,"language":800,"meta":799,"style":801},"app.post('\u002Fapi\u002Fcheckout', async (c) => {\n  const log = c.get('log')\n\n  log.set({ user: { id: 1, plan: 'pro' } })\n  return c.json({ success: true })\n  \u002F\u002F auto-emitted on response end\n})\n",[673,1692,1693,1727,1753,1757,1799,1823,1827],{"__ignoreMap":801},[805,1694,1695,1698,1700,1703,1705,1707,1709,1711,1713,1716,1718,1721,1723,1725],{"class":807,"line":808},[805,1696,1697],{"class":819},"app",[805,1699,851],{"class":815},[805,1701,1702],{"class":854},"post",[805,1704,857],{"class":819},[805,1706,860],{"class":815},[805,1708,1145],{"class":832},[805,1710,860],{"class":815},[805,1712,868],{"class":815},[805,1714,1715],{"class":979}," async",[805,1717,1262],{"class":815},[805,1719,1720],{"class":1265},"c",[805,1722,1269],{"class":815},[805,1724,1272],{"class":979},[805,1726,1275],{"class":815},[805,1728,1729,1731,1733,1735,1738,1740,1743,1745,1747,1749,1751],{"class":807,"line":838},[805,1730,1280],{"class":979},[805,1732,820],{"class":819},[805,1734,1285],{"class":815},[805,1736,1737],{"class":819}," c",[805,1739,851],{"class":815},[805,1741,1742],{"class":854},"get",[805,1744,857],{"class":896},[805,1746,860],{"class":815},[805,1748,848],{"class":832},[805,1750,860],{"class":815},[805,1752,878],{"class":896},[805,1754,1755],{"class":807,"line":845},[805,1756,842],{"emptyLinePlaceholder":841},[805,1758,1759,1761,1763,1765,1767,1769,1771,1773,1775,1777,1779,1781,1783,1785,1787,1789,1791,1793,1795,1797],{"class":807,"line":881},[805,1760,1303],{"class":819},[805,1762,851],{"class":815},[805,1764,1031],{"class":854},[805,1766,857],{"class":896},[805,1768,893],{"class":815},[805,1770,1166],{"class":896},[805,1772,900],{"class":815},[805,1774,816],{"class":815},[805,1776,1173],{"class":896},[805,1778,900],{"class":815},[805,1780,1178],{"class":931},[805,1782,868],{"class":815},[805,1784,1183],{"class":896},[805,1786,900],{"class":815},[805,1788,829],{"class":815},[805,1790,1190],{"class":832},[805,1792,860],{"class":815},[805,1794,823],{"class":815},[805,1796,823],{"class":815},[805,1798,878],{"class":896},[805,1800,1801,1803,1805,1807,1809,1811,1813,1815,1817,1819,1821],{"class":807,"line":1068},[805,1802,1347],{"class":811},[805,1804,1737],{"class":819},[805,1806,851],{"class":815},[805,1808,1663],{"class":854},[805,1810,857],{"class":896},[805,1812,893],{"class":815},[805,1814,1352],{"class":896},[805,1816,900],{"class":815},[805,1818,1358],{"class":1357},[805,1820,823],{"class":815},[805,1822,878],{"class":896},[805,1824,1825],{"class":807,"line":1300},[805,1826,1368],{"class":1367},[805,1828,1829,1831],{"class":807,"line":1344},[805,1830,1374],{"class":815},[805,1832,878],{"class":819},[795,1834,1836],{"className":797,"code":1835,"filename":275,"language":800,"meta":799,"style":801},"app.post('\u002Fapi\u002Fcheckout', async (req, res) => {\n  const log = req.log\n\n  log.set({ user: { id: 1, plan: 'pro' } })\n  return res.json({ success: true })\n  \u002F\u002F auto-emitted on response end\n})\n",[673,1837,1838,1874,1890,1894,1936,1960,1964],{"__ignoreMap":801},[805,1839,1840,1842,1844,1846,1848,1850,1852,1854,1856,1858,1860,1863,1865,1868,1870,1872],{"class":807,"line":808},[805,1841,1697],{"class":819},[805,1843,851],{"class":815},[805,1845,1702],{"class":854},[805,1847,857],{"class":819},[805,1849,860],{"class":815},[805,1851,1145],{"class":832},[805,1853,860],{"class":815},[805,1855,868],{"class":815},[805,1857,1715],{"class":979},[805,1859,1262],{"class":815},[805,1861,1862],{"class":1265},"req",[805,1864,868],{"class":815},[805,1866,1867],{"class":1265}," res",[805,1869,1269],{"class":815},[805,1871,1272],{"class":979},[805,1873,1275],{"class":815},[805,1875,1876,1878,1880,1882,1885,1887],{"class":807,"line":838},[805,1877,1280],{"class":979},[805,1879,820],{"class":819},[805,1881,1285],{"class":815},[805,1883,1884],{"class":819}," req",[805,1886,851],{"class":815},[805,1888,1889],{"class":819},"log\n",[805,1891,1892],{"class":807,"line":845},[805,1893,842],{"emptyLinePlaceholder":841},[805,1895,1896,1898,1900,1902,1904,1906,1908,1910,1912,1914,1916,1918,1920,1922,1924,1926,1928,1930,1932,1934],{"class":807,"line":881},[805,1897,1303],{"class":819},[805,1899,851],{"class":815},[805,1901,1031],{"class":854},[805,1903,857],{"class":896},[805,1905,893],{"class":815},[805,1907,1166],{"class":896},[805,1909,900],{"class":815},[805,1911,816],{"class":815},[805,1913,1173],{"class":896},[805,1915,900],{"class":815},[805,1917,1178],{"class":931},[805,1919,868],{"class":815},[805,1921,1183],{"class":896},[805,1923,900],{"class":815},[805,1925,829],{"class":815},[805,1927,1190],{"class":832},[805,1929,860],{"class":815},[805,1931,823],{"class":815},[805,1933,823],{"class":815},[805,1935,878],{"class":896},[805,1937,1938,1940,1942,1944,1946,1948,1950,1952,1954,1956,1958],{"class":807,"line":1068},[805,1939,1347],{"class":811},[805,1941,1867],{"class":819},[805,1943,851],{"class":815},[805,1945,1663],{"class":854},[805,1947,857],{"class":896},[805,1949,893],{"class":815},[805,1951,1352],{"class":896},[805,1953,900],{"class":815},[805,1955,1358],{"class":1357},[805,1957,823],{"class":815},[805,1959,878],{"class":896},[805,1961,1962],{"class":807,"line":1300},[805,1963,1368],{"class":1367},[805,1965,1966,1968],{"class":807,"line":1344},[805,1967,1374],{"class":815},[805,1969,878],{"class":819},[613,1971,1972],{},"One log, all context. Everything you need to understand what happened.",[785,1974,56],{"id":1975},"structured-errors",[613,1977,1978,1979,1981,1982,1984,1985,1987],{},"Errors with actionable context: ",[673,1980,746],{}," it happened, how to ",[673,1983,750],{}," it, and a ",[673,1986,753],{}," to docs:",[944,1989,1990,2114],{},[795,1991,1994],{"className":797,"code":1992,"filename":1993,"language":800,"meta":801,"style":801},"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","services\u002Fcheckout.ts",[673,1995,1996,2015,2019,2031,2048,2060,2076,2092,2108],{"__ignoreMap":801},[805,1997,1998,2000,2002,2005,2007,2009,2011,2013],{"class":807,"line":808},[805,1999,812],{"class":811},[805,2001,816],{"class":815},[805,2003,2004],{"class":819}," createError",[805,2006,823],{"class":815},[805,2008,826],{"class":811},[805,2010,829],{"class":815},[805,2012,618],{"class":832},[805,2014,835],{"class":815},[805,2016,2017],{"class":807,"line":838},[805,2018,842],{"emptyLinePlaceholder":841},[805,2020,2021,2024,2026,2028],{"class":807,"line":845},[805,2022,2023],{"class":811},"throw",[805,2025,2004],{"class":854},[805,2027,857],{"class":819},[805,2029,2030],{"class":815},"{\n",[805,2032,2033,2036,2038,2040,2043,2045],{"class":807,"line":881},[805,2034,2035],{"class":896},"  message",[805,2037,900],{"class":815},[805,2039,829],{"class":815},[805,2041,2042],{"class":832},"Payment failed",[805,2044,860],{"class":815},[805,2046,2047],{"class":815},",\n",[805,2049,2050,2053,2055,2058],{"class":807,"line":1068},[805,2051,2052],{"class":896},"  status",[805,2054,900],{"class":815},[805,2056,2057],{"class":931}," 402",[805,2059,2047],{"class":815},[805,2061,2062,2065,2067,2069,2072,2074],{"class":807,"line":1300},[805,2063,2064],{"class":896},"  why",[805,2066,900],{"class":815},[805,2068,829],{"class":815},[805,2070,2071],{"class":832},"Card declined by issuer (insufficient funds)",[805,2073,860],{"class":815},[805,2075,2047],{"class":815},[805,2077,2078,2081,2083,2085,2088,2090],{"class":807,"line":1344},[805,2079,2080],{"class":896},"  fix",[805,2082,900],{"class":815},[805,2084,829],{"class":815},[805,2086,2087],{"class":832},"Try a different payment method or contact your bank",[805,2089,860],{"class":815},[805,2091,2047],{"class":815},[805,2093,2094,2097,2099,2101,2104,2106],{"class":807,"line":1364},[805,2095,2096],{"class":896},"  link",[805,2098,900],{"class":815},[805,2100,829],{"class":815},[805,2102,2103],{"class":832},"https:\u002F\u002Fdocs.example.com\u002Fpayments\u002Fdeclined",[805,2105,860],{"class":815},[805,2107,2047],{"class":815},[805,2109,2110,2112],{"class":807,"line":1371},[805,2111,1374],{"class":815},[805,2113,878],{"class":819},[795,2115,2119],{"className":2116,"code":2117,"filename":2118,"language":1663,"meta":801,"style":801},"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",[673,2120,2121,2125,2142,2162,2175,2195,2213,2230,2235],{"__ignoreMap":801},[805,2122,2123],{"class":807,"line":808},[805,2124,2030],{"class":815},[805,2126,2127,2130,2133,2136,2138,2140],{"class":807,"line":838},[805,2128,2129],{"class":815},"  \"",[805,2131,2132],{"class":979},"statusCode",[805,2134,2135],{"class":815},"\"",[805,2137,900],{"class":815},[805,2139,2057],{"class":931},[805,2141,2047],{"class":815},[805,2143,2144,2146,2149,2151,2153,2156,2158,2160],{"class":807,"line":845},[805,2145,2129],{"class":815},[805,2147,2148],{"class":979},"message",[805,2150,2135],{"class":815},[805,2152,900],{"class":815},[805,2154,2155],{"class":815}," \"",[805,2157,2042],{"class":832},[805,2159,2135],{"class":815},[805,2161,2047],{"class":815},[805,2163,2164,2166,2169,2171,2173],{"class":807,"line":881},[805,2165,2129],{"class":815},[805,2167,2168],{"class":979},"data",[805,2170,2135],{"class":815},[805,2172,900],{"class":815},[805,2174,1275],{"class":815},[805,2176,2177,2180,2183,2185,2187,2189,2191,2193],{"class":807,"line":1068},[805,2178,2179],{"class":815},"    \"",[805,2181,746],{"class":2182},"sBMFI",[805,2184,2135],{"class":815},[805,2186,900],{"class":815},[805,2188,2155],{"class":815},[805,2190,2071],{"class":832},[805,2192,2135],{"class":815},[805,2194,2047],{"class":815},[805,2196,2197,2199,2201,2203,2205,2207,2209,2211],{"class":807,"line":1300},[805,2198,2179],{"class":815},[805,2200,750],{"class":2182},[805,2202,2135],{"class":815},[805,2204,900],{"class":815},[805,2206,2155],{"class":815},[805,2208,2087],{"class":832},[805,2210,2135],{"class":815},[805,2212,2047],{"class":815},[805,2214,2215,2217,2219,2221,2223,2225,2227],{"class":807,"line":1344},[805,2216,2179],{"class":815},[805,2218,753],{"class":2182},[805,2220,2135],{"class":815},[805,2222,900],{"class":815},[805,2224,2155],{"class":815},[805,2226,2103],{"class":832},[805,2228,2229],{"class":815},"\"\n",[805,2231,2232],{"class":807,"line":1364},[805,2233,2234],{"class":815},"  }\n",[805,2236,2237],{"class":807,"line":1371},[805,2238,2239],{"class":815},"}\n",[652,2241,2243],{"id":2242},"why-one-event-beats-ten-lines","Why one event beats ten lines",[613,2245,2246,2247,2250],{},"We're entering an era where AI agents build, debug, and maintain applications. These agents need ",[616,2248,2249],{},"structured context"," to work effectively:",[709,2252,2253,2260,2267],{},[712,2254,2255,2259],{},[616,2256,2257],{},[673,2258,746],{},": The root cause, so the agent understands what went wrong",[712,2261,2262,2266],{},[616,2263,2264],{},[673,2265,750],{},": An actionable solution the agent can suggest or apply",[712,2268,2269,2273],{},[616,2270,2271],{},[673,2272,753],{},": Documentation for complex issues",[613,2275,2276,2277,2279,2280,2283],{},"Traditional ",[673,2278,675],{}," and generic ",[673,2281,2282],{},"throw new Error()"," provide no actionable context. evlog's structured output is designed for both humans and AI to parse and act on.",[652,2285,2287],{"id":2286},"next-steps","Next Steps",[709,2289,2290,2301,2314],{},[712,2291,2292,2295,2296,2298,2299,851],{},[616,2293,2294],{},"Try evlog:"," follow ",[624,2297,20],{"href":21}," and the ",[624,2300,25],{"href":26},[712,2302,2303,2306,2307,2310,2311,2313],{},[616,2304,2305],{},"Decide whether it fits your project:"," read ",[624,2308,2309],{"href":31},"Choosing a TypeScript Logger",", or ",[624,2312,15],{"href":16}," for a new application.",[712,2315,2316,2319,2320,2323],{},[616,2317,2318],{},"Explore the concepts:"," the ",[624,2321,2322],{"href":42},"Logging Overview"," connects simple logs, wide events, and structured errors.",[2325,2326,2327],"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":801,"searchDepth":838,"depth":838,"links":2329},[2330,2331,2332,2337,2338],{"id":654,"depth":838,"text":655},{"id":703,"depth":838,"text":704},{"id":779,"depth":838,"text":780,"children":2333},[2334,2335,2336],{"id":787,"depth":845,"text":46},{"id":939,"depth":845,"text":51},{"id":1975,"depth":845,"text":56},{"id":2242,"depth":838,"text":2243},{"id":2286,"depth":838,"text":2287},"Understand what happened in your app with evlog: structured logging, wide events, and errors that explain what went wrong and how to fix it.","md",[2342,2345],{"label":25,"icon":28,"to":26,"color":2343,"variant":2344},"neutral","subtle",{"label":2346,"icon":2347,"to":2348,"target":2349,"color":2343,"variant":2344},"GitHub","i-simple-icons-github","https:\u002F\u002Fgithub.com\u002Fevloghq\u002Fevlog","_blank",{},{"icon":13},{"title":10,"description":2339},"FCusT6BjiEh1f8OIwZOIMjrS40BDRSIP5WgfoPnftvc",[2355,2356],null,{"title":15,"path":16,"stem":17,"description":2357,"icon":18,"children":-1},"The cheapest moment to add structured logging is before the first request. Pick evlog on day zero and the rest of the system inherits it.",1791230885233]