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