[{"data":1,"prerenderedAt":1698},["ShallowReactive",2],{"navigation_docs":3,"-learn-overview":443,"-learn-overview-surround":1693},[4,30,80,249,357,412],{"title":5,"path":6,"stem":7,"children":8,"page":29},"Start","\u002Fstart","1.start",[9,14,19,24],{"title":10,"path":11,"stem":12,"icon":13},"Introduction","\u002Fstart\u002Fintroduction","1.start\u002F1.introduction","i-lucide-info",{"title":15,"path":16,"stem":17,"icon":18},"Why start with evlog","\u002Fstart\u002Fwhy-evlog","1.start\u002F2.why-evlog","i-lucide-rocket",{"title":20,"path":21,"stem":22,"icon":23},"Installation","\u002Fstart\u002Finstallation","1.start\u002F3.installation","i-lucide-download",{"title":25,"path":26,"stem":27,"icon":28},"Quick Start","\u002Fstart\u002Fquick-start","1.start\u002F4.quick-start","i-lucide-zap",false,{"title":31,"path":32,"stem":33,"children":34,"page":29},"Learn","\u002Flearn","2.learn",[35,40,45,50,55,60,65,70,75],{"title":36,"path":37,"stem":38,"icon":39},"Overview","\u002Flearn\u002Foverview","2.learn\u002F0.overview","i-lucide-list",{"title":41,"path":42,"stem":43,"icon":44},"Simple Logging","\u002Flearn\u002Fsimple-logging","2.learn\u002F1.simple-logging","i-lucide-terminal",{"title":46,"path":47,"stem":48,"icon":49},"Wide Events","\u002Flearn\u002Fwide-events","2.learn\u002F2.wide-events","i-lucide-layers",{"title":51,"path":52,"stem":53,"icon":54},"Structured Errors","\u002Flearn\u002Fstructured-errors","2.learn\u002F3.structured-errors","i-lucide-shield-alert",{"title":56,"path":57,"stem":58,"icon":59},"Lifecycle","\u002Flearn\u002Flifecycle","2.learn\u002F4.lifecycle","i-lucide-arrow-right-left",{"title":61,"path":62,"stem":63,"icon":64},"Sampling","\u002Flearn\u002Fsampling","2.learn\u002F5.sampling","i-lucide-filter",{"title":66,"path":67,"stem":68,"icon":69},"Auto-Redaction","\u002Flearn\u002Fredaction","2.learn\u002F6.redaction","i-lucide-eye-off",{"title":71,"path":72,"stem":73,"icon":74},"Typed Fields","\u002Flearn\u002Ftyped-fields","2.learn\u002F7.typed-fields","i-simple-icons-typescript",{"title":76,"path":77,"stem":78,"icon":79},"Catalogs","\u002Flearn\u002Fcatalogs","2.learn\u002F8.catalogs","i-lucide-book-open",{"title":81,"path":82,"stem":83,"children":84,"page":29},"Integrate","\u002Fintegrate","3.integrate",[85,89,157],{"title":36,"path":86,"stem":87,"icon":88},"\u002Fintegrate\u002Foverview","3.integrate\u002F0.overview","i-lucide-plug",{"title":90,"path":91,"stem":92,"children":93,"page":29},"Adapters","\u002Fintegrate\u002Fadapters","3.integrate\u002Fadapters",[94,97,137],{"title":36,"path":95,"stem":96,"icon":39},"\u002Fintegrate\u002Fadapters\u002Foverview","3.integrate\u002Fadapters\u002F01.overview",{"title":98,"path":99,"stem":100,"children":101,"page":29},"Cloud","\u002Fintegrate\u002Fadapters\u002Fcloud","3.integrate\u002Fadapters\u002Fcloud",[102,107,112,117,122,127,132],{"title":103,"path":104,"stem":105,"icon":106},"Axiom","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Faxiom","3.integrate\u002Fadapters\u002Fcloud\u002F01.axiom","i-custom-axiom",{"title":108,"path":109,"stem":110,"icon":111},"OTLP","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fotlp","3.integrate\u002Fadapters\u002Fcloud\u002F02.otlp","i-simple-icons-opentelemetry",{"title":113,"path":114,"stem":115,"icon":116},"PostHog","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fposthog","3.integrate\u002Fadapters\u002Fcloud\u002F03.posthog","i-simple-icons-posthog",{"title":118,"path":119,"stem":120,"icon":121},"Sentry","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fsentry","3.integrate\u002Fadapters\u002Fcloud\u002F04.sentry","i-simple-icons-sentry",{"title":123,"path":124,"stem":125,"icon":126},"Better Stack","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fbetter-stack","3.integrate\u002Fadapters\u002Fcloud\u002F05.better-stack","i-simple-icons-betterstack",{"title":128,"path":129,"stem":130,"icon":131},"Datadog","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fdatadog","3.integrate\u002Fadapters\u002Fcloud\u002F06.datadog","i-simple-icons-datadog",{"title":133,"path":134,"stem":135,"icon":136},"HyperDX","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fhyperdx","3.integrate\u002Fadapters\u002Fcloud\u002F07.hyperdx","i-custom-hyperdx",{"title":138,"path":139,"stem":140,"children":141,"page":29},"Self-Hosted","\u002Fintegrate\u002Fadapters\u002Fself-hosted","3.integrate\u002Fadapters\u002Fself-hosted",[142,147,152],{"title":143,"path":144,"stem":145,"icon":146},"File System","\u002Fintegrate\u002Fadapters\u002Fself-hosted\u002Ffs","3.integrate\u002Fadapters\u002Fself-hosted\u002F01.fs","i-lucide-hard-drive",{"title":148,"path":149,"stem":150,"icon":151},"NuxtHub","\u002Fintegrate\u002Fadapters\u002Fself-hosted\u002Fnuxthub","3.integrate\u002Fadapters\u002Fself-hosted\u002F02.nuxthub","i-simple-icons-nuxt",{"title":153,"path":154,"stem":155,"icon":156},"Memory","\u002Fintegrate\u002Fadapters\u002Fself-hosted\u002Fmemory","3.integrate\u002Fadapters\u002Fself-hosted\u002F03.memory","i-lucide-cpu",{"title":158,"path":159,"stem":160,"children":161,"page":29},"Frameworks","\u002Fintegrate\u002Fframeworks","3.integrate\u002Fframeworks",[162,166,171,176,181,186,191,196,201,206,211,216,221,226,230,235,240,245],{"title":36,"path":163,"stem":164,"icon":165},"\u002Fintegrate\u002Fframeworks\u002Foverview","3.integrate\u002Fframeworks\u002F00.overview","i-lucide-layout-grid",{"title":167,"path":168,"stem":169,"icon":170},"Nuxt","\u002Fintegrate\u002Fframeworks\u002Fnuxt","3.integrate\u002Fframeworks\u002F01.nuxt","i-simple-icons-nuxtdotjs",{"title":172,"path":173,"stem":174,"icon":175},"Next.js","\u002Fintegrate\u002Fframeworks\u002Fnextjs","3.integrate\u002Fframeworks\u002F02.nextjs","i-simple-icons-nextdotjs",{"title":177,"path":178,"stem":179,"icon":180},"SvelteKit","\u002Fintegrate\u002Fframeworks\u002Fsveltekit","3.integrate\u002Fframeworks\u002F03.sveltekit","i-simple-icons-svelte",{"title":182,"path":183,"stem":184,"icon":185},"Nitro","\u002Fintegrate\u002Fframeworks\u002Fnitro","3.integrate\u002Fframeworks\u002F04.nitro","i-custom-nitro",{"title":187,"path":188,"stem":189,"icon":190},"TanStack Start","\u002Fintegrate\u002Fframeworks\u002Ftanstack-start","3.integrate\u002Fframeworks\u002F05.tanstack-start","i-custom-tanstack",{"title":192,"path":193,"stem":194,"icon":195},"NestJS","\u002Fintegrate\u002Fframeworks\u002Fnestjs","3.integrate\u002Fframeworks\u002F06.nestjs","i-simple-icons-nestjs",{"title":197,"path":198,"stem":199,"icon":200},"Express","\u002Fintegrate\u002Fframeworks\u002Fexpress","3.integrate\u002Fframeworks\u002F07.express","i-simple-icons-express",{"title":202,"path":203,"stem":204,"icon":205},"Hono","\u002Fintegrate\u002Fframeworks\u002Fhono","3.integrate\u002Fframeworks\u002F08.hono","i-simple-icons-hono",{"title":207,"path":208,"stem":209,"icon":210},"Fastify","\u002Fintegrate\u002Fframeworks\u002Ffastify","3.integrate\u002Fframeworks\u002F09.fastify","i-simple-icons-fastify",{"title":212,"path":213,"stem":214,"icon":215},"Elysia","\u002Fintegrate\u002Fframeworks\u002Felysia","3.integrate\u002Fframeworks\u002F10.elysia","i-custom-elysia",{"title":217,"path":218,"stem":219,"icon":220},"React Router","\u002Fintegrate\u002Fframeworks\u002Freact-router","3.integrate\u002Fframeworks\u002F11.react-router","i-custom-reactrouter",{"title":222,"path":223,"stem":224,"icon":225},"Cloudflare Workers","\u002Fintegrate\u002Fframeworks\u002Fcloudflare-workers","3.integrate\u002Fframeworks\u002F12.cloudflare-workers","i-simple-icons-cloudflare",{"title":227,"path":228,"stem":229,"icon":74},"Standalone","\u002Fintegrate\u002Fframeworks\u002Fstandalone","3.integrate\u002Fframeworks\u002F13.standalone",{"title":231,"path":232,"stem":233,"icon":234},"Astro","\u002Fintegrate\u002Fframeworks\u002Fastro","3.integrate\u002Fframeworks\u002F14.astro","i-simple-icons-astro",{"title":236,"path":237,"stem":238,"icon":239},"oRPC","\u002Fintegrate\u002Fframeworks\u002Forpc","3.integrate\u002Fframeworks\u002F15.orpc","i-lucide-network",{"title":241,"path":242,"stem":243,"icon":244},"AWS Lambda","\u002Fintegrate\u002Fframeworks\u002Faws-lambda","3.integrate\u002Fframeworks\u002F16.aws-lambda","i-custom-lambda",{"title":246,"path":247,"stem":248,"icon":44},"CLI","\u002Fintegrate\u002Fframeworks\u002Fcli","3.integrate\u002Fframeworks\u002F17.cli",{"title":250,"path":251,"stem":252,"children":253,"page":29},"Use Cases","\u002Fuse-cases","4.use-cases",[254,258,263,292,320,352],{"title":36,"path":255,"stem":256,"icon":257},"\u002Fuse-cases\u002Foverview","4.use-cases\u002F0.overview","i-lucide-list-checks",{"title":259,"path":260,"stem":261,"icon":262},"Client Logging","\u002Fuse-cases\u002Fclient-logging","4.use-cases\u002F1.client-logging","i-lucide-monitor",{"title":264,"icon":265,"path":266,"stem":267,"children":268,"page":29},"AI SDK","i-simple-icons-vercel","\u002Fuse-cases\u002Fai-sdk","4.use-cases\u002F2.ai-sdk",[269,272,277,282,287],{"title":36,"path":270,"stem":271,"icon":39},"\u002Fuse-cases\u002Fai-sdk\u002Foverview","4.use-cases\u002F2.ai-sdk\u002F01.overview",{"title":273,"path":274,"stem":275,"icon":276},"Usage","\u002Fuse-cases\u002Fai-sdk\u002Fusage","4.use-cases\u002F2.ai-sdk\u002F02.usage","i-lucide-code",{"title":278,"path":279,"stem":280,"icon":281},"Options","\u002Fuse-cases\u002Fai-sdk\u002Foptions","4.use-cases\u002F2.ai-sdk\u002F03.options","i-lucide-sliders",{"title":283,"path":284,"stem":285,"icon":286},"Metadata","\u002Fuse-cases\u002Fai-sdk\u002Fmetadata","4.use-cases\u002F2.ai-sdk\u002F04.metadata","i-lucide-database",{"title":288,"path":289,"stem":290,"icon":291},"Telemetry","\u002Fuse-cases\u002Fai-sdk\u002Ftelemetry","4.use-cases\u002F2.ai-sdk\u002F05.telemetry","i-lucide-activity",{"title":293,"icon":294,"path":295,"stem":296,"children":297,"page":29},"Better Auth","i-simple-icons-betterauth","\u002Fuse-cases\u002Fbetter-auth","4.use-cases\u002F3.better-auth",[298,301,306,311,315],{"title":36,"path":299,"stem":300,"icon":39},"\u002Fuse-cases\u002Fbetter-auth\u002Foverview","4.use-cases\u002F3.better-auth\u002F01.overview",{"title":302,"path":303,"stem":304,"icon":305},"Identify User","\u002Fuse-cases\u002Fbetter-auth\u002Fidentify-user","4.use-cases\u002F3.better-auth\u002F02.identify-user","i-lucide-user-check",{"title":307,"path":308,"stem":309,"icon":310},"Middleware","\u002Fuse-cases\u002Fbetter-auth\u002Fmiddleware","4.use-cases\u002F3.better-auth\u002F03.middleware","i-lucide-shield",{"title":312,"path":313,"stem":314,"icon":262},"Client Sync","\u002Fuse-cases\u002Fbetter-auth\u002Fclient-sync","4.use-cases\u002F3.better-auth\u002F04.client-sync",{"title":316,"path":317,"stem":318,"icon":319},"Performance","\u002Fuse-cases\u002Fbetter-auth\u002Fperformance","4.use-cases\u002F3.better-auth\u002F05.performance","i-lucide-gauge",{"title":321,"icon":322,"path":323,"stem":324,"children":325,"page":29},"Audit Logs","i-lucide-shield-check","\u002Fuse-cases\u002Faudit","4.use-cases\u002F4.audit",[326,329,334,339,344,348],{"title":36,"path":327,"stem":328,"icon":39},"\u002Fuse-cases\u002Faudit\u002Foverview","4.use-cases\u002F4.audit\u002F01.overview",{"title":330,"path":331,"stem":332,"icon":333},"Schema","\u002Fuse-cases\u002Faudit\u002Fschema","4.use-cases\u002F4.audit\u002F02.schema","i-lucide-file-text",{"title":335,"path":336,"stem":337,"icon":338},"Recording","\u002Fuse-cases\u002Faudit\u002Frecording","4.use-cases\u002F4.audit\u002F03.recording","i-lucide-pen-line",{"title":340,"path":341,"stem":342,"icon":343},"Drains","\u002Fuse-cases\u002Faudit\u002Fpipeline","4.use-cases\u002F4.audit\u002F04.pipeline","i-lucide-link",{"title":345,"path":346,"stem":347,"icon":322},"Compliance","\u002Fuse-cases\u002Faudit\u002Fcompliance","4.use-cases\u002F4.audit\u002F05.compliance",{"title":349,"path":350,"stem":351,"icon":79},"Recipes","\u002Fuse-cases\u002Faudit\u002Frecipes","4.use-cases\u002F4.audit\u002F06.recipes",{"title":353,"path":354,"stem":355,"icon":356},"Enrichers","\u002Fuse-cases\u002Fenrichers","4.use-cases\u002F5.enrichers","i-lucide-sparkles",{"title":358,"path":359,"stem":360,"children":361,"page":29},"Extend","\u002Fextend","5.extend",[362,366,371,376,381,385,389,393,397,402,407],{"title":36,"path":363,"stem":364,"icon":365},"\u002Fextend\u002Foverview","5.extend\u002F0.overview","i-lucide-blocks",{"title":367,"path":368,"stem":369,"icon":370},"Stream","\u002Fextend\u002Fstream","5.extend\u002F1.stream","i-lucide-radio-tower",{"title":372,"path":373,"stem":374,"icon":375},"Custom framework","\u002Fextend\u002Fcustom-framework","5.extend\u002F10.custom-framework","i-lucide-puzzle",{"title":377,"path":378,"stem":379,"icon":380},"FS reader","\u002Fextend\u002Ffs-reader","5.extend\u002F2.fs-reader","i-lucide-folder-search",{"title":349,"path":382,"stem":383,"icon":384},"\u002Fextend\u002Fconsumer-recipes","5.extend\u002F3.consumer-recipes","i-lucide-chef-hat",{"title":386,"path":387,"stem":388,"icon":365},"Plugins","\u002Fextend\u002Fplugins","5.extend\u002F4.plugins",{"title":390,"path":391,"stem":392,"icon":356},"Custom enrichers","\u002Fextend\u002Fcustom-enrichers","5.extend\u002F5.custom-enrichers",{"title":394,"path":395,"stem":396,"icon":64},"Tail sampling","\u002Fextend\u002Ftail-sampling","5.extend\u002F6.tail-sampling",{"title":398,"path":399,"stem":400,"icon":401},"Identity headers","\u002Fextend\u002Fidentity-headers","5.extend\u002F7.identity-headers","i-lucide-fingerprint",{"title":403,"path":404,"stem":405,"icon":406},"Custom drains","\u002Fextend\u002Fcustom-drains","5.extend\u002F8.custom-drains","i-lucide-share-2",{"title":408,"path":409,"stem":410,"icon":411},"Drain pipeline","\u002Fextend\u002Fdrain-pipeline","5.extend\u002F9.drain-pipeline","i-lucide-workflow",{"title":413,"path":414,"stem":415,"children":416,"page":29},"Reference","\u002Freference","6.reference",[417,422,425,430,434,439],{"title":418,"path":419,"stem":420,"icon":421},"Configuration","\u002Freference\u002Fconfiguration","6.reference\u002F1.configuration","i-lucide-settings",{"title":316,"path":423,"stem":424,"icon":319},"\u002Freference\u002Fperformance","6.reference\u002F2.performance",{"title":426,"path":427,"stem":428,"icon":429},"Vite Plugin","\u002Freference\u002Fvite-plugin","6.reference\u002F3.vite-plugin","i-custom-vite",{"title":431,"path":432,"stem":433,"icon":322},"Best Practices","\u002Freference\u002Fbest-practices","6.reference\u002F4.best-practices",{"title":435,"path":436,"stem":437,"icon":438},"vs Other Loggers","\u002Freference\u002Fvs-other-loggers","6.reference\u002F5.vs-other-loggers","i-lucide-scale",{"title":440,"path":441,"stem":442,"icon":356},"Agent Skills","\u002Freference\u002Fagent-skills","6.reference\u002F6.agent-skills",{"id":444,"title":445,"body":446,"description":1682,"extension":1683,"links":1684,"meta":1689,"navigation":1690,"path":37,"seo":1691,"stem":38,"__hash__":1692},"docs\u002F2.learn\u002F0.overview.md","Learn evlog",{"type":447,"value":448,"toc":1667},"minimark",[449,458,461,466,479,484,518,522,531,534,676,687,690,956,974,978,985,1141,1159,1163,1277,1281,1504,1513,1517,1520,1581,1585,1588,1657,1663],[450,451,452,453,457],"p",{},"This section is the ",[454,455,456],"strong",{},"mental model"," of evlog. By the end, you'll know exactly what evlog does, when each API fits, and how an event flows from your code to your drain.",[450,459,460],{},"If you're new, read it in order. If you've already shipped with evlog, jump to the page that matches your question.",[462,463,465],"callout",{"color":464,"icon":13},"info","All three modes coexist in the same logger. Pick per call — there's no upgrade path, no advanced mode, no toggle to flip. Same drains, same redaction, same types underneath.",[462,467,470,471,475,476,478],{"color":468,"icon":469},"neutral","i-lucide-globe","Not running an HTTP framework? See ",[472,473,474],"a",{"href":228},"Standalone TypeScript"," and ",[472,477,222],{"href":223},".",[480,481,483],"h2",{"id":482},"the-three-logging-modes","The three logging modes",[485,486,487,510,513],"card-group",{},[488,489,490,491,495,496,499,500,499,503,499,506,509],"card",{"color":468,"icon":44,"title":41,"to":42},"A fully-featured general-purpose logger. Replaces ",[492,493,494],"code",{},"console.log",", consola, pino, or winston with ",[492,497,498],{},"log.info",", ",[492,501,502],{},"log.error",[492,504,505],{},"log.warn",[492,507,508],{},"log.debug"," — same level filtering, drain pipeline, redaction, and pretty\u002FJSON output.",[488,511,512],{"color":468,"icon":49,"title":46,"to":47},"Accumulate context over a unit of work (a script, job, queue task, or request) then emit a single comprehensive event.",[488,514,517],{"color":468,"icon":515,"title":516,"to":163},"i-lucide-git-branch","Request Logging","Auto-managed wide events scoped to HTTP requests. Framework middleware creates the logger and emits it for you.",[480,519,521],{"id":520},"quick-comparison","Quick comparison",[523,524,526,527,530],"h3",{"id":525},"simple-logging-log","Simple Logging (",[492,528,529],{},"log",")",[450,532,533],{},"One event per call. No accumulation, no lifecycle management.",[535,536,542],"pre",{"className":537,"code":538,"filename":539,"language":540,"meta":541,"style":541},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { log } from 'evlog'\n\nlog.info('auth', 'User logged in')\nlog.error({ action: 'payment', error: 'card_declined', userId: 42 })\n","src\u002Findex.ts","typescript","",[492,543,544,577,584,618],{"__ignoreMap":541},[545,546,549,553,557,561,564,567,570,574],"span",{"class":547,"line":548},"line",1,[545,550,552],{"class":551},"s7zQu","import",[545,554,556],{"class":555},"sMK4o"," {",[545,558,560],{"class":559},"sTEyZ"," log",[545,562,563],{"class":555}," }",[545,565,566],{"class":551}," from",[545,568,569],{"class":555}," '",[545,571,573],{"class":572},"sfazB","evlog",[545,575,576],{"class":555},"'\n",[545,578,580],{"class":547,"line":579},2,[545,581,583],{"emptyLinePlaceholder":582},true,"\n",[545,585,587,589,591,594,597,600,603,605,608,610,613,615],{"class":547,"line":586},3,[545,588,529],{"class":559},[545,590,478],{"class":555},[545,592,464],{"class":593},"s2Zo4",[545,595,596],{"class":559},"(",[545,598,599],{"class":555},"'",[545,601,602],{"class":572},"auth",[545,604,599],{"class":555},[545,606,607],{"class":555},",",[545,609,569],{"class":555},[545,611,612],{"class":572},"User logged in",[545,614,599],{"class":555},[545,616,617],{"class":559},")\n",[545,619,621,623,625,628,630,633,637,640,642,645,647,649,652,654,656,659,661,663,666,668,672,674],{"class":547,"line":620},4,[545,622,529],{"class":559},[545,624,478],{"class":555},[545,626,627],{"class":593},"error",[545,629,596],{"class":559},[545,631,632],{"class":555},"{",[545,634,636],{"class":635},"swJcz"," action",[545,638,639],{"class":555},":",[545,641,569],{"class":555},[545,643,644],{"class":572},"payment",[545,646,599],{"class":555},[545,648,607],{"class":555},[545,650,651],{"class":635}," error",[545,653,639],{"class":555},[545,655,569],{"class":555},[545,657,658],{"class":572},"card_declined",[545,660,599],{"class":555},[545,662,607],{"class":555},[545,664,665],{"class":635}," userId",[545,667,639],{"class":555},[545,669,671],{"class":670},"sbssI"," 42",[545,673,563],{"class":555},[545,675,617],{"class":559},[523,677,679,680,683,684,530],{"id":678},"wide-events-createlogger-createrequestlogger","Wide Events (",[492,681,682],{},"createLogger"," \u002F ",[492,685,686],{},"createRequestLogger",[450,688,689],{},"One event per unit of work. Accumulate context progressively, emit when done.",[691,692,693,826],"code-group",{},[535,694,697],{"className":537,"code":695,"filename":696,"language":540,"meta":541,"style":541},"import { createLogger } from 'evlog'\n\nconst log = createLogger({ jobId: 'sync-001', queue: 'emails' })\nlog.set({ batch: { size: 50, processed: 50 } })\nlog.emit()\n","scripts\u002Fsync-job.ts",[492,698,699,718,722,770,813],{"__ignoreMap":541},[545,700,701,703,705,708,710,712,714,716],{"class":547,"line":548},[545,702,552],{"class":551},[545,704,556],{"class":555},[545,706,707],{"class":559}," createLogger",[545,709,563],{"class":555},[545,711,566],{"class":551},[545,713,569],{"class":555},[545,715,573],{"class":572},[545,717,576],{"class":555},[545,719,720],{"class":547,"line":579},[545,721,583],{"emptyLinePlaceholder":582},[545,723,724,728,731,734,736,738,740,743,745,747,750,752,754,757,759,761,764,766,768],{"class":547,"line":586},[545,725,727],{"class":726},"spNyl","const",[545,729,730],{"class":559}," log ",[545,732,733],{"class":555},"=",[545,735,707],{"class":593},[545,737,596],{"class":559},[545,739,632],{"class":555},[545,741,742],{"class":635}," jobId",[545,744,639],{"class":555},[545,746,569],{"class":555},[545,748,749],{"class":572},"sync-001",[545,751,599],{"class":555},[545,753,607],{"class":555},[545,755,756],{"class":635}," queue",[545,758,639],{"class":555},[545,760,569],{"class":555},[545,762,763],{"class":572},"emails",[545,765,599],{"class":555},[545,767,563],{"class":555},[545,769,617],{"class":559},[545,771,772,774,776,779,781,783,786,788,790,793,795,798,800,803,805,807,809,811],{"class":547,"line":620},[545,773,529],{"class":559},[545,775,478],{"class":555},[545,777,778],{"class":593},"set",[545,780,596],{"class":559},[545,782,632],{"class":555},[545,784,785],{"class":635}," batch",[545,787,639],{"class":555},[545,789,556],{"class":555},[545,791,792],{"class":635}," size",[545,794,639],{"class":555},[545,796,797],{"class":670}," 50",[545,799,607],{"class":555},[545,801,802],{"class":635}," processed",[545,804,639],{"class":555},[545,806,797],{"class":670},[545,808,563],{"class":555},[545,810,563],{"class":555},[545,812,617],{"class":559},[545,814,816,818,820,823],{"class":547,"line":815},5,[545,817,529],{"class":559},[545,819,478],{"class":555},[545,821,822],{"class":593},"emit",[545,824,825],{"class":559},"()\n",[535,827,830],{"className":537,"code":828,"filename":829,"language":540,"meta":541,"style":541},"import { createRequestLogger } from 'evlog'\n\nconst log = createRequestLogger({ method: 'POST', path: '\u002Fapi\u002Fcheckout' })\nlog.set({ user: { id: 1, plan: 'pro' } })\nlog.emit()\n","src\u002Fworker.ts",[492,831,832,851,855,899,946],{"__ignoreMap":541},[545,833,834,836,838,841,843,845,847,849],{"class":547,"line":548},[545,835,552],{"class":551},[545,837,556],{"class":555},[545,839,840],{"class":559}," createRequestLogger",[545,842,563],{"class":555},[545,844,566],{"class":551},[545,846,569],{"class":555},[545,848,573],{"class":572},[545,850,576],{"class":555},[545,852,853],{"class":547,"line":579},[545,854,583],{"emptyLinePlaceholder":582},[545,856,857,859,861,863,865,867,869,872,874,876,879,881,883,886,888,890,893,895,897],{"class":547,"line":586},[545,858,727],{"class":726},[545,860,730],{"class":559},[545,862,733],{"class":555},[545,864,840],{"class":593},[545,866,596],{"class":559},[545,868,632],{"class":555},[545,870,871],{"class":635}," method",[545,873,639],{"class":555},[545,875,569],{"class":555},[545,877,878],{"class":572},"POST",[545,880,599],{"class":555},[545,882,607],{"class":555},[545,884,885],{"class":635}," path",[545,887,639],{"class":555},[545,889,569],{"class":555},[545,891,892],{"class":572},"\u002Fapi\u002Fcheckout",[545,894,599],{"class":555},[545,896,563],{"class":555},[545,898,617],{"class":559},[545,900,901,903,905,907,909,911,914,916,918,921,923,926,928,931,933,935,938,940,942,944],{"class":547,"line":620},[545,902,529],{"class":559},[545,904,478],{"class":555},[545,906,778],{"class":593},[545,908,596],{"class":559},[545,910,632],{"class":555},[545,912,913],{"class":635}," user",[545,915,639],{"class":555},[545,917,556],{"class":555},[545,919,920],{"class":635}," id",[545,922,639],{"class":555},[545,924,925],{"class":670}," 1",[545,927,607],{"class":555},[545,929,930],{"class":635}," plan",[545,932,639],{"class":555},[545,934,569],{"class":555},[545,936,937],{"class":572},"pro",[545,939,599],{"class":555},[545,941,563],{"class":555},[545,943,563],{"class":555},[545,945,617],{"class":559},[545,947,948,950,952,954],{"class":547,"line":815},[545,949,529],{"class":559},[545,951,478],{"class":555},[545,953,822],{"class":593},[545,955,825],{"class":559},[450,957,958,960,961,963,964,499,967,970,971,478],{},[492,959,686],{}," is a thin wrapper around ",[492,962,682],{}," that pre-populates ",[492,965,966],{},"method",[492,968,969],{},"path",", and ",[492,972,973],{},"requestId",[523,975,977],{"id":976},"request-logging-framework-middleware","Request Logging (framework middleware)",[450,979,980,981,984],{},"Framework integrations create a wide event logger automatically on each request. ",[492,982,983],{},"useLogger(event)"," retrieves the logger that's already attached to the request context:",[535,986,989],{"className":537,"code":987,"filename":988,"language":540,"meta":541,"style":541},"import { useLogger } from 'evlog'\n\nexport default defineEventHandler(async (event) => {\n  const log = useLogger(event)\n  log.set({ user: { id: 1, plan: 'pro' } })\n  return { success: true }\n  \u002F\u002F auto-emitted on response end\n})\n","server\u002Fapi\u002Fcheckout.post.ts",[492,990,991,1010,1014,1045,1063,1106,1126,1133],{"__ignoreMap":541},[545,992,993,995,997,1000,1002,1004,1006,1008],{"class":547,"line":548},[545,994,552],{"class":551},[545,996,556],{"class":555},[545,998,999],{"class":559}," useLogger",[545,1001,563],{"class":555},[545,1003,566],{"class":551},[545,1005,569],{"class":555},[545,1007,573],{"class":572},[545,1009,576],{"class":555},[545,1011,1012],{"class":547,"line":579},[545,1013,583],{"emptyLinePlaceholder":582},[545,1015,1016,1019,1022,1025,1027,1030,1033,1037,1039,1042],{"class":547,"line":586},[545,1017,1018],{"class":551},"export",[545,1020,1021],{"class":551}," default",[545,1023,1024],{"class":593}," defineEventHandler",[545,1026,596],{"class":559},[545,1028,1029],{"class":726},"async",[545,1031,1032],{"class":555}," (",[545,1034,1036],{"class":1035},"sHdIc","event",[545,1038,530],{"class":555},[545,1040,1041],{"class":726}," =>",[545,1043,1044],{"class":555}," {\n",[545,1046,1047,1050,1052,1055,1057,1059,1061],{"class":547,"line":620},[545,1048,1049],{"class":726},"  const",[545,1051,560],{"class":559},[545,1053,1054],{"class":555}," =",[545,1056,999],{"class":593},[545,1058,596],{"class":635},[545,1060,1036],{"class":559},[545,1062,617],{"class":635},[545,1064,1065,1068,1070,1072,1074,1076,1078,1080,1082,1084,1086,1088,1090,1092,1094,1096,1098,1100,1102,1104],{"class":547,"line":815},[545,1066,1067],{"class":559},"  log",[545,1069,478],{"class":555},[545,1071,778],{"class":593},[545,1073,596],{"class":635},[545,1075,632],{"class":555},[545,1077,913],{"class":635},[545,1079,639],{"class":555},[545,1081,556],{"class":555},[545,1083,920],{"class":635},[545,1085,639],{"class":555},[545,1087,925],{"class":670},[545,1089,607],{"class":555},[545,1091,930],{"class":635},[545,1093,639],{"class":555},[545,1095,569],{"class":555},[545,1097,937],{"class":572},[545,1099,599],{"class":555},[545,1101,563],{"class":555},[545,1103,563],{"class":555},[545,1105,617],{"class":635},[545,1107,1109,1112,1114,1117,1119,1123],{"class":547,"line":1108},6,[545,1110,1111],{"class":551},"  return",[545,1113,556],{"class":555},[545,1115,1116],{"class":635}," success",[545,1118,639],{"class":555},[545,1120,1122],{"class":1121},"sfNiH"," true",[545,1124,1125],{"class":555}," }\n",[545,1127,1129],{"class":547,"line":1128},7,[545,1130,1132],{"class":1131},"sHwdD","  \u002F\u002F auto-emitted on response end\n",[545,1134,1136,1139],{"class":547,"line":1135},8,[545,1137,1138],{"class":555},"}",[545,1140,617],{"class":559},[462,1142,1143,1145,1146,499,1149,499,1152,1155,1156,1158],{"color":464,"icon":13},[492,1144,983],{}," doesn't create a logger, it retrieves the one the framework middleware already attached to the event. Each framework has its own way to access it (",[492,1147,1148],{},"useLogger",[492,1150,1151],{},"req.log",[492,1153,1154],{},"c.get('log')",", etc.). In Nuxt, ",[492,1157,1148],{}," is auto-imported.",[480,1160,1162],{"id":1161},"when-to-use-what","When to use what",[1164,1165,1166,1188],"table",{},[1167,1168,1169],"thead",{},[1170,1171,1172,1175,1179,1185],"tr",{},[1173,1174],"th",{},[1173,1176,1177],{},[492,1178,529],{},[1173,1180,1181,683,1183],{},[492,1182,682],{},[492,1184,686],{},[1173,1186,1187],{},"Framework middleware",[1189,1190,1191,1208,1228,1247,1262],"tbody",{},[1170,1192,1193,1199,1202,1205],{},[1194,1195,1196],"td",{},[454,1197,1198],{},"Use case",[1194,1200,1201],{},"Quick one-off events",[1194,1203,1204],{},"Scripts, jobs, workers, queues, HTTP without a framework",[1194,1206,1207],{},"API routes with a framework integration",[1170,1209,1210,1215,1218,1224],{},[1194,1211,1212],{},[454,1213,1214],{},"Context",[1194,1216,1217],{},"Single call",[1194,1219,1220,1221],{},"Accumulate with ",[492,1222,1223],{},"set()",[1194,1225,1220,1226],{},[492,1227,1223],{},[1170,1229,1230,1235,1238,1244],{},[1194,1231,1232],{},[454,1233,1234],{},"Emit",[1194,1236,1237],{},"Immediate",[1194,1239,1240,1241],{},"Manual ",[492,1242,1243],{},"emit()",[1194,1245,1246],{},"Automatic on response end",[1170,1248,1249,1253,1256,1259],{},[1194,1250,1251],{},[454,1252,56],{},[1194,1254,1255],{},"None",[1194,1257,1258],{},"You manage it",[1194,1260,1261],{},"Framework manages it",[1170,1263,1264,1269,1272,1274],{},[1194,1265,1266],{},[454,1267,1268],{},"Output",[1194,1270,1271],{},"Console + drain",[1194,1273,1271],{},[1194,1275,1276],{},"Console + drain + enrich",[523,1278,1280],{"id":1279},"by-context","By context",[1164,1282,1283,1295],{},[1167,1284,1285],{},[1170,1286,1287,1289,1292],{},[1173,1288,1214],{},[1173,1290,1291],{},"Best fit",[1173,1293,1294],{},"Why",[1189,1296,1297,1315,1330,1351,1372,1390,1414,1432,1448,1468,1483],{},[1170,1298,1299,1304,1312],{},[1194,1300,1301],{},[454,1302,1303],{},"HTTP route in Nuxt \u002F Next \u002F Hono \u002F Express \u002F …",[1194,1305,1306,1308,1309],{},[492,1307,983],{}," via ",[472,1310,1311],{"href":163},"framework integration",[1194,1313,1314],{},"One wide event per request, auto-emitted on response end",[1170,1316,1317,1322,1327],{},[1194,1318,1319],{},[454,1320,1321],{},"HTTP handler without a framework",[1194,1323,1324],{},[492,1325,1326],{},"createRequestLogger({ method, path })",[1194,1328,1329],{},"Same shape as framework middleware, manual emit",[1170,1331,1332,1337,1348],{},[1194,1333,1334],{},[454,1335,1336],{},"CLI tool \u002F one-shot script",[1194,1338,1339,1342,1343,1345,1346],{},[492,1340,1341],{},"log.*"," for steps + ",[492,1344,682],{}," for the run summary — see ",[472,1347,227],{"href":228},[1194,1349,1350],{},"Pretty in dev, structured in CI, one summary event for the whole run",[1170,1352,1353,1358,1369],{},[1194,1354,1355],{},[454,1356,1357],{},"Published library",[1194,1359,1360,1362,1363,1366,1367],{},[492,1361,682],{}," only — never ",[492,1364,1365],{},"initLogger"," — see ",[472,1368,227],{"href":228},[1194,1370,1371],{},"Don't pollute the host app's global config or force a drain on consumers",[1170,1373,1374,1379,1387],{},[1194,1375,1376],{},[454,1377,1378],{},"Background job \u002F queue worker \u002F cron",[1194,1380,1381,1384,1385],{},[492,1382,1383],{},"createLogger({ jobId, queue })"," per invocation — see ",[472,1386,227],{"href":228},[1194,1388,1389],{},"One wide event per job run, perfect for retry analysis",[1170,1391,1392,1397,1407],{},[1194,1393,1394],{},[454,1395,1396],{},"Cloudflare Worker \u002F edge function",[1194,1398,1399,1402,1403,1366,1405],{},[492,1400,1401],{},"createWorkersLogger(req)"," or ",[492,1404,686],{},[472,1406,222],{"href":223},[1194,1408,1409,1410,1413],{},"Per-request event, no ",[492,1411,1412],{},"process"," globals required",[1170,1415,1416,1420,1429],{},[1194,1417,1418],{},[454,1419,241],{},[1194,1421,1422,1424,1425,1384,1427],{},[492,1423,1365],{}," once + ",[492,1426,682],{},[472,1428,241],{"href":242},[1194,1430,1431],{},"Cold-start init, per-event scope, drain flush in the handler",[1170,1433,1434,1439,1445],{},[1194,1435,1436],{},[454,1437,1438],{},"Batch \u002F pipeline step",[1194,1440,1441,1444],{},[492,1442,1443],{},"createLogger({ step })"," per stage",[1194,1446,1447],{},"One event per stage with inputs and outputs side by side",[1170,1449,1450,1455,1465],{},[1194,1451,1452],{},[454,1453,1454],{},"AI agent \u002F LLM call",[1194,1456,1457,1459,1460],{},[492,1458,682],{}," + ",[472,1461,1462],{"href":270},[492,1463,1464],{},"createAILogger",[1194,1466,1467],{},"Token usage, tool calls, streaming metrics on the same wide event",[1170,1469,1470,1475,1480],{},[1194,1471,1472],{},[454,1473,1474],{},"Library function called inside a request",[1194,1476,1477,1479],{},[492,1478,983],{}," from caller, or accept a logger as argument",[1194,1481,1482],{},"Inherit the parent's request context, contribute to the same wide event",[1170,1484,1485,1490,1495],{},[1194,1486,1487],{},[454,1488,1489],{},"Shared workspace package",[1194,1491,1492,1493],{},"Treat it like a library — see ",[472,1494,227],{"href":228},[1194,1496,1497,1498,1500,1501,1503],{},"Host app owns ",[492,1499,1365],{}," \u002F drain; packages use ",[492,1502,682],{}," or accept a logger",[462,1505,1507,1508,475,1510,1512],{"color":464,"icon":1506},"i-lucide-lightbulb","None of these is an \"upgrade\" of another. Use ",[492,1509,529],{},[492,1511,682],{}," in the same file when it makes sense — they share the global drain, redaction, and types.",[480,1514,1516],{"id":1515},"shared-foundation","Shared foundation",[450,1518,1519],{},"All three modes share the same foundation:",[1521,1522,1523,1534,1542,1564,1569,1575],"ul",{},[1524,1525,1526,1529,1530,1533],"li",{},[454,1527,1528],{},"Pretty output"," in development, ",[454,1531,1532],{},"JSON"," in production (default, no configuration needed)",[1524,1535,1536,1538,1539],{},[454,1537,408],{}," to send events to Axiom, Sentry, PostHog, and more — see ",[472,1540,1541],{"href":95},"Integrate \u002F Adapters",[1524,1543,1544,1547,1548,499,1551,970,1554,1557,1558,1563],{},[454,1545,1546],{},"Structured errors"," with ",[492,1549,1550],{},"why",[492,1552,1553],{},"fix",[492,1555,1556],{},"link",", plus optional backend-only ",[454,1559,1560],{},[492,1561,1562],{},"internal"," for logs",[1524,1565,1566,1568],{},[454,1567,61],{}," (head + tail) to control log volume in production",[1524,1570,1571,1574],{},[454,1572,1573],{},"Redaction"," that wipes secrets before they ever leave the process",[1524,1576,1577,1580],{},[454,1578,1579],{},"Zero dependencies",", ~6 kB gzip",[480,1582,1584],{"id":1583},"the-rest-of-this-section","The rest of this section",[450,1586,1587],{},"After the three modes, the rest of Learn covers the concepts that show up across every mode:",[1521,1589,1590,1611,1616,1624,1629,1642],{},[1524,1591,1592,1594,1595,499,1597,499,1599,499,1601,1603,1604,1607,1608],{},[472,1593,51],{"href":52}," — ",[492,1596,1550],{},[492,1598,1553],{},[492,1600,1556],{},[492,1602,1562],{},", and how ",[492,1605,1606],{},"createError"," differs from ",[492,1609,1610],{},"throw new Error",[1524,1612,1613,1615],{},[472,1614,76],{"href":77}," — typed error \u002F audit catalogs that survive refactors",[1524,1617,1618,1620,1621,1623],{},[472,1619,56],{"href":57}," — exactly what happens between ",[492,1622,1243],{}," and your drain",[1524,1625,1626,1628],{},[472,1627,61],{"href":62}," — keep all errors and slow requests; drop healthy noise",[1524,1630,1631,1633,1634,1637,1638,1641],{},[472,1632,71],{"href":72}," — augment ",[492,1635,1636],{},"RequestLogger"," so ",[492,1639,1640],{},"log.set"," is autocompleted",[1524,1643,1644,1646,1647,499,1650,499,1653,1656],{},[472,1645,1573],{"href":67}," — the rules that strip ",[492,1648,1649],{},"authorization",[492,1651,1652],{},"password",[492,1654,1655],{},"token",", etc. before drain",[450,1658,1659,1660,1662],{},"When you're done with Learn, head to ",[472,1661,81],{"href":163}," to wire evlog into your stack.",[1664,1665,1666],"style",{},"html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}",{"title":541,"searchDepth":579,"depth":579,"links":1668},[1669,1670,1677,1680,1681],{"id":482,"depth":579,"text":483},{"id":520,"depth":579,"text":521,"children":1671},[1672,1674,1676],{"id":525,"depth":586,"text":1673},"Simple Logging (log)",{"id":678,"depth":586,"text":1675},"Wide Events (createLogger \u002F createRequestLogger)",{"id":976,"depth":586,"text":977},{"id":1161,"depth":579,"text":1162,"children":1678},[1679],{"id":1279,"depth":586,"text":1280},{"id":1515,"depth":579,"text":1516},{"id":1583,"depth":579,"text":1584},"The mental model — three logging modes, the wide event lifecycle, sampling, typed fields, and redaction. Read this section in order if you're new; pick what you need if you're not.","md",[1685,1687,1688],{"label":41,"icon":44,"to":42,"color":468,"variant":1686},"subtle",{"label":46,"icon":49,"to":47,"color":468,"variant":1686},{"label":56,"icon":59,"to":57,"color":468,"variant":1686},{},{"title":36,"icon":39},{"title":445,"description":1682},"WMNTSgSQfP0skAIEfnjcFO4oVQUsiarxSK4ykHrypPk",[1694,1696],{"title":25,"path":26,"stem":27,"description":1695,"icon":28,"children":-1},"Get up and running with evlog in minutes. Learn the log API, createLogger for wide events, useLogger for requests, and structured errors.",{"title":41,"path":42,"stem":43,"description":1697,"icon":44,"children":-1},"evlog's general-purpose logger. A drop-in for console.log, pino, or consola, with the same level filtering, drain pipeline, redaction, and pretty\u002FJSON output as wide events.",1780168567132]