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