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