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