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