[{"data":1,"prerenderedAt":3406},["ShallowReactive",2],{"navigation_docs":3,"-start-quick-start":567,"-start-quick-start-surround":3401},[4,30,80,133,313,444,503,542],{"title":5,"path":6,"stem":7,"children":8,"page":29},"Start","\u002Fstart","1.start",[9,14,19,24],{"title":10,"path":11,"stem":12,"icon":13},"Introduction","\u002Fstart\u002Fintroduction","1.start\u002F1.introduction","i-lucide-info",{"title":15,"path":16,"stem":17,"icon":18},"Why start with evlog","\u002Fstart\u002Fwhy-evlog","1.start\u002F2.why-evlog","i-lucide-rocket",{"title":20,"path":21,"stem":22,"icon":23},"Installation","\u002Fstart\u002Finstallation","1.start\u002F3.installation","i-lucide-download",{"title":25,"path":26,"stem":27,"icon":28},"Quick Start","\u002Fstart\u002Fquick-start","1.start\u002F4.quick-start","i-lucide-zap",false,{"title":31,"path":32,"stem":33,"children":34,"page":29},"Learn","\u002Flearn","2.learn",[35,40,45,50,55,60,65,70,75],{"title":36,"path":37,"stem":38,"icon":39},"Overview","\u002Flearn\u002Foverview","2.learn\u002F0.overview","i-lucide-list",{"title":41,"path":42,"stem":43,"icon":44},"Simple Logging","\u002Flearn\u002Fsimple-logging","2.learn\u002F1.simple-logging","i-lucide-terminal",{"title":46,"path":47,"stem":48,"icon":49},"Wide Events","\u002Flearn\u002Fwide-events","2.learn\u002F2.wide-events","i-lucide-layers",{"title":51,"path":52,"stem":53,"icon":54},"Structured Errors","\u002Flearn\u002Fstructured-errors","2.learn\u002F3.structured-errors","i-lucide-shield-alert",{"title":56,"path":57,"stem":58,"icon":59},"Lifecycle","\u002Flearn\u002Flifecycle","2.learn\u002F4.lifecycle","i-lucide-arrow-right-left",{"title":61,"path":62,"stem":63,"icon":64},"Sampling","\u002Flearn\u002Fsampling","2.learn\u002F5.sampling","i-lucide-filter",{"title":66,"path":67,"stem":68,"icon":69},"Auto-Redaction","\u002Flearn\u002Fredaction","2.learn\u002F6.redaction","i-lucide-eye-off",{"title":71,"path":72,"stem":73,"icon":74},"Typed Fields","\u002Flearn\u002Ftyped-fields","2.learn\u002F7.typed-fields","i-simple-icons-typescript",{"title":76,"path":77,"stem":78,"icon":79},"Catalogs","\u002Flearn\u002Fcatalogs","2.learn\u002F8.catalogs","i-lucide-book-open",{"title":81,"path":82,"stem":83,"children":84,"page":29},"CLI","\u002Fcli","3.cli",[85,88,93,98,103,108,113,118,123,128],{"title":36,"path":86,"stem":87,"icon":44},"\u002Fcli\u002Foverview","3.cli\u002F0.overview",{"title":89,"path":90,"stem":91,"icon":92},"init","\u002Fcli\u002Finit","3.cli\u002F1.init","i-lucide-wand-sparkles",{"title":94,"path":95,"stem":96,"icon":97},"map","\u002Fcli\u002Fmap","3.cli\u002F2.map","i-lucide-radar",{"title":99,"path":100,"stem":101,"icon":102},"Rules","\u002Fcli\u002Frules","3.cli\u002F3.rules","i-lucide-list-checks",{"title":104,"path":105,"stem":106,"icon":107},"Scoring","\u002Fcli\u002Fscoring","3.cli\u002F4.scoring","i-lucide-gauge",{"title":109,"path":110,"stem":111,"icon":112},"CI","\u002Fcli\u002Fci","3.cli\u002F5.ci","i-lucide-git-pull-request",{"title":114,"path":115,"stem":116,"icon":117},"doctor","\u002Fcli\u002Fdoctor","3.cli\u002F6.doctor","i-lucide-stethoscope",{"title":119,"path":120,"stem":121,"icon":122},"telemetry","\u002Fcli\u002Ftelemetry","3.cli\u002F7.telemetry","i-lucide-bar-chart-3",{"title":124,"path":125,"stem":126,"icon":127},"agents","\u002Fcli\u002Fagents","3.cli\u002F8.agents","i-lucide-bot",{"title":129,"path":130,"stem":131,"icon":132},"Observability Score","\u002Fcli\u002Fobservability-score","3.cli\u002F9.observability-score","i-lucide-activity",{"title":134,"path":135,"stem":136,"children":137,"page":29},"Integrate","\u002Fintegrate","4.integrate",[138,142,225],{"title":36,"path":139,"stem":140,"icon":141},"\u002Fintegrate\u002Foverview","4.integrate\u002F0.overview","i-lucide-plug",{"title":143,"path":144,"stem":145,"children":146,"page":29},"Adapters","\u002Fintegrate\u002Fadapters","4.integrate\u002Fadapters",[147,150,180,205],{"title":36,"path":148,"stem":149,"icon":39},"\u002Fintegrate\u002Fadapters\u002Foverview","4.integrate\u002Fadapters\u002F01.overview",{"title":151,"path":152,"stem":153,"children":154,"page":29},"Cloud","\u002Fintegrate\u002Fadapters\u002Fcloud","4.integrate\u002Fadapters\u002Fcloud",[155,160,165,170,175],{"title":156,"path":157,"stem":158,"icon":159},"Axiom","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Faxiom","4.integrate\u002Fadapters\u002Fcloud\u002F01.axiom","i-custom-axiom",{"title":161,"path":162,"stem":163,"icon":164},"PostHog","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fposthog","4.integrate\u002Fadapters\u002Fcloud\u002F02.posthog","i-simple-icons-posthog",{"title":166,"path":167,"stem":168,"icon":169},"Sentry","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fsentry","4.integrate\u002Fadapters\u002Fcloud\u002F03.sentry","i-simple-icons-sentry",{"title":171,"path":172,"stem":173,"icon":174},"Better Stack","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fbetter-stack","4.integrate\u002Fadapters\u002Fcloud\u002F04.better-stack","i-simple-icons-betterstack",{"title":176,"path":177,"stem":178,"icon":179},"Datadog","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fdatadog","4.integrate\u002Fadapters\u002Fcloud\u002F05.datadog","i-simple-icons-datadog",{"title":181,"path":182,"stem":183,"children":184,"page":29},"Cloud or Self-Hosted","\u002Fintegrate\u002Fadapters\u002Fhybrid","4.integrate\u002Fadapters\u002Fhybrid",[185,190,195,200],{"title":186,"path":187,"stem":188,"icon":189},"Grafana Loki","\u002Fintegrate\u002Fadapters\u002Fhybrid\u002Floki","4.integrate\u002Fadapters\u002Fhybrid\u002F01.loki","i-simple-icons-grafana",{"title":191,"path":192,"stem":193,"icon":194},"ClickHouse","\u002Fintegrate\u002Fadapters\u002Fhybrid\u002Fclickhouse","4.integrate\u002Fadapters\u002Fhybrid\u002F02.clickhouse","i-simple-icons-clickhouse",{"title":196,"path":197,"stem":198,"icon":199},"OTLP","\u002Fintegrate\u002Fadapters\u002Fhybrid\u002Fotlp","4.integrate\u002Fadapters\u002Fhybrid\u002F03.otlp","i-simple-icons-opentelemetry",{"title":201,"path":202,"stem":203,"icon":204},"HyperDX","\u002Fintegrate\u002Fadapters\u002Fhybrid\u002Fhyperdx","4.integrate\u002Fadapters\u002Fhybrid\u002F04.hyperdx","i-custom-hyperdx",{"title":206,"path":207,"stem":208,"children":209,"page":29},"Self-Hosted","\u002Fintegrate\u002Fadapters\u002Fself-hosted","4.integrate\u002Fadapters\u002Fself-hosted",[210,215,220],{"title":211,"path":212,"stem":213,"icon":214},"File System","\u002Fintegrate\u002Fadapters\u002Fself-hosted\u002Ffs","4.integrate\u002Fadapters\u002Fself-hosted\u002F01.fs","i-lucide-hard-drive",{"title":216,"path":217,"stem":218,"icon":219},"NuxtHub","\u002Fintegrate\u002Fadapters\u002Fself-hosted\u002Fnuxthub","4.integrate\u002Fadapters\u002Fself-hosted\u002F02.nuxthub","i-simple-icons-nuxt",{"title":221,"path":222,"stem":223,"icon":224},"Memory","\u002Fintegrate\u002Fadapters\u002Fself-hosted\u002Fmemory","4.integrate\u002Fadapters\u002Fself-hosted\u002F03.memory","i-lucide-cpu",{"title":226,"path":227,"stem":228,"children":229,"page":29},"Frameworks","\u002Fintegrate\u002Fframeworks","4.integrate\u002Fframeworks",[230,234,239,244,249,254,259,264,269,274,279,284,289,294,298,303,308],{"title":36,"path":231,"stem":232,"icon":233},"\u002Fintegrate\u002Fframeworks\u002Foverview","4.integrate\u002Fframeworks\u002F00.overview","i-lucide-layout-grid",{"title":235,"path":236,"stem":237,"icon":238},"Nuxt","\u002Fintegrate\u002Fframeworks\u002Fnuxt","4.integrate\u002Fframeworks\u002F01.nuxt","i-simple-icons-nuxtdotjs",{"title":240,"path":241,"stem":242,"icon":243},"Next.js","\u002Fintegrate\u002Fframeworks\u002Fnextjs","4.integrate\u002Fframeworks\u002F02.nextjs","i-simple-icons-nextdotjs",{"title":245,"path":246,"stem":247,"icon":248},"SvelteKit","\u002Fintegrate\u002Fframeworks\u002Fsveltekit","4.integrate\u002Fframeworks\u002F03.sveltekit","i-simple-icons-svelte",{"title":250,"path":251,"stem":252,"icon":253},"Nitro","\u002Fintegrate\u002Fframeworks\u002Fnitro","4.integrate\u002Fframeworks\u002F04.nitro","i-custom-nitro",{"title":255,"path":256,"stem":257,"icon":258},"TanStack Start","\u002Fintegrate\u002Fframeworks\u002Ftanstack-start","4.integrate\u002Fframeworks\u002F05.tanstack-start","i-custom-tanstack",{"title":260,"path":261,"stem":262,"icon":263},"NestJS","\u002Fintegrate\u002Fframeworks\u002Fnestjs","4.integrate\u002Fframeworks\u002F06.nestjs","i-simple-icons-nestjs",{"title":265,"path":266,"stem":267,"icon":268},"Express","\u002Fintegrate\u002Fframeworks\u002Fexpress","4.integrate\u002Fframeworks\u002F07.express","i-simple-icons-express",{"title":270,"path":271,"stem":272,"icon":273},"Hono","\u002Fintegrate\u002Fframeworks\u002Fhono","4.integrate\u002Fframeworks\u002F08.hono","i-simple-icons-hono",{"title":275,"path":276,"stem":277,"icon":278},"Fastify","\u002Fintegrate\u002Fframeworks\u002Ffastify","4.integrate\u002Fframeworks\u002F09.fastify","i-simple-icons-fastify",{"title":280,"path":281,"stem":282,"icon":283},"Elysia","\u002Fintegrate\u002Fframeworks\u002Felysia","4.integrate\u002Fframeworks\u002F10.elysia","i-custom-elysia",{"title":285,"path":286,"stem":287,"icon":288},"React Router","\u002Fintegrate\u002Fframeworks\u002Freact-router","4.integrate\u002Fframeworks\u002F11.react-router","i-custom-reactrouter",{"title":290,"path":291,"stem":292,"icon":293},"Cloudflare Workers","\u002Fintegrate\u002Fframeworks\u002Fcloudflare-workers","4.integrate\u002Fframeworks\u002F12.cloudflare-workers","i-simple-icons-cloudflare",{"title":295,"path":296,"stem":297,"icon":74},"Standalone","\u002Fintegrate\u002Fframeworks\u002Fstandalone","4.integrate\u002Fframeworks\u002F13.standalone",{"title":299,"path":300,"stem":301,"icon":302},"Astro","\u002Fintegrate\u002Fframeworks\u002Fastro","4.integrate\u002Fframeworks\u002F14.astro","i-simple-icons-astro",{"title":304,"path":305,"stem":306,"icon":307},"oRPC","\u002Fintegrate\u002Fframeworks\u002Forpc","4.integrate\u002Fframeworks\u002F15.orpc","i-lucide-network",{"title":309,"path":310,"stem":311,"icon":312},"AWS Lambda","\u002Fintegrate\u002Fframeworks\u002Faws-lambda","4.integrate\u002Fframeworks\u002F16.aws-lambda","i-custom-lambda",{"title":314,"path":315,"stem":316,"children":317,"page":29},"Use Cases","\u002Fuse-cases","5.use-cases",[318,321,326,354,381,413,434,439],{"title":36,"path":319,"stem":320,"icon":102},"\u002Fuse-cases\u002Foverview","5.use-cases\u002F0.overview",{"title":322,"path":323,"stem":324,"icon":325},"Client Logging","\u002Fuse-cases\u002Fclient-logging","5.use-cases\u002F1.client-logging","i-lucide-monitor",{"title":327,"icon":328,"path":329,"stem":330,"children":331,"page":29},"AI SDK","i-simple-icons-vercel","\u002Fuse-cases\u002Fai-sdk","5.use-cases\u002F2.ai-sdk",[332,335,340,345,350],{"title":36,"path":333,"stem":334,"icon":39},"\u002Fuse-cases\u002Fai-sdk\u002Foverview","5.use-cases\u002F2.ai-sdk\u002F01.overview",{"title":336,"path":337,"stem":338,"icon":339},"Usage","\u002Fuse-cases\u002Fai-sdk\u002Fusage","5.use-cases\u002F2.ai-sdk\u002F02.usage","i-lucide-code",{"title":341,"path":342,"stem":343,"icon":344},"Options","\u002Fuse-cases\u002Fai-sdk\u002Foptions","5.use-cases\u002F2.ai-sdk\u002F03.options","i-lucide-sliders",{"title":346,"path":347,"stem":348,"icon":349},"Metadata","\u002Fuse-cases\u002Fai-sdk\u002Fmetadata","5.use-cases\u002F2.ai-sdk\u002F04.metadata","i-lucide-database",{"title":351,"path":352,"stem":353,"icon":132},"Telemetry","\u002Fuse-cases\u002Fai-sdk\u002Ftelemetry","5.use-cases\u002F2.ai-sdk\u002F05.telemetry",{"title":355,"icon":356,"path":357,"stem":358,"children":359,"page":29},"Better Auth","i-simple-icons-betterauth","\u002Fuse-cases\u002Fbetter-auth","5.use-cases\u002F3.better-auth",[360,363,368,373,377],{"title":36,"path":361,"stem":362,"icon":39},"\u002Fuse-cases\u002Fbetter-auth\u002Foverview","5.use-cases\u002F3.better-auth\u002F01.overview",{"title":364,"path":365,"stem":366,"icon":367},"Identify User","\u002Fuse-cases\u002Fbetter-auth\u002Fidentify-user","5.use-cases\u002F3.better-auth\u002F02.identify-user","i-lucide-user-check",{"title":369,"path":370,"stem":371,"icon":372},"Middleware","\u002Fuse-cases\u002Fbetter-auth\u002Fmiddleware","5.use-cases\u002F3.better-auth\u002F03.middleware","i-lucide-shield",{"title":374,"path":375,"stem":376,"icon":325},"Client Sync","\u002Fuse-cases\u002Fbetter-auth\u002Fclient-sync","5.use-cases\u002F3.better-auth\u002F04.client-sync",{"title":378,"path":379,"stem":380,"icon":107},"Performance","\u002Fuse-cases\u002Fbetter-auth\u002Fperformance","5.use-cases\u002F3.better-auth\u002F05.performance",{"title":382,"icon":383,"path":384,"stem":385,"children":386,"page":29},"Audit Logs","i-lucide-shield-check","\u002Fuse-cases\u002Faudit","5.use-cases\u002F4.audit",[387,390,395,400,405,409],{"title":36,"path":388,"stem":389,"icon":39},"\u002Fuse-cases\u002Faudit\u002Foverview","5.use-cases\u002F4.audit\u002F01.overview",{"title":391,"path":392,"stem":393,"icon":394},"Schema","\u002Fuse-cases\u002Faudit\u002Fschema","5.use-cases\u002F4.audit\u002F02.schema","i-lucide-file-text",{"title":396,"path":397,"stem":398,"icon":399},"Recording","\u002Fuse-cases\u002Faudit\u002Frecording","5.use-cases\u002F4.audit\u002F03.recording","i-lucide-pen-line",{"title":401,"path":402,"stem":403,"icon":404},"Drains","\u002Fuse-cases\u002Faudit\u002Fpipeline","5.use-cases\u002F4.audit\u002F04.pipeline","i-lucide-link",{"title":406,"path":407,"stem":408,"icon":383},"Compliance","\u002Fuse-cases\u002Faudit\u002Fcompliance","5.use-cases\u002F4.audit\u002F05.compliance",{"title":410,"path":411,"stem":412,"icon":79},"Recipes","\u002Fuse-cases\u002Faudit\u002Frecipes","5.use-cases\u002F4.audit\u002F06.recipes",{"title":351,"icon":107,"path":414,"stem":415,"children":416,"page":29},"\u002Fuse-cases\u002Ftelemetry","5.use-cases\u002F4.telemetry",[417,420,425,430],{"title":36,"path":418,"stem":419,"icon":39},"\u002Fuse-cases\u002Ftelemetry\u002Foverview","5.use-cases\u002F4.telemetry\u002F01.overview",{"title":421,"path":422,"stem":423,"icon":424},"Setup","\u002Fuse-cases\u002Ftelemetry\u002Fsetup","5.use-cases\u002F4.telemetry\u002F02.setup","i-lucide-wrench",{"title":426,"path":427,"stem":428,"icon":429},"Ingest","\u002Fuse-cases\u002Ftelemetry\u002Fingest","5.use-cases\u002F4.telemetry\u002F03.ingest","i-lucide-server",{"title":431,"path":432,"stem":433,"icon":79},"Reference","\u002Fuse-cases\u002Ftelemetry\u002Freference","5.use-cases\u002F4.telemetry\u002F04.reference",{"title":435,"path":436,"stem":437,"icon":438},"Enrichers","\u002Fuse-cases\u002Fenrichers","5.use-cases\u002F5.enrichers","i-lucide-sparkles",{"title":440,"path":441,"stem":442,"icon":443},"eve","\u002Fuse-cases\u002Feve","5.use-cases\u002F5.eve","i-custom-eve",{"title":445,"path":446,"stem":447,"children":448,"page":29},"Extend","\u002Fextend","6.extend",[449,453,458,463,467,472,476,480,484,488,493,498],{"title":36,"path":450,"stem":451,"icon":452},"\u002Fextend\u002Foverview","6.extend\u002F0.overview","i-lucide-blocks",{"title":454,"path":455,"stem":456,"icon":457},"Stream","\u002Fextend\u002Fstream","6.extend\u002F1.stream","i-lucide-radio-tower",{"title":459,"path":460,"stem":461,"icon":462},"Custom framework","\u002Fextend\u002Fcustom-framework","6.extend\u002F10.custom-framework","i-lucide-puzzle",{"title":464,"path":465,"stem":466,"icon":457},"Diagnostics channel","\u002Fextend\u002Fdiagnostics-channel","6.extend\u002F11.diagnostics-channel",{"title":468,"path":469,"stem":470,"icon":471},"FS reader","\u002Fextend\u002Ffs-reader","6.extend\u002F2.fs-reader","i-lucide-folder-search",{"title":410,"path":473,"stem":474,"icon":475},"\u002Fextend\u002Fconsumer-recipes","6.extend\u002F3.consumer-recipes","i-lucide-chef-hat",{"title":477,"path":478,"stem":479,"icon":452},"Plugins","\u002Fextend\u002Fplugins","6.extend\u002F4.plugins",{"title":481,"path":482,"stem":483,"icon":438},"Custom enrichers","\u002Fextend\u002Fcustom-enrichers","6.extend\u002F5.custom-enrichers",{"title":485,"path":486,"stem":487,"icon":64},"Tail sampling","\u002Fextend\u002Ftail-sampling","6.extend\u002F6.tail-sampling",{"title":489,"path":490,"stem":491,"icon":492},"Identity headers","\u002Fextend\u002Fidentity-headers","6.extend\u002F7.identity-headers","i-lucide-fingerprint",{"title":494,"path":495,"stem":496,"icon":497},"Custom drains","\u002Fextend\u002Fcustom-drains","6.extend\u002F8.custom-drains","i-lucide-share-2",{"title":499,"path":500,"stem":501,"icon":502},"Drain pipeline","\u002Fextend\u002Fdrain-pipeline","6.extend\u002F9.drain-pipeline","i-lucide-workflow",{"title":431,"path":504,"stem":505,"children":506,"page":29},"\u002Freference","7.reference",[507,511,516,519,524,528,533,537],{"title":36,"path":508,"stem":509,"icon":510},"\u002Freference\u002Foverview","7.reference\u002F0.overview","i-lucide-book-marked",{"title":512,"path":513,"stem":514,"icon":515},"Configuration","\u002Freference\u002Fconfiguration","7.reference\u002F1.configuration","i-lucide-settings",{"title":378,"path":517,"stem":518,"icon":107},"\u002Freference\u002Fperformance","7.reference\u002F2.performance",{"title":520,"path":521,"stem":522,"icon":523},"Vite Plugin","\u002Freference\u002Fvite-plugin","7.reference\u002F3.vite-plugin","i-custom-vite",{"title":525,"path":526,"stem":527,"icon":383},"Best Practices","\u002Freference\u002Fbest-practices","7.reference\u002F4.best-practices",{"title":529,"path":530,"stem":531,"icon":532},"vs Other Loggers","\u002Freference\u002Fvs-other-loggers","7.reference\u002F5.vs-other-loggers","i-lucide-scale",{"title":534,"path":535,"stem":536,"icon":438},"Agent Skills","\u002Freference\u002Fagent-skills","7.reference\u002F6.agent-skills",{"title":538,"path":539,"stem":540,"icon":541},"Cost","\u002Freference\u002Fcost","7.reference\u002F7.cost","i-lucide-receipt",{"title":543,"path":544,"stem":545,"children":546,"page":29},"Compare","\u002Fcompare","8.compare",[547,551,555,559,563],{"title":548,"path":549,"stem":550,"icon":532},"evlog vs Pino","\u002Fcompare\u002Fpino","8.compare\u002F1.pino",{"title":552,"path":553,"stem":554,"icon":199},"evlog vs OpenTelemetry","\u002Fcompare\u002Fopentelemetry","8.compare\u002F2.opentelemetry",{"title":556,"path":557,"stem":558,"icon":532},"evlog vs LogTape","\u002Fcompare\u002Flogtape","8.compare\u002F3.logtape",{"title":560,"path":561,"stem":562,"icon":532},"evlog vs Winston: formats and request events","\u002Fcompare\u002Fwinston","8.compare\u002F4.winston",{"title":564,"path":565,"stem":566,"icon":532},"evlog vs Consola: reporters and request context","\u002Fcompare\u002Fconsola","8.compare\u002F5.consola",{"id":568,"title":25,"body":569,"description":3391,"extension":3392,"links":3393,"meta":3397,"navigation":3398,"path":26,"seo":3399,"stem":27,"__hash__":3400},"docs\u002F1.start\u002F4.quick-start.md",{"type":570,"value":571,"toc":3376},"minimark",[572,576,617,661,666,669,880,883,904,912,916,926,1191,1210,1226,1299,1313,1317,1324,1653,1663,1668,1731,1735,1738,1743,1749,1939,1942,1989,1993,1998,2126,2139,2143,2149,2398,2402,2504,2508,2513,2875,2879,2885,3276,3282,3286,3289,3312,3327,3330,3334,3372],[573,574,575],"p",{},"This guide covers the core APIs you'll use most often with evlog.",[577,578,580,581,585,586,590,591,594,595,598,599,602,603,606,607,590,610,594,613,616],"callout",{"color":579,"icon":438},"info","In Nuxt, evlog ",[582,583,584],"strong",{},"auto-imports"," ",[587,588,589],"code",{},"useLogger",", ",[587,592,593],{},"log",", and ",[587,596,597],{},"parseError",". ",[587,600,601],{},"createError"," is imported from ",[587,604,605],{},"evlog",": the auto-imported one is Nuxt's own, and it drops ",[587,608,609],{},"why",[587,611,612],{},"fix",[587,614,615],{},"link",".",[618,619,622,625,647],"prompt",{":actions":620,"description":621,"icon":28},"[\"copy\",\"cursor\",\"claude\"]","Get evlog running in 2 minutes",[573,623,624],{},"Get evlog running in my project in under 2 minutes.",[626,627,628,632,635,638,641,644],"ul",{},[629,630,631],"li",{},"Install evlog: pnpm add evlog",[629,633,634],{},"Detect my framework and wire up the matching integration",[629,636,637],{},"Set evlog.env.service to my app name",[629,639,640],{},"Add a single useLogger(event) call in a route handler with log.set({ ... })",[629,642,643],{},"Throw one createError({ message, status, why, fix }) for an invalid input case",[629,645,646],{},"Trigger the route locally and confirm a single wide event prints to the terminal",[573,648,649,650,656,657],{},"Docs: ",[651,652,653],"a",{"href":653,"rel":654},"https:\u002F\u002Fwww.evlog.dev\u002Fstart\u002Fquick-start",[655],"nofollow","\nFrameworks: ",[651,658,659],{"href":659,"rel":660},"https:\u002F\u002Fwww.evlog.dev\u002Fintegrate\u002Fframeworks\u002Foverview",[655],[662,663,665],"h2",{"id":664},"log-simple-logging","log (Simple Logging)",[573,667,668],{},"The simplest way to use evlog. Fire-and-forget structured logs, anywhere in your code:",[670,671,672,832],"code-group",{},[673,674,680],"pre",{"className":675,"code":676,"filename":677,"language":678,"meta":679,"style":679},"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' })\nlog.warn('cache', 'Cache miss')\n","Server","typescript","",[587,681,682,714,721,755,802],{"__ignoreMap":679},[683,684,687,691,695,699,702,705,708,711],"span",{"class":685,"line":686},"line",1,[683,688,690],{"class":689},"s7zQu","import",[683,692,694],{"class":693},"sMK4o"," {",[683,696,698],{"class":697},"sTEyZ"," log",[683,700,701],{"class":693}," }",[683,703,704],{"class":689}," from",[683,706,707],{"class":693}," '",[683,709,605],{"class":710},"sfazB",[683,712,713],{"class":693},"'\n",[683,715,717],{"class":685,"line":716},2,[683,718,720],{"emptyLinePlaceholder":719},true,"\n",[683,722,724,726,728,731,734,737,740,742,745,747,750,752],{"class":685,"line":723},3,[683,725,593],{"class":697},[683,727,616],{"class":693},[683,729,579],{"class":730},"s2Zo4",[683,732,733],{"class":697},"(",[683,735,736],{"class":693},"'",[683,738,739],{"class":710},"auth",[683,741,736],{"class":693},[683,743,744],{"class":693},",",[683,746,707],{"class":693},[683,748,749],{"class":710},"User logged in",[683,751,736],{"class":693},[683,753,754],{"class":697},")\n",[683,756,758,760,762,765,767,770,774,777,779,782,784,786,789,791,793,796,798,800],{"class":685,"line":757},4,[683,759,593],{"class":697},[683,761,616],{"class":693},[683,763,764],{"class":730},"error",[683,766,733],{"class":697},[683,768,769],{"class":693},"{",[683,771,773],{"class":772},"swJcz"," action",[683,775,776],{"class":693},":",[683,778,707],{"class":693},[683,780,781],{"class":710},"payment",[683,783,736],{"class":693},[683,785,744],{"class":693},[683,787,788],{"class":772}," error",[683,790,776],{"class":693},[683,792,707],{"class":693},[683,794,795],{"class":710},"card_declined",[683,797,736],{"class":693},[683,799,701],{"class":693},[683,801,754],{"class":697},[683,803,805,807,809,812,814,816,819,821,823,825,828,830],{"class":685,"line":804},5,[683,806,593],{"class":697},[683,808,616],{"class":693},[683,810,811],{"class":730},"warn",[683,813,733],{"class":697},[683,815,736],{"class":693},[683,817,818],{"class":710},"cache",[683,820,736],{"class":693},[683,822,744],{"class":693},[683,824,707],{"class":693},[683,826,827],{"class":710},"Cache miss",[683,829,736],{"class":693},[683,831,754],{"class":697},[673,833,838],{"className":834,"code":835,"filename":836,"language":837,"meta":679,"style":679},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","10:23:45.612 [auth] User logged in\n10:23:45.613 ERROR [my-app] action=payment error=card_declined\n10:23:45.614 [cache] Cache miss\n","Output","bash",[587,839,840,849,872],{"__ignoreMap":679},[683,841,842,846],{"class":685,"line":686},[683,843,845],{"class":844},"sBMFI","10:23:45.612",[683,847,848],{"class":697}," [auth] User logged in\n",[683,850,851,854,857,860,863,865,867,869],{"class":685,"line":716},[683,852,853],{"class":844},"10:23:45.613",[683,855,856],{"class":710}," ERROR",[683,858,859],{"class":697}," [my-app] action",[683,861,862],{"class":693},"=",[683,864,781],{"class":710},[683,866,788],{"class":697},[683,868,862],{"class":693},[683,870,871],{"class":710},"card_declined\n",[683,873,874,877],{"class":685,"line":723},[683,875,876],{"class":844},"10:23:45.614",[683,878,879],{"class":697}," [cache] Cache miss\n",[573,881,882],{},"Two call styles:",[626,884,885,895],{},[629,886,887,890,891,894],{},[582,888,889],{},"Tagged",": ",[587,892,893],{},"log.info('tag', 'message')"," for quick, readable console output",[629,896,897,890,900,903],{},[582,898,899],{},"Structured",[587,901,902],{},"log.info({ key: value })"," for rich events that flow through the drain pipeline",[577,905,908,909,911],{"color":906,"icon":907},"neutral","i-lucide-arrow-right","See the full ",[651,910,41],{"href":42}," guide for all patterns and drain integration.",[662,913,915],{"id":914},"createlogger-wide-events","createLogger (Wide Events)",[573,917,918,919,922,923,776],{},"When you need to ",[582,920,921],{},"accumulate context"," across multiple steps of an operation, whether a script, background job, queue worker, or workflow, use ",[587,924,925],{},"createLogger",[670,927,928,1134],{},[673,929,932],{"className":675,"code":930,"filename":931,"language":678,"meta":679,"style":679},"import { initLogger, createLogger } from 'evlog'\n\ninitLogger({ env: { service: 'sync-worker' } })\n\nconst log = createLogger({ jobId: job.id, queue: 'emails' })\n\nlog.set({ batch: { size: 50 } })\nlog.set({ batch: { processed: 50 } })\nlog.emit()\n","scripts\u002Fsync-job.ts",[587,933,934,958,962,996,1000,1048,1053,1089,1121],{"__ignoreMap":679},[683,935,936,938,940,943,945,948,950,952,954,956],{"class":685,"line":686},[683,937,690],{"class":689},[683,939,694],{"class":693},[683,941,942],{"class":697}," initLogger",[683,944,744],{"class":693},[683,946,947],{"class":697}," createLogger",[683,949,701],{"class":693},[683,951,704],{"class":689},[683,953,707],{"class":693},[683,955,605],{"class":710},[683,957,713],{"class":693},[683,959,960],{"class":685,"line":716},[683,961,720],{"emptyLinePlaceholder":719},[683,963,964,967,969,971,974,976,978,981,983,985,988,990,992,994],{"class":685,"line":723},[683,965,966],{"class":730},"initLogger",[683,968,733],{"class":697},[683,970,769],{"class":693},[683,972,973],{"class":772}," env",[683,975,776],{"class":693},[683,977,694],{"class":693},[683,979,980],{"class":772}," service",[683,982,776],{"class":693},[683,984,707],{"class":693},[683,986,987],{"class":710},"sync-worker",[683,989,736],{"class":693},[683,991,701],{"class":693},[683,993,701],{"class":693},[683,995,754],{"class":697},[683,997,998],{"class":685,"line":757},[683,999,720],{"emptyLinePlaceholder":719},[683,1001,1002,1006,1009,1011,1013,1015,1017,1020,1022,1025,1027,1030,1032,1035,1037,1039,1042,1044,1046],{"class":685,"line":804},[683,1003,1005],{"class":1004},"spNyl","const",[683,1007,1008],{"class":697}," log ",[683,1010,862],{"class":693},[683,1012,947],{"class":730},[683,1014,733],{"class":697},[683,1016,769],{"class":693},[683,1018,1019],{"class":772}," jobId",[683,1021,776],{"class":693},[683,1023,1024],{"class":697}," job",[683,1026,616],{"class":693},[683,1028,1029],{"class":697},"id",[683,1031,744],{"class":693},[683,1033,1034],{"class":772}," queue",[683,1036,776],{"class":693},[683,1038,707],{"class":693},[683,1040,1041],{"class":710},"emails",[683,1043,736],{"class":693},[683,1045,701],{"class":693},[683,1047,754],{"class":697},[683,1049,1051],{"class":685,"line":1050},6,[683,1052,720],{"emptyLinePlaceholder":719},[683,1054,1056,1058,1060,1063,1065,1067,1070,1072,1074,1077,1079,1083,1085,1087],{"class":685,"line":1055},7,[683,1057,593],{"class":697},[683,1059,616],{"class":693},[683,1061,1062],{"class":730},"set",[683,1064,733],{"class":697},[683,1066,769],{"class":693},[683,1068,1069],{"class":772}," batch",[683,1071,776],{"class":693},[683,1073,694],{"class":693},[683,1075,1076],{"class":772}," size",[683,1078,776],{"class":693},[683,1080,1082],{"class":1081},"sbssI"," 50",[683,1084,701],{"class":693},[683,1086,701],{"class":693},[683,1088,754],{"class":697},[683,1090,1092,1094,1096,1098,1100,1102,1104,1106,1108,1111,1113,1115,1117,1119],{"class":685,"line":1091},8,[683,1093,593],{"class":697},[683,1095,616],{"class":693},[683,1097,1062],{"class":730},[683,1099,733],{"class":697},[683,1101,769],{"class":693},[683,1103,1069],{"class":772},[683,1105,776],{"class":693},[683,1107,694],{"class":693},[683,1109,1110],{"class":772}," processed",[683,1112,776],{"class":693},[683,1114,1082],{"class":1081},[683,1116,701],{"class":693},[683,1118,701],{"class":693},[683,1120,754],{"class":697},[683,1122,1124,1126,1128,1131],{"class":685,"line":1123},9,[683,1125,593],{"class":697},[683,1127,616],{"class":693},[683,1129,1130],{"class":730},"emit",[683,1132,1133],{"class":697},"()\n",[673,1135,1138],{"className":834,"code":1136,"filename":1137,"language":837,"meta":679,"style":679},"10:23:45.612 INFO [sync-worker] in 1204ms\n  ├─ jobId: job_abc123\n  ├─ queue: emails\n  └─ batch: size=50 processed=50\n","Output (Pretty)",[587,1139,1140,1150,1161,1171],{"__ignoreMap":679},[683,1141,1142,1144,1147],{"class":685,"line":686},[683,1143,845],{"class":844},[683,1145,1146],{"class":710}," INFO",[683,1148,1149],{"class":697}," [sync-worker] in 1204ms\n",[683,1151,1152,1155,1158],{"class":685,"line":716},[683,1153,1154],{"class":844},"  ├─",[683,1156,1157],{"class":710}," jobId:",[683,1159,1160],{"class":710}," job_abc123\n",[683,1162,1163,1165,1168],{"class":685,"line":723},[683,1164,1154],{"class":844},[683,1166,1167],{"class":710}," queue:",[683,1169,1170],{"class":710}," emails\n",[683,1172,1173,1176,1179,1182,1185,1188],{"class":685,"line":757},[683,1174,1175],{"class":844},"  └─",[683,1177,1178],{"class":710}," batch:",[683,1180,1181],{"class":710}," size=",[683,1183,1184],{"class":1081},"50",[683,1186,1187],{"class":710}," processed=",[683,1189,1190],{"class":1081},"50\n",[573,1192,1193,1196,1197,590,1199,590,1201,590,1203,590,1205,594,1207,616],{},[587,1194,1195],{},"createLogger()"," accepts any initial context as a plain object. It returns a logger with ",[587,1198,1062],{},[587,1200,764],{},[587,1202,579],{},[587,1204,811],{},[587,1206,1130],{},[587,1208,1209],{},"getContext",[573,1211,1212,1213,1216,1217,590,1220,594,1223,776],{},"For HTTP request contexts specifically, use ",[587,1214,1215],{},"createRequestLogger()"," which pre-populates ",[587,1218,1219],{},"method",[587,1221,1222],{},"path",[587,1224,1225],{},"requestId",[673,1227,1230],{"className":675,"code":1228,"filename":1229,"language":678,"meta":679,"style":679},"import { createRequestLogger } from 'evlog'\n\nconst log = createRequestLogger({ method: 'POST', path: '\u002Fapi\u002Fcheckout' })\n","src\u002Fworker.ts",[587,1231,1232,1251,1255],{"__ignoreMap":679},[683,1233,1234,1236,1238,1241,1243,1245,1247,1249],{"class":685,"line":686},[683,1235,690],{"class":689},[683,1237,694],{"class":693},[683,1239,1240],{"class":697}," createRequestLogger",[683,1242,701],{"class":693},[683,1244,704],{"class":689},[683,1246,707],{"class":693},[683,1248,605],{"class":710},[683,1250,713],{"class":693},[683,1252,1253],{"class":685,"line":716},[683,1254,720],{"emptyLinePlaceholder":719},[683,1256,1257,1259,1261,1263,1265,1267,1269,1272,1274,1276,1279,1281,1283,1286,1288,1290,1293,1295,1297],{"class":685,"line":723},[683,1258,1005],{"class":1004},[683,1260,1008],{"class":697},[683,1262,862],{"class":693},[683,1264,1240],{"class":730},[683,1266,733],{"class":697},[683,1268,769],{"class":693},[683,1270,1271],{"class":772}," method",[683,1273,776],{"class":693},[683,1275,707],{"class":693},[683,1277,1278],{"class":710},"POST",[683,1280,736],{"class":693},[683,1282,744],{"class":693},[683,1284,1285],{"class":772}," path",[683,1287,776],{"class":693},[683,1289,707],{"class":693},[683,1291,1292],{"class":710},"\u002Fapi\u002Fcheckout",[683,1294,736],{"class":693},[683,1296,701],{"class":693},[683,1298,754],{"class":697},[577,1300,1301,1302,1304,1305,1308,1309,1312],{"color":579,"icon":13},"With ",[587,1303,925],{}," and ",[587,1306,1307],{},"createRequestLogger",", you must call ",[587,1310,1311],{},"log.emit()"," manually. In framework integrations, this happens automatically.",[662,1314,1316],{"id":1315},"uselogger-retrieve-the-request-logger","useLogger (Retrieve the Request Logger)",[573,1318,1319,1320,1323],{},"When using a framework integration (Nuxt, Hono, Express, etc.), the middleware automatically creates a wide event logger on request start and emits it on response end. ",[587,1321,1322],{},"useLogger(event)"," retrieves that logger from the request context:",[670,1325,1326,1594],{},[673,1327,1330],{"className":675,"code":1328,"filename":1329,"language":678,"meta":679,"style":679},"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  log.set({ cart: { items: 3, total: 9999 } })\n\n  const order = await processCheckout()\n  log.set({ orderId: order.id })\n\n  return { success: true, orderId: order.id }\n})\n","server\u002Fapi\u002Fcheckout.post.ts",[587,1331,1332,1351,1355,1387,1405,1409,1457,1500,1504,1521,1549,1554,1586],{"__ignoreMap":679},[683,1333,1334,1336,1338,1341,1343,1345,1347,1349],{"class":685,"line":686},[683,1335,690],{"class":689},[683,1337,694],{"class":693},[683,1339,1340],{"class":697}," useLogger",[683,1342,701],{"class":693},[683,1344,704],{"class":689},[683,1346,707],{"class":693},[683,1348,605],{"class":710},[683,1350,713],{"class":693},[683,1352,1353],{"class":685,"line":716},[683,1354,720],{"emptyLinePlaceholder":719},[683,1356,1357,1360,1363,1366,1368,1371,1374,1378,1381,1384],{"class":685,"line":723},[683,1358,1359],{"class":689},"export",[683,1361,1362],{"class":689}," default",[683,1364,1365],{"class":730}," defineEventHandler",[683,1367,733],{"class":697},[683,1369,1370],{"class":1004},"async",[683,1372,1373],{"class":693}," (",[683,1375,1377],{"class":1376},"sHdIc","event",[683,1379,1380],{"class":693},")",[683,1382,1383],{"class":1004}," =>",[683,1385,1386],{"class":693}," {\n",[683,1388,1389,1392,1394,1397,1399,1401,1403],{"class":685,"line":757},[683,1390,1391],{"class":1004},"  const",[683,1393,698],{"class":697},[683,1395,1396],{"class":693}," =",[683,1398,1340],{"class":730},[683,1400,733],{"class":772},[683,1402,1377],{"class":697},[683,1404,754],{"class":772},[683,1406,1407],{"class":685,"line":804},[683,1408,720],{"emptyLinePlaceholder":719},[683,1410,1411,1414,1416,1418,1420,1422,1425,1427,1429,1432,1434,1437,1439,1442,1444,1446,1449,1451,1453,1455],{"class":685,"line":1050},[683,1412,1413],{"class":697},"  log",[683,1415,616],{"class":693},[683,1417,1062],{"class":730},[683,1419,733],{"class":772},[683,1421,769],{"class":693},[683,1423,1424],{"class":772}," user",[683,1426,776],{"class":693},[683,1428,694],{"class":693},[683,1430,1431],{"class":772}," id",[683,1433,776],{"class":693},[683,1435,1436],{"class":1081}," 1",[683,1438,744],{"class":693},[683,1440,1441],{"class":772}," plan",[683,1443,776],{"class":693},[683,1445,707],{"class":693},[683,1447,1448],{"class":710},"pro",[683,1450,736],{"class":693},[683,1452,701],{"class":693},[683,1454,701],{"class":693},[683,1456,754],{"class":772},[683,1458,1459,1461,1463,1465,1467,1469,1472,1474,1476,1479,1481,1484,1486,1489,1491,1494,1496,1498],{"class":685,"line":1055},[683,1460,1413],{"class":697},[683,1462,616],{"class":693},[683,1464,1062],{"class":730},[683,1466,733],{"class":772},[683,1468,769],{"class":693},[683,1470,1471],{"class":772}," cart",[683,1473,776],{"class":693},[683,1475,694],{"class":693},[683,1477,1478],{"class":772}," items",[683,1480,776],{"class":693},[683,1482,1483],{"class":1081}," 3",[683,1485,744],{"class":693},[683,1487,1488],{"class":772}," total",[683,1490,776],{"class":693},[683,1492,1493],{"class":1081}," 9999",[683,1495,701],{"class":693},[683,1497,701],{"class":693},[683,1499,754],{"class":772},[683,1501,1502],{"class":685,"line":1091},[683,1503,720],{"emptyLinePlaceholder":719},[683,1505,1506,1508,1511,1513,1516,1519],{"class":685,"line":1123},[683,1507,1391],{"class":1004},[683,1509,1510],{"class":697}," order",[683,1512,1396],{"class":693},[683,1514,1515],{"class":689}," await",[683,1517,1518],{"class":730}," processCheckout",[683,1520,1133],{"class":772},[683,1522,1524,1526,1528,1530,1532,1534,1537,1539,1541,1543,1545,1547],{"class":685,"line":1523},10,[683,1525,1413],{"class":697},[683,1527,616],{"class":693},[683,1529,1062],{"class":730},[683,1531,733],{"class":772},[683,1533,769],{"class":693},[683,1535,1536],{"class":772}," orderId",[683,1538,776],{"class":693},[683,1540,1510],{"class":697},[683,1542,616],{"class":693},[683,1544,1029],{"class":697},[683,1546,701],{"class":693},[683,1548,754],{"class":772},[683,1550,1552],{"class":685,"line":1551},11,[683,1553,720],{"emptyLinePlaceholder":719},[683,1555,1557,1560,1562,1565,1567,1571,1573,1575,1577,1579,1581,1583],{"class":685,"line":1556},12,[683,1558,1559],{"class":689},"  return",[683,1561,694],{"class":693},[683,1563,1564],{"class":772}," success",[683,1566,776],{"class":693},[683,1568,1570],{"class":1569},"sfNiH"," true",[683,1572,744],{"class":693},[683,1574,1536],{"class":772},[683,1576,776],{"class":693},[683,1578,1510],{"class":697},[683,1580,616],{"class":693},[683,1582,1029],{"class":697},[683,1584,1585],{"class":693}," }\n",[683,1587,1589,1592],{"class":685,"line":1588},13,[683,1590,1591],{"class":693},"}",[683,1593,754],{"class":697},[673,1595,1597],{"className":834,"code":1596,"filename":1137,"language":837,"meta":679,"style":679},"10:23:45.612 INFO [my-app] POST \u002Fapi\u002Fcheckout 200 in 234ms\n  ├─ user: id=1 plan=pro\n  ├─ cart: items=3 total=9999\n  └─ orderId: ord_abc123\n",[587,1598,1599,1608,1624,1643],{"__ignoreMap":679},[683,1600,1601,1603,1605],{"class":685,"line":686},[683,1602,845],{"class":844},[683,1604,1146],{"class":710},[683,1606,1607],{"class":697}," [my-app] POST \u002Fapi\u002Fcheckout 200 in 234ms\n",[683,1609,1610,1612,1615,1618,1621],{"class":685,"line":716},[683,1611,1154],{"class":844},[683,1613,1614],{"class":710}," user:",[683,1616,1617],{"class":710}," id=",[683,1619,1620],{"class":1081},"1",[683,1622,1623],{"class":710}," plan=pro\n",[683,1625,1626,1628,1631,1634,1637,1640],{"class":685,"line":723},[683,1627,1154],{"class":844},[683,1629,1630],{"class":710}," cart:",[683,1632,1633],{"class":710}," items=",[683,1635,1636],{"class":1081},"3",[683,1638,1639],{"class":710}," total=",[683,1641,1642],{"class":1081},"9999\n",[683,1644,1645,1647,1650],{"class":685,"line":757},[683,1646,1175],{"class":844},[683,1648,1649],{"class":710}," orderId:",[683,1651,1652],{"class":710}," ord_abc123\n",[577,1654,1657,1659,1660,616],{"color":1655,"icon":1656},"success","i-lucide-check",[587,1658,589],{}," doesn't create a logger, the framework middleware already did that. It just retrieves it from the event context so you can add data with ",[587,1661,1662],{},"set()",[1664,1665,1667],"h3",{"id":1666},"when-to-use-what","When to use what",[1669,1670,1671,1694],"table",{},[1672,1673,1674],"thead",{},[1675,1676,1677,1683,1690],"tr",{},[1678,1679,1680,1681],"th",{},"Use ",[587,1682,593],{},[1678,1684,1680,1685,1687,1688],{},[587,1686,1195],{}," \u002F ",[587,1689,1215],{},[1678,1691,1680,1692],{},[587,1693,1322],{},[1695,1696,1697,1709,1720],"tbody",{},[1675,1698,1699,1703,1706],{},[1700,1701,1702],"td",{},"Quick one-off events",[1700,1704,1705],{},"Scripts, jobs, workers, queues, HTTP without a framework",[1700,1707,1708],{},"API routes with a framework integration",[1675,1710,1711,1714,1717],{},[1700,1712,1713],{},"No context accumulation needed",[1700,1715,1716],{},"Accumulate context over an operation",[1700,1718,1719],{},"Retrieve the request-scoped logger",[1675,1721,1722,1725,1728],{},[1700,1723,1724],{},"Client-side logging",[1700,1726,1727],{},"Wide events (one log per operation)",[1700,1729,1730],{},"Access the auto-managed wide event",[1664,1732,1734],{"id":1733},"service-identification","Service Identification",[573,1736,1737],{},"In multi-service architectures, differentiate which service a log belongs to using either route-based configuration or explicit service names.",[1739,1740,1742],"h4",{"id":1741},"route-based-configuration","Route-Based Configuration",[573,1744,1745,1746,776],{},"Configure service names per route pattern in your ",[587,1747,1748],{},"nuxt.config.ts",[673,1750,1752],{"className":675,"code":1751,"filename":1748,"language":678,"meta":679,"style":679},"export default defineNuxtConfig({\n  modules: ['evlog\u002Fnuxt'],\n\n  evlog: {\n    env: {\n      service: 'default-service',\n    },\n    routes: {\n      '\u002Fapi\u002Fauth\u002F**': { service: 'auth-service' },\n      '\u002Fapi\u002Fpayment\u002F**': { service: 'payment-service' },\n      '\u002Fapi\u002Fbooking\u002F**': { service: 'booking-service' },\n    },\n  },\n})\n",[587,1753,1754,1768,1791,1795,1804,1813,1829,1834,1843,1871,1897,1923,1927,1932],{"__ignoreMap":679},[683,1755,1756,1758,1760,1763,1765],{"class":685,"line":686},[683,1757,1359],{"class":689},[683,1759,1362],{"class":689},[683,1761,1762],{"class":730}," defineNuxtConfig",[683,1764,733],{"class":697},[683,1766,1767],{"class":693},"{\n",[683,1769,1770,1773,1775,1778,1780,1783,1785,1788],{"class":685,"line":716},[683,1771,1772],{"class":772},"  modules",[683,1774,776],{"class":693},[683,1776,1777],{"class":697}," [",[683,1779,736],{"class":693},[683,1781,1782],{"class":710},"evlog\u002Fnuxt",[683,1784,736],{"class":693},[683,1786,1787],{"class":697},"]",[683,1789,1790],{"class":693},",\n",[683,1792,1793],{"class":685,"line":723},[683,1794,720],{"emptyLinePlaceholder":719},[683,1796,1797,1800,1802],{"class":685,"line":757},[683,1798,1799],{"class":772},"  evlog",[683,1801,776],{"class":693},[683,1803,1386],{"class":693},[683,1805,1806,1809,1811],{"class":685,"line":804},[683,1807,1808],{"class":772},"    env",[683,1810,776],{"class":693},[683,1812,1386],{"class":693},[683,1814,1815,1818,1820,1822,1825,1827],{"class":685,"line":1050},[683,1816,1817],{"class":772},"      service",[683,1819,776],{"class":693},[683,1821,707],{"class":693},[683,1823,1824],{"class":710},"default-service",[683,1826,736],{"class":693},[683,1828,1790],{"class":693},[683,1830,1831],{"class":685,"line":1055},[683,1832,1833],{"class":693},"    },\n",[683,1835,1836,1839,1841],{"class":685,"line":1091},[683,1837,1838],{"class":772},"    routes",[683,1840,776],{"class":693},[683,1842,1386],{"class":693},[683,1844,1845,1848,1851,1853,1855,1857,1859,1861,1863,1866,1868],{"class":685,"line":1123},[683,1846,1847],{"class":693},"      '",[683,1849,1850],{"class":772},"\u002Fapi\u002Fauth\u002F**",[683,1852,736],{"class":693},[683,1854,776],{"class":693},[683,1856,694],{"class":693},[683,1858,980],{"class":772},[683,1860,776],{"class":693},[683,1862,707],{"class":693},[683,1864,1865],{"class":710},"auth-service",[683,1867,736],{"class":693},[683,1869,1870],{"class":693}," },\n",[683,1872,1873,1875,1878,1880,1882,1884,1886,1888,1890,1893,1895],{"class":685,"line":1523},[683,1874,1847],{"class":693},[683,1876,1877],{"class":772},"\u002Fapi\u002Fpayment\u002F**",[683,1879,736],{"class":693},[683,1881,776],{"class":693},[683,1883,694],{"class":693},[683,1885,980],{"class":772},[683,1887,776],{"class":693},[683,1889,707],{"class":693},[683,1891,1892],{"class":710},"payment-service",[683,1894,736],{"class":693},[683,1896,1870],{"class":693},[683,1898,1899,1901,1904,1906,1908,1910,1912,1914,1916,1919,1921],{"class":685,"line":1551},[683,1900,1847],{"class":693},[683,1902,1903],{"class":772},"\u002Fapi\u002Fbooking\u002F**",[683,1905,736],{"class":693},[683,1907,776],{"class":693},[683,1909,694],{"class":693},[683,1911,980],{"class":772},[683,1913,776],{"class":693},[683,1915,707],{"class":693},[683,1917,1918],{"class":710},"booking-service",[683,1920,736],{"class":693},[683,1922,1870],{"class":693},[683,1924,1925],{"class":685,"line":1556},[683,1926,1833],{"class":693},[683,1928,1929],{"class":685,"line":1588},[683,1930,1931],{"class":693},"  },\n",[683,1933,1935,1937],{"class":685,"line":1934},14,[683,1936,1591],{"class":693},[683,1938,754],{"class":697},[573,1940,1941],{},"Logs from routes matching these patterns will automatically include the configured service name:",[673,1943,1945],{"className":834,"code":1944,"filename":836,"language":837,"meta":679,"style":679},"21:57:10.442 INFO [auth-service] POST \u002Fapi\u002Fauth\u002Flogin 200 in 1ms\n  ├─ requestId: 88ced16a-bef2-4483-86cb-2b4fb677ea52\n  ├─ user: id=user_123 email=demo@example.com\n  └─ action: login\n",[587,1946,1947,1957,1967,1979],{"__ignoreMap":679},[683,1948,1949,1952,1954],{"class":685,"line":686},[683,1950,1951],{"class":844},"21:57:10.442",[683,1953,1146],{"class":710},[683,1955,1956],{"class":697}," [auth-service] POST \u002Fapi\u002Fauth\u002Flogin 200 in 1ms\n",[683,1958,1959,1961,1964],{"class":685,"line":716},[683,1960,1154],{"class":844},[683,1962,1963],{"class":710}," requestId:",[683,1965,1966],{"class":710}," 88ced16a-bef2-4483-86cb-2b4fb677ea52\n",[683,1968,1969,1971,1973,1976],{"class":685,"line":723},[683,1970,1154],{"class":844},[683,1972,1614],{"class":710},[683,1974,1975],{"class":710}," id=user_123",[683,1977,1978],{"class":710}," email=demo@example.com\n",[683,1980,1981,1983,1986],{"class":685,"line":757},[683,1982,1175],{"class":844},[683,1984,1985],{"class":710}," action:",[683,1987,1988],{"class":710}," login\n",[1739,1990,1992],{"id":1991},"explicit-service-parameter","Explicit Service Parameter",[573,1994,1995,1996,776],{},"Override the service name for specific routes using the second parameter of ",[587,1997,589],{},[673,1999,2002],{"className":675,"code":2000,"filename":2001,"language":678,"meta":679,"style":679},"import { useLogger } from 'evlog'\n\nexport default defineEventHandler((event) => {\n  const log = useLogger(event, 'legacy-service')\n\n  log.set({ action: 'process_legacy_request' })\n\n  return { success: true }\n})\n","server\u002Fapi\u002Flegacy\u002Fprocess.post.ts",[587,2003,2004,2022,2026,2046,2071,2075,2102,2106,2120],{"__ignoreMap":679},[683,2005,2006,2008,2010,2012,2014,2016,2018,2020],{"class":685,"line":686},[683,2007,690],{"class":689},[683,2009,694],{"class":693},[683,2011,1340],{"class":697},[683,2013,701],{"class":693},[683,2015,704],{"class":689},[683,2017,707],{"class":693},[683,2019,605],{"class":710},[683,2021,713],{"class":693},[683,2023,2024],{"class":685,"line":716},[683,2025,720],{"emptyLinePlaceholder":719},[683,2027,2028,2030,2032,2034,2036,2038,2040,2042,2044],{"class":685,"line":723},[683,2029,1359],{"class":689},[683,2031,1362],{"class":689},[683,2033,1365],{"class":730},[683,2035,733],{"class":697},[683,2037,733],{"class":693},[683,2039,1377],{"class":1376},[683,2041,1380],{"class":693},[683,2043,1383],{"class":1004},[683,2045,1386],{"class":693},[683,2047,2048,2050,2052,2054,2056,2058,2060,2062,2064,2067,2069],{"class":685,"line":757},[683,2049,1391],{"class":1004},[683,2051,698],{"class":697},[683,2053,1396],{"class":693},[683,2055,1340],{"class":730},[683,2057,733],{"class":772},[683,2059,1377],{"class":697},[683,2061,744],{"class":693},[683,2063,707],{"class":693},[683,2065,2066],{"class":710},"legacy-service",[683,2068,736],{"class":693},[683,2070,754],{"class":772},[683,2072,2073],{"class":685,"line":804},[683,2074,720],{"emptyLinePlaceholder":719},[683,2076,2077,2079,2081,2083,2085,2087,2089,2091,2093,2096,2098,2100],{"class":685,"line":1050},[683,2078,1413],{"class":697},[683,2080,616],{"class":693},[683,2082,1062],{"class":730},[683,2084,733],{"class":772},[683,2086,769],{"class":693},[683,2088,773],{"class":772},[683,2090,776],{"class":693},[683,2092,707],{"class":693},[683,2094,2095],{"class":710},"process_legacy_request",[683,2097,736],{"class":693},[683,2099,701],{"class":693},[683,2101,754],{"class":772},[683,2103,2104],{"class":685,"line":1055},[683,2105,720],{"emptyLinePlaceholder":719},[683,2107,2108,2110,2112,2114,2116,2118],{"class":685,"line":1091},[683,2109,1559],{"class":689},[683,2111,694],{"class":693},[683,2113,1564],{"class":772},[683,2115,776],{"class":693},[683,2117,1570],{"class":1569},[683,2119,1585],{"class":693},[683,2121,2122,2124],{"class":685,"line":1123},[683,2123,1591],{"class":693},[683,2125,754],{"class":697},[577,2127,2128,2131,2132,2134,2135,2138],{"color":579,"icon":13},[582,2129,2130],{},"Priority order:"," Explicit ",[587,2133,589],{}," parameter > Route configuration > ",[587,2136,2137],{},"env.service"," > Auto-detected from environment",[662,2140,2142],{"id":2141},"createerror-structured-errors","createError (Structured Errors)",[573,2144,1680,2145,2148],{},[587,2146,2147],{},"createError()"," to throw errors with actionable context:",[670,2150,2151,2272],{},[673,2152,2154],{"className":675,"code":2153,"filename":1329,"language":678,"meta":679,"style":679},"import { createError } from 'evlog'\n\nthrow createError({\n  message: 'Payment failed',\n  status: 402,\n  why: 'Card declined by issuer',\n  fix: 'Try a different payment method',\n  link: 'https:\u002F\u002Fdocs.example.com\u002Fpayments\u002Fdeclined',\n})\n",[587,2155,2156,2175,2179,2190,2206,2218,2234,2250,2266],{"__ignoreMap":679},[683,2157,2158,2160,2162,2165,2167,2169,2171,2173],{"class":685,"line":686},[683,2159,690],{"class":689},[683,2161,694],{"class":693},[683,2163,2164],{"class":697}," createError",[683,2166,701],{"class":693},[683,2168,704],{"class":689},[683,2170,707],{"class":693},[683,2172,605],{"class":710},[683,2174,713],{"class":693},[683,2176,2177],{"class":685,"line":716},[683,2178,720],{"emptyLinePlaceholder":719},[683,2180,2181,2184,2186,2188],{"class":685,"line":723},[683,2182,2183],{"class":689},"throw",[683,2185,2164],{"class":730},[683,2187,733],{"class":697},[683,2189,1767],{"class":693},[683,2191,2192,2195,2197,2199,2202,2204],{"class":685,"line":757},[683,2193,2194],{"class":772},"  message",[683,2196,776],{"class":693},[683,2198,707],{"class":693},[683,2200,2201],{"class":710},"Payment failed",[683,2203,736],{"class":693},[683,2205,1790],{"class":693},[683,2207,2208,2211,2213,2216],{"class":685,"line":804},[683,2209,2210],{"class":772},"  status",[683,2212,776],{"class":693},[683,2214,2215],{"class":1081}," 402",[683,2217,1790],{"class":693},[683,2219,2220,2223,2225,2227,2230,2232],{"class":685,"line":1050},[683,2221,2222],{"class":772},"  why",[683,2224,776],{"class":693},[683,2226,707],{"class":693},[683,2228,2229],{"class":710},"Card declined by issuer",[683,2231,736],{"class":693},[683,2233,1790],{"class":693},[683,2235,2236,2239,2241,2243,2246,2248],{"class":685,"line":1055},[683,2237,2238],{"class":772},"  fix",[683,2240,776],{"class":693},[683,2242,707],{"class":693},[683,2244,2245],{"class":710},"Try a different payment method",[683,2247,736],{"class":693},[683,2249,1790],{"class":693},[683,2251,2252,2255,2257,2259,2262,2264],{"class":685,"line":1091},[683,2253,2254],{"class":772},"  link",[683,2256,776],{"class":693},[683,2258,707],{"class":693},[683,2260,2261],{"class":710},"https:\u002F\u002Fdocs.example.com\u002Fpayments\u002Fdeclined",[683,2263,736],{"class":693},[683,2265,1790],{"class":693},[683,2267,2268,2270],{"class":685,"line":1123},[683,2269,1591],{"class":693},[683,2271,754],{"class":697},[673,2273,2278],{"className":2274,"code":2275,"filename":2276,"language":2277,"meta":679,"style":679},"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\",\n    \"fix\": \"Try a different payment method\",\n    \"link\": \"https:\u002F\u002Fdocs.example.com\u002Fpayments\u002Fdeclined\"\n  }\n}\n","Response","json",[587,2279,2280,2284,2301,2321,2334,2353,2371,2388,2393],{"__ignoreMap":679},[683,2281,2282],{"class":685,"line":686},[683,2283,1767],{"class":693},[683,2285,2286,2289,2292,2295,2297,2299],{"class":685,"line":716},[683,2287,2288],{"class":693},"  \"",[683,2290,2291],{"class":1004},"statusCode",[683,2293,2294],{"class":693},"\"",[683,2296,776],{"class":693},[683,2298,2215],{"class":1081},[683,2300,1790],{"class":693},[683,2302,2303,2305,2308,2310,2312,2315,2317,2319],{"class":685,"line":723},[683,2304,2288],{"class":693},[683,2306,2307],{"class":1004},"message",[683,2309,2294],{"class":693},[683,2311,776],{"class":693},[683,2313,2314],{"class":693}," \"",[683,2316,2201],{"class":710},[683,2318,2294],{"class":693},[683,2320,1790],{"class":693},[683,2322,2323,2325,2328,2330,2332],{"class":685,"line":757},[683,2324,2288],{"class":693},[683,2326,2327],{"class":1004},"data",[683,2329,2294],{"class":693},[683,2331,776],{"class":693},[683,2333,1386],{"class":693},[683,2335,2336,2339,2341,2343,2345,2347,2349,2351],{"class":685,"line":804},[683,2337,2338],{"class":693},"    \"",[683,2340,609],{"class":844},[683,2342,2294],{"class":693},[683,2344,776],{"class":693},[683,2346,2314],{"class":693},[683,2348,2229],{"class":710},[683,2350,2294],{"class":693},[683,2352,1790],{"class":693},[683,2354,2355,2357,2359,2361,2363,2365,2367,2369],{"class":685,"line":1050},[683,2356,2338],{"class":693},[683,2358,612],{"class":844},[683,2360,2294],{"class":693},[683,2362,776],{"class":693},[683,2364,2314],{"class":693},[683,2366,2245],{"class":710},[683,2368,2294],{"class":693},[683,2370,1790],{"class":693},[683,2372,2373,2375,2377,2379,2381,2383,2385],{"class":685,"line":1055},[683,2374,2338],{"class":693},[683,2376,615],{"class":844},[683,2378,2294],{"class":693},[683,2380,776],{"class":693},[683,2382,2314],{"class":693},[683,2384,2261],{"class":710},[683,2386,2387],{"class":693},"\"\n",[683,2389,2390],{"class":685,"line":1091},[683,2391,2392],{"class":693},"  }\n",[683,2394,2395],{"class":685,"line":1123},[683,2396,2397],{"class":693},"}\n",[1664,2399,2401],{"id":2400},"error-fields","Error Fields",[1669,2403,2404,2417],{},[1672,2405,2406],{},[1675,2407,2408,2411,2414],{},[1678,2409,2410],{},"Field",[1678,2412,2413],{},"Required",[1678,2415,2416],{},"Description",[1695,2418,2419,2431,2444,2455,2466,2477,2489],{},[1675,2420,2421,2425,2428],{},[1700,2422,2423],{},[587,2424,2307],{},[1700,2426,2427],{},"Yes",[1700,2429,2430],{},"What happened (user-facing)",[1675,2432,2433,2438,2441],{},[1700,2434,2435],{},[587,2436,2437],{},"status",[1700,2439,2440],{},"No",[1700,2442,2443],{},"HTTP status code (default: 500)",[1675,2445,2446,2450,2452],{},[1700,2447,2448],{},[587,2449,609],{},[1700,2451,2440],{},[1700,2453,2454],{},"Technical reason (for debugging)",[1675,2456,2457,2461,2463],{},[1700,2458,2459],{},[587,2460,612],{},[1700,2462,2440],{},[1700,2464,2465],{},"Actionable solution",[1675,2467,2468,2472,2474],{},[1700,2469,2470],{},[587,2471,615],{},[1700,2473,2440],{},[1700,2475,2476],{},"Documentation URL for more info",[1675,2478,2479,2484,2486],{},[1700,2480,2481],{},[587,2482,2483],{},"cause",[1700,2485,2440],{},[1700,2487,2488],{},"Original error (if wrapping)",[1675,2490,2491,2496,2498],{},[1700,2492,2493],{},[587,2494,2495],{},"internal",[1700,2497,2440],{},[1700,2499,2500,2501],{},"Backend-only fields for logs and wide events — never included in HTTP JSON or ",[587,2502,2503],{},"parseError()",[1664,2505,2507],{"id":2506},"frontend-integration","Frontend Integration",[573,2509,1680,2510,2512],{},[587,2511,2503],{}," to extract all error fields on the client:",[673,2514,2517],{"className":675,"code":2515,"filename":2516,"language":678,"meta":679,"style":679},"import { parseError } from 'evlog'\n\nexport async function checkout(cart: Cart) {\n  try {\n    await $fetch('\u002Fapi\u002Fcheckout', { method: 'POST', body: cart })\n  } catch (err) {\n    const error = parseError(err)\n\n    toast.add({\n      title: error.message,\n      description: error.why,\n      color: 'error',\n      actions: error.link\n        ? [{ label: 'Learn more', onClick: () => window.open(error.link) }]\n        : undefined,\n    })\n\n    if (error.fix) {\n      console.info(`Fix: ${error.fix}`)\n    }\n  }\n}\n","composables\u002FuseCheckout.ts",[587,2518,2519,2538,2542,2569,2576,2619,2637,2654,2658,2672,2687,2702,2717,2731,2787,2796,2804,2809,2827,2859,2865,2870],{"__ignoreMap":679},[683,2520,2521,2523,2525,2528,2530,2532,2534,2536],{"class":685,"line":686},[683,2522,690],{"class":689},[683,2524,694],{"class":693},[683,2526,2527],{"class":697}," parseError",[683,2529,701],{"class":693},[683,2531,704],{"class":689},[683,2533,707],{"class":693},[683,2535,605],{"class":710},[683,2537,713],{"class":693},[683,2539,2540],{"class":685,"line":716},[683,2541,720],{"emptyLinePlaceholder":719},[683,2543,2544,2546,2549,2552,2555,2557,2560,2562,2565,2567],{"class":685,"line":723},[683,2545,1359],{"class":689},[683,2547,2548],{"class":1004}," async",[683,2550,2551],{"class":1004}," function",[683,2553,2554],{"class":730}," checkout",[683,2556,733],{"class":693},[683,2558,2559],{"class":1376},"cart",[683,2561,776],{"class":693},[683,2563,2564],{"class":844}," Cart",[683,2566,1380],{"class":693},[683,2568,1386],{"class":693},[683,2570,2571,2574],{"class":685,"line":757},[683,2572,2573],{"class":689},"  try",[683,2575,1386],{"class":693},[683,2577,2578,2581,2584,2586,2588,2590,2592,2594,2596,2598,2600,2602,2604,2606,2608,2611,2613,2615,2617],{"class":685,"line":804},[683,2579,2580],{"class":689},"    await",[683,2582,2583],{"class":730}," $fetch",[683,2585,733],{"class":772},[683,2587,736],{"class":693},[683,2589,1292],{"class":710},[683,2591,736],{"class":693},[683,2593,744],{"class":693},[683,2595,694],{"class":693},[683,2597,1271],{"class":772},[683,2599,776],{"class":693},[683,2601,707],{"class":693},[683,2603,1278],{"class":710},[683,2605,736],{"class":693},[683,2607,744],{"class":693},[683,2609,2610],{"class":772}," body",[683,2612,776],{"class":693},[683,2614,1471],{"class":697},[683,2616,701],{"class":693},[683,2618,754],{"class":772},[683,2620,2621,2624,2627,2629,2632,2635],{"class":685,"line":1050},[683,2622,2623],{"class":693},"  }",[683,2625,2626],{"class":689}," catch",[683,2628,1373],{"class":772},[683,2630,2631],{"class":697},"err",[683,2633,2634],{"class":772},") ",[683,2636,1767],{"class":693},[683,2638,2639,2642,2644,2646,2648,2650,2652],{"class":685,"line":1055},[683,2640,2641],{"class":1004},"    const",[683,2643,788],{"class":697},[683,2645,1396],{"class":693},[683,2647,2527],{"class":730},[683,2649,733],{"class":772},[683,2651,2631],{"class":697},[683,2653,754],{"class":772},[683,2655,2656],{"class":685,"line":1091},[683,2657,720],{"emptyLinePlaceholder":719},[683,2659,2660,2663,2665,2668,2670],{"class":685,"line":1123},[683,2661,2662],{"class":697},"    toast",[683,2664,616],{"class":693},[683,2666,2667],{"class":730},"add",[683,2669,733],{"class":772},[683,2671,1767],{"class":693},[683,2673,2674,2677,2679,2681,2683,2685],{"class":685,"line":1523},[683,2675,2676],{"class":772},"      title",[683,2678,776],{"class":693},[683,2680,788],{"class":697},[683,2682,616],{"class":693},[683,2684,2307],{"class":697},[683,2686,1790],{"class":693},[683,2688,2689,2692,2694,2696,2698,2700],{"class":685,"line":1551},[683,2690,2691],{"class":772},"      description",[683,2693,776],{"class":693},[683,2695,788],{"class":697},[683,2697,616],{"class":693},[683,2699,609],{"class":697},[683,2701,1790],{"class":693},[683,2703,2704,2707,2709,2711,2713,2715],{"class":685,"line":1556},[683,2705,2706],{"class":772},"      color",[683,2708,776],{"class":693},[683,2710,707],{"class":693},[683,2712,764],{"class":710},[683,2714,736],{"class":693},[683,2716,1790],{"class":693},[683,2718,2719,2722,2724,2726,2728],{"class":685,"line":1588},[683,2720,2721],{"class":772},"      actions",[683,2723,776],{"class":693},[683,2725,788],{"class":697},[683,2727,616],{"class":693},[683,2729,2730],{"class":697},"link\n",[683,2732,2733,2736,2738,2740,2743,2745,2747,2750,2752,2754,2757,2759,2762,2764,2767,2769,2772,2774,2776,2778,2780,2782,2784],{"class":685,"line":1934},[683,2734,2735],{"class":693},"        ?",[683,2737,1777],{"class":772},[683,2739,769],{"class":693},[683,2741,2742],{"class":772}," label",[683,2744,776],{"class":693},[683,2746,707],{"class":693},[683,2748,2749],{"class":710},"Learn more",[683,2751,736],{"class":693},[683,2753,744],{"class":693},[683,2755,2756],{"class":730}," onClick",[683,2758,776],{"class":693},[683,2760,2761],{"class":693}," ()",[683,2763,1383],{"class":1004},[683,2765,2766],{"class":697}," window",[683,2768,616],{"class":693},[683,2770,2771],{"class":730},"open",[683,2773,733],{"class":772},[683,2775,764],{"class":697},[683,2777,616],{"class":693},[683,2779,615],{"class":697},[683,2781,2634],{"class":772},[683,2783,1591],{"class":693},[683,2785,2786],{"class":772},"]\n",[683,2788,2790,2793],{"class":685,"line":2789},15,[683,2791,2792],{"class":693},"        :",[683,2794,2795],{"class":693}," undefined,\n",[683,2797,2799,2802],{"class":685,"line":2798},16,[683,2800,2801],{"class":693},"    }",[683,2803,754],{"class":772},[683,2805,2807],{"class":685,"line":2806},17,[683,2808,720],{"emptyLinePlaceholder":719},[683,2810,2812,2815,2817,2819,2821,2823,2825],{"class":685,"line":2811},18,[683,2813,2814],{"class":689},"    if",[683,2816,1373],{"class":772},[683,2818,764],{"class":697},[683,2820,616],{"class":693},[683,2822,612],{"class":697},[683,2824,2634],{"class":772},[683,2826,1767],{"class":693},[683,2828,2830,2833,2835,2837,2839,2842,2845,2848,2850,2852,2854,2857],{"class":685,"line":2829},19,[683,2831,2832],{"class":697},"      console",[683,2834,616],{"class":693},[683,2836,579],{"class":730},[683,2838,733],{"class":772},[683,2840,2841],{"class":693},"`",[683,2843,2844],{"class":710},"Fix: ",[683,2846,2847],{"class":693},"${",[683,2849,764],{"class":697},[683,2851,616],{"class":693},[683,2853,612],{"class":697},[683,2855,2856],{"class":693},"}`",[683,2858,754],{"class":772},[683,2860,2862],{"class":685,"line":2861},20,[683,2863,2864],{"class":693},"    }\n",[683,2866,2868],{"class":685,"line":2867},21,[683,2869,2392],{"class":693},[683,2871,2873],{"class":685,"line":2872},22,[683,2874,2397],{"class":693},[662,2876,2878],{"id":2877},"log-client-side","log (Client-Side)",[573,2880,2881,2882,2884],{},"The same ",[587,2883,593],{}," API works on the client side, outputting to the browser console:",[670,2886,2887,3115],{},[673,2888,2893],{"className":2889,"code":2890,"filename":2891,"language":2892,"meta":679,"style":679},"language-vue shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u003Cscript setup lang=\"ts\">\nasync function handleCheckout() {\n  log.info('checkout', 'User initiated checkout')\n\n  try {\n    await $fetch('\u002Fapi\u002Fcheckout', { method: 'POST' })\n    log.info({ action: 'checkout', status: 'success' })\n  } catch (err) {\n    log.error({ action: 'checkout', error: 'failed' })\n  }\n}\n\u003C\u002Fscript>\n","components\u002FCheckoutButton.vue","vue",[587,2894,2895,2921,2935,2963,2967,2973,3005,3045,3059,3098,3102,3106],{"__ignoreMap":679},[683,2896,2897,2900,2903,2906,2909,2911,2913,2916,2918],{"class":685,"line":686},[683,2898,2899],{"class":693},"\u003C",[683,2901,2902],{"class":772},"script",[683,2904,2905],{"class":1004}," setup",[683,2907,2908],{"class":1004}," lang",[683,2910,862],{"class":693},[683,2912,2294],{"class":693},[683,2914,2915],{"class":710},"ts",[683,2917,2294],{"class":693},[683,2919,2920],{"class":693},">\n",[683,2922,2923,2925,2927,2930,2933],{"class":685,"line":716},[683,2924,1370],{"class":1004},[683,2926,2551],{"class":1004},[683,2928,2929],{"class":730}," handleCheckout",[683,2931,2932],{"class":693},"()",[683,2934,1386],{"class":693},[683,2936,2937,2939,2941,2943,2945,2947,2950,2952,2954,2956,2959,2961],{"class":685,"line":723},[683,2938,1413],{"class":697},[683,2940,616],{"class":693},[683,2942,579],{"class":730},[683,2944,733],{"class":772},[683,2946,736],{"class":693},[683,2948,2949],{"class":710},"checkout",[683,2951,736],{"class":693},[683,2953,744],{"class":693},[683,2955,707],{"class":693},[683,2957,2958],{"class":710},"User initiated checkout",[683,2960,736],{"class":693},[683,2962,754],{"class":772},[683,2964,2965],{"class":685,"line":757},[683,2966,720],{"emptyLinePlaceholder":719},[683,2968,2969,2971],{"class":685,"line":804},[683,2970,2573],{"class":689},[683,2972,1386],{"class":693},[683,2974,2975,2977,2979,2981,2983,2985,2987,2989,2991,2993,2995,2997,2999,3001,3003],{"class":685,"line":1050},[683,2976,2580],{"class":689},[683,2978,2583],{"class":730},[683,2980,733],{"class":772},[683,2982,736],{"class":693},[683,2984,1292],{"class":710},[683,2986,736],{"class":693},[683,2988,744],{"class":693},[683,2990,694],{"class":693},[683,2992,1271],{"class":772},[683,2994,776],{"class":693},[683,2996,707],{"class":693},[683,2998,1278],{"class":710},[683,3000,736],{"class":693},[683,3002,701],{"class":693},[683,3004,754],{"class":772},[683,3006,3007,3010,3012,3014,3016,3018,3020,3022,3024,3026,3028,3030,3033,3035,3037,3039,3041,3043],{"class":685,"line":1055},[683,3008,3009],{"class":697},"    log",[683,3011,616],{"class":693},[683,3013,579],{"class":730},[683,3015,733],{"class":772},[683,3017,769],{"class":693},[683,3019,773],{"class":772},[683,3021,776],{"class":693},[683,3023,707],{"class":693},[683,3025,2949],{"class":710},[683,3027,736],{"class":693},[683,3029,744],{"class":693},[683,3031,3032],{"class":772}," status",[683,3034,776],{"class":693},[683,3036,707],{"class":693},[683,3038,1655],{"class":710},[683,3040,736],{"class":693},[683,3042,701],{"class":693},[683,3044,754],{"class":772},[683,3046,3047,3049,3051,3053,3055,3057],{"class":685,"line":1091},[683,3048,2623],{"class":693},[683,3050,2626],{"class":689},[683,3052,1373],{"class":772},[683,3054,2631],{"class":697},[683,3056,2634],{"class":772},[683,3058,1767],{"class":693},[683,3060,3061,3063,3065,3067,3069,3071,3073,3075,3077,3079,3081,3083,3085,3087,3089,3092,3094,3096],{"class":685,"line":1123},[683,3062,3009],{"class":697},[683,3064,616],{"class":693},[683,3066,764],{"class":730},[683,3068,733],{"class":772},[683,3070,769],{"class":693},[683,3072,773],{"class":772},[683,3074,776],{"class":693},[683,3076,707],{"class":693},[683,3078,2949],{"class":710},[683,3080,736],{"class":693},[683,3082,744],{"class":693},[683,3084,788],{"class":772},[683,3086,776],{"class":693},[683,3088,707],{"class":693},[683,3090,3091],{"class":710},"failed",[683,3093,736],{"class":693},[683,3095,701],{"class":693},[683,3097,754],{"class":772},[683,3099,3100],{"class":685,"line":1523},[683,3101,2392],{"class":693},[683,3103,3104],{"class":685,"line":1551},[683,3105,2397],{"class":693},[683,3107,3108,3111,3113],{"class":685,"line":1556},[683,3109,3110],{"class":693},"\u003C\u002F",[683,3112,2902],{"class":772},[683,3114,2920],{"class":693},[673,3116,3119],{"className":675,"code":3117,"filename":3118,"language":678,"meta":679,"style":679},"export function useAnalytics() {\n  function trackEvent(event: string, data?: Record\u003Cstring, unknown>) {\n    log.info('analytics', `Event: ${event}`)\n    if (data) {\n      log.debug({ event, ...data })\n    }\n  }\n\n  return { trackEvent }\n}\n","composables\u002FuseAnalytics.ts",[587,3120,3121,3134,3177,3210,3222,3250,3254,3258,3262,3272],{"__ignoreMap":679},[683,3122,3123,3125,3127,3130,3132],{"class":685,"line":686},[683,3124,1359],{"class":689},[683,3126,2551],{"class":1004},[683,3128,3129],{"class":730}," useAnalytics",[683,3131,2932],{"class":693},[683,3133,1386],{"class":693},[683,3135,3136,3139,3142,3144,3146,3148,3151,3153,3156,3159,3162,3164,3167,3169,3172,3175],{"class":685,"line":716},[683,3137,3138],{"class":1004},"  function",[683,3140,3141],{"class":730}," trackEvent",[683,3143,733],{"class":693},[683,3145,1377],{"class":1376},[683,3147,776],{"class":693},[683,3149,3150],{"class":844}," string",[683,3152,744],{"class":693},[683,3154,3155],{"class":1376}," data",[683,3157,3158],{"class":693},"?:",[683,3160,3161],{"class":844}," Record",[683,3163,2899],{"class":693},[683,3165,3166],{"class":844},"string",[683,3168,744],{"class":693},[683,3170,3171],{"class":844}," unknown",[683,3173,3174],{"class":693},">)",[683,3176,1386],{"class":693},[683,3178,3179,3181,3183,3185,3187,3189,3192,3194,3196,3199,3202,3204,3206,3208],{"class":685,"line":723},[683,3180,3009],{"class":697},[683,3182,616],{"class":693},[683,3184,579],{"class":730},[683,3186,733],{"class":772},[683,3188,736],{"class":693},[683,3190,3191],{"class":710},"analytics",[683,3193,736],{"class":693},[683,3195,744],{"class":693},[683,3197,3198],{"class":693}," `",[683,3200,3201],{"class":710},"Event: ",[683,3203,2847],{"class":693},[683,3205,1377],{"class":697},[683,3207,2856],{"class":693},[683,3209,754],{"class":772},[683,3211,3212,3214,3216,3218,3220],{"class":685,"line":757},[683,3213,2814],{"class":689},[683,3215,1373],{"class":772},[683,3217,2327],{"class":697},[683,3219,2634],{"class":772},[683,3221,1767],{"class":693},[683,3223,3224,3227,3229,3232,3234,3236,3239,3241,3244,3246,3248],{"class":685,"line":804},[683,3225,3226],{"class":697},"      log",[683,3228,616],{"class":693},[683,3230,3231],{"class":730},"debug",[683,3233,733],{"class":772},[683,3235,769],{"class":693},[683,3237,3238],{"class":697}," event",[683,3240,744],{"class":693},[683,3242,3243],{"class":693}," ...",[683,3245,2327],{"class":697},[683,3247,701],{"class":693},[683,3249,754],{"class":772},[683,3251,3252],{"class":685,"line":1050},[683,3253,2864],{"class":693},[683,3255,3256],{"class":685,"line":1055},[683,3257,2392],{"class":693},[683,3259,3260],{"class":685,"line":1091},[683,3261,720],{"emptyLinePlaceholder":719},[683,3263,3264,3266,3268,3270],{"class":685,"line":1123},[683,3265,1559],{"class":689},[683,3267,694],{"class":693},[683,3269,3141],{"class":697},[683,3271,1585],{"class":693},[683,3273,3274],{"class":685,"line":1523},[683,3275,2397],{"class":693},[577,3277,3278,3279,3281],{"color":906,"icon":907},"See ",[651,3280,322],{"href":323}," for drain configuration, identity context, and browser setup.",[662,3283,3285],{"id":3284},"how-much-of-this-do-you-need-on-day-one","How much of this do you need on day one?",[573,3287,3288],{},"Two calls. Everything else on this page is available when you want it, and nothing breaks while you do not.",[573,3290,3291,3294,3295,3298,3299,3302,3303,3305,3306,3308,3309,3311],{},[587,3292,3293],{},"log.info()"," behaves like ",[587,3296,3297],{},"console.log",", so the first commit is a find-and-replace that changes no behaviour. From there, the two that pay for themselves are ",[587,3300,3301],{},"log.set()",", which adds a field to the event already in flight, and ",[587,3304,2147],{},", which attaches a ",[587,3307,609],{}," and a ",[587,3310,612],{}," to a failure instead of a bare stack.",[573,3313,3314,3315,3317,3318,3320,3321,3326],{},"Migrate one handler at a time. A route still calling ",[587,3316,3297],{}," next to a route using ",[587,3319,3301],{}," is a normal intermediate state, not a broken one: they write to the same place and neither knows about the other. Pick the handler you last debugged in production and start there, or let ",[651,3322,3323],{"href":95},[587,3324,3325],{},"evlog map"," rank them for you.",[573,3328,3329],{},"Typed fields, catalogs, sampling and drains are all opt-in, and each one is worth reaching for the day you feel its absence rather than the day you install.",[662,3331,3333],{"id":3332},"next-steps","Next Steps",[626,3335,3336,3346,3352,3357,3362,3367],{},[629,3337,3338,3342,3343,1380],{},[651,3339,3340],{"href":95},[587,3341,3325],{},": See what you just unlocked. Score coverage and find entry points that are still dark (",[587,3344,3345],{},"npx @evlog\u002Fcli map",[629,3347,3348,3351],{},[651,3349,3350],{"href":37},"Logging Overview",": Understand all three logging modes",[629,3353,3354,3356],{},[651,3355,46],{"href":47},": Learn how to design effective wide events",[629,3358,3359,3361],{},[651,3360,71],{"href":72},": Add compile-time type safety to your wide events",[629,3363,3364,3366],{},[651,3365,51],{"href":52},": Master error handling with evlog",[629,3368,3369,3371],{},[651,3370,525],{"href":526},": Security guidelines and production tips",[3373,3374,3375],"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 .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 .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}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}",{"title":679,"searchDepth":716,"depth":716,"links":3377},[3378,3379,3380,3384,3388,3389,3390],{"id":664,"depth":716,"text":665},{"id":914,"depth":716,"text":915},{"id":1315,"depth":716,"text":1316,"children":3381},[3382,3383],{"id":1666,"depth":723,"text":1667},{"id":1733,"depth":723,"text":1734},{"id":2141,"depth":716,"text":2142,"children":3385},[3386,3387],{"id":2400,"depth":723,"text":2401},{"id":2506,"depth":723,"text":2507},{"id":2877,"depth":716,"text":2878},{"id":3284,"depth":716,"text":3285},{"id":3332,"depth":716,"text":3333},"Get up and running with evlog in minutes. Learn the log API, createLogger for wide events, useLogger for requests, and structured errors.","md",[3394,3396],{"label":3350,"icon":39,"to":37,"color":906,"variant":3395},"subtle",{"label":51,"icon":54,"to":52,"color":906,"variant":3395},{},{"icon":28},{"title":25,"description":3391},"tIwBPaVNkqco_t7yNKN70k9CPoleKHQdQYO5LHXTC9s",[3402,3404],{"title":20,"path":21,"stem":22,"description":3403,"icon":23,"children":-1},"Install evlog in your TypeScript project. Supports Nuxt, Next.js, SvelteKit, Hono, Express, Fastify, Elysia, NestJS, and standalone scripts.",{"title":36,"path":37,"stem":38,"description":3405,"icon":39,"children":-1},"The mental model: three logging modes, the wide event lifecycle, sampling, typed fields, and redaction. Read it in order if you are new.",1789000167963]