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