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