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