[{"data":1,"prerenderedAt":1613},["ShallowReactive",2],{"navigation_docs":3,"-integrate-frameworks-aws-lambda":528,"-integrate-frameworks-aws-lambda-surround":1608},[4,29,76,122,304,435,496],{"title":5,"path":6,"stem":7,"children":8,"page":28},"Start","\u002Fstart","1.start",[9,13,18,23],{"title":10,"path":11,"stem":12},"Introduction","\u002Fstart\u002Fintroduction","1.start\u002F1.introduction",{"title":14,"path":15,"stem":16,"icon":17},"Why start with evlog","\u002Fstart\u002Fwhy-evlog","1.start\u002F2.why-evlog","i-lucide-rocket",{"title":19,"path":20,"stem":21,"icon":22},"Installation","\u002Fstart\u002Finstallation","1.start\u002F3.installation","i-lucide-download",{"title":24,"path":25,"stem":26,"icon":27},"Quick Start","\u002Fstart\u002Fquick-start","1.start\u002F4.quick-start","i-lucide-zap",false,{"title":30,"path":31,"stem":32,"children":33,"page":28},"Learn","\u002Flearn","2.learn",[34,38,43,48,53,58,62,67,72],{"title":35,"path":36,"stem":37},"Learn evlog","\u002Flearn\u002Foverview","2.learn\u002F0.overview",{"title":39,"path":40,"stem":41,"icon":42},"Simple Logging","\u002Flearn\u002Fsimple-logging","2.learn\u002F1.simple-logging","i-lucide-terminal",{"title":44,"path":45,"stem":46,"icon":47},"Wide Events","\u002Flearn\u002Fwide-events","2.learn\u002F2.wide-events","i-lucide-layers",{"title":49,"path":50,"stem":51,"icon":52},"Structured Errors","\u002Flearn\u002Fstructured-errors","2.learn\u002F3.structured-errors","i-lucide-shield-alert",{"title":54,"path":55,"stem":56,"icon":57},"Lifecycle","\u002Flearn\u002Flifecycle","2.learn\u002F4.lifecycle","i-lucide-arrow-right-left",{"title":59,"path":60,"stem":61},"Sampling","\u002Flearn\u002Fsampling","2.learn\u002F5.sampling",{"title":63,"path":64,"stem":65,"icon":66},"Auto-Redaction","\u002Flearn\u002Fredaction","2.learn\u002F6.redaction","i-lucide-eye-off",{"title":68,"path":69,"stem":70,"icon":71},"Typed Fields","\u002Flearn\u002Ftyped-fields","2.learn\u002F7.typed-fields","i-simple-icons-typescript",{"title":73,"path":74,"stem":75},"Catalogs","\u002Flearn\u002Fcatalogs","2.learn\u002F8.catalogs",{"title":77,"path":78,"stem":79,"children":80,"page":28},"CLI","\u002Fcli","3.cli",[81,85,90,95,99,103,108,113,118],{"title":82,"path":83,"stem":84},"evlog CLI","\u002Fcli\u002Foverview","3.cli\u002F0.overview",{"title":86,"path":87,"stem":88,"icon":89},"init","\u002Fcli\u002Finit","3.cli\u002F1.init","i-lucide-wand-sparkles",{"title":91,"path":92,"stem":93,"icon":94},"map","\u002Fcli\u002Fmap","3.cli\u002F2.map","i-lucide-radar",{"title":96,"path":97,"stem":98},"Map rules","\u002Fcli\u002Frules","3.cli\u002F3.rules",{"title":100,"path":101,"stem":102},"Map scoring","\u002Fcli\u002Fscoring","3.cli\u002F4.scoring",{"title":104,"path":105,"stem":106,"icon":107},"CI","\u002Fcli\u002Fci","3.cli\u002F5.ci","i-lucide-git-pull-request",{"title":109,"path":110,"stem":111,"icon":112},"doctor","\u002Fcli\u002Fdoctor","3.cli\u002F6.doctor","i-lucide-stethoscope",{"title":114,"path":115,"stem":116,"icon":117},"telemetry","\u002Fcli\u002Ftelemetry","3.cli\u002F7.telemetry","i-lucide-bar-chart-3",{"title":119,"path":120,"stem":121},"evlog agents","\u002Fcli\u002Fagents","3.cli\u002F8.agents",{"title":123,"path":124,"stem":125,"children":126,"page":28},"Integrate","\u002Fintegrate","4.integrate",[127,132,216],{"title":128,"path":129,"stem":130,"icon":131},"Overview","\u002Fintegrate\u002Foverview","4.integrate\u002F0.overview","i-lucide-plug",{"title":133,"path":134,"stem":135,"children":136,"page":28},"Adapters","\u002Fintegrate\u002Fadapters","4.integrate\u002Fadapters",[137,141,171,196],{"title":128,"path":138,"stem":139,"icon":140},"\u002Fintegrate\u002Fadapters\u002Foverview","4.integrate\u002Fadapters\u002F01.overview","i-lucide-list",{"title":142,"path":143,"stem":144,"children":145,"page":28},"Cloud","\u002Fintegrate\u002Fadapters\u002Fcloud","4.integrate\u002Fadapters\u002Fcloud",[146,151,156,161,166],{"title":147,"path":148,"stem":149,"icon":150},"Axiom","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Faxiom","4.integrate\u002Fadapters\u002Fcloud\u002F01.axiom","i-custom-axiom",{"title":152,"path":153,"stem":154,"icon":155},"PostHog","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fposthog","4.integrate\u002Fadapters\u002Fcloud\u002F02.posthog","i-simple-icons-posthog",{"title":157,"path":158,"stem":159,"icon":160},"Sentry","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fsentry","4.integrate\u002Fadapters\u002Fcloud\u002F03.sentry","i-simple-icons-sentry",{"title":162,"path":163,"stem":164,"icon":165},"Better Stack","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fbetter-stack","4.integrate\u002Fadapters\u002Fcloud\u002F04.better-stack","i-simple-icons-betterstack",{"title":167,"path":168,"stem":169,"icon":170},"Datadog","\u002Fintegrate\u002Fadapters\u002Fcloud\u002Fdatadog","4.integrate\u002Fadapters\u002Fcloud\u002F05.datadog","i-simple-icons-datadog",{"title":172,"path":173,"stem":174,"children":175,"page":28},"Cloud or Self-Hosted","\u002Fintegrate\u002Fadapters\u002Fhybrid","4.integrate\u002Fadapters\u002Fhybrid",[176,181,186,191],{"title":177,"path":178,"stem":179,"icon":180},"Grafana Loki","\u002Fintegrate\u002Fadapters\u002Fhybrid\u002Floki","4.integrate\u002Fadapters\u002Fhybrid\u002F01.loki","i-simple-icons-grafana",{"title":182,"path":183,"stem":184,"icon":185},"ClickHouse","\u002Fintegrate\u002Fadapters\u002Fhybrid\u002Fclickhouse","4.integrate\u002Fadapters\u002Fhybrid\u002F02.clickhouse","i-simple-icons-clickhouse",{"title":187,"path":188,"stem":189,"icon":190},"OTLP","\u002Fintegrate\u002Fadapters\u002Fhybrid\u002Fotlp","4.integrate\u002Fadapters\u002Fhybrid\u002F03.otlp","i-simple-icons-opentelemetry",{"title":192,"path":193,"stem":194,"icon":195},"HyperDX","\u002Fintegrate\u002Fadapters\u002Fhybrid\u002Fhyperdx","4.integrate\u002Fadapters\u002Fhybrid\u002F04.hyperdx","i-custom-hyperdx",{"title":197,"path":198,"stem":199,"children":200,"page":28},"Self-Hosted","\u002Fintegrate\u002Fadapters\u002Fself-hosted","4.integrate\u002Fadapters\u002Fself-hosted",[201,206,211],{"title":202,"path":203,"stem":204,"icon":205},"File System","\u002Fintegrate\u002Fadapters\u002Fself-hosted\u002Ffs","4.integrate\u002Fadapters\u002Fself-hosted\u002F01.fs","i-lucide-hard-drive",{"title":207,"path":208,"stem":209,"icon":210},"NuxtHub","\u002Fintegrate\u002Fadapters\u002Fself-hosted\u002Fnuxthub","4.integrate\u002Fadapters\u002Fself-hosted\u002F02.nuxthub","i-simple-icons-nuxt",{"title":212,"path":213,"stem":214,"icon":215},"Memory","\u002Fintegrate\u002Fadapters\u002Fself-hosted\u002Fmemory","4.integrate\u002Fadapters\u002Fself-hosted\u002F03.memory","i-lucide-cpu",{"title":217,"path":218,"stem":219,"children":220,"page":28},"Frameworks","\u002Fintegrate\u002Fframeworks","4.integrate\u002Fframeworks",[221,225,230,235,240,245,250,255,260,265,270,275,280,285,289,294,299],{"title":128,"path":222,"stem":223,"icon":224},"\u002Fintegrate\u002Fframeworks\u002Foverview","4.integrate\u002Fframeworks\u002F00.overview","i-lucide-layout-grid",{"title":226,"path":227,"stem":228,"icon":229},"Nuxt","\u002Fintegrate\u002Fframeworks\u002Fnuxt","4.integrate\u002Fframeworks\u002F01.nuxt","i-simple-icons-nuxtdotjs",{"title":231,"path":232,"stem":233,"icon":234},"Next.js","\u002Fintegrate\u002Fframeworks\u002Fnextjs","4.integrate\u002Fframeworks\u002F02.nextjs","i-simple-icons-nextdotjs",{"title":236,"path":237,"stem":238,"icon":239},"SvelteKit","\u002Fintegrate\u002Fframeworks\u002Fsveltekit","4.integrate\u002Fframeworks\u002F03.sveltekit","i-simple-icons-svelte",{"title":241,"path":242,"stem":243,"icon":244},"Nitro","\u002Fintegrate\u002Fframeworks\u002Fnitro","4.integrate\u002Fframeworks\u002F04.nitro","i-custom-nitro",{"title":246,"path":247,"stem":248,"icon":249},"TanStack Start","\u002Fintegrate\u002Fframeworks\u002Ftanstack-start","4.integrate\u002Fframeworks\u002F05.tanstack-start","i-custom-tanstack",{"title":251,"path":252,"stem":253,"icon":254},"NestJS","\u002Fintegrate\u002Fframeworks\u002Fnestjs","4.integrate\u002Fframeworks\u002F06.nestjs","i-simple-icons-nestjs",{"title":256,"path":257,"stem":258,"icon":259},"Express","\u002Fintegrate\u002Fframeworks\u002Fexpress","4.integrate\u002Fframeworks\u002F07.express","i-simple-icons-express",{"title":261,"path":262,"stem":263,"icon":264},"Hono","\u002Fintegrate\u002Fframeworks\u002Fhono","4.integrate\u002Fframeworks\u002F08.hono","i-simple-icons-hono",{"title":266,"path":267,"stem":268,"icon":269},"Fastify","\u002Fintegrate\u002Fframeworks\u002Ffastify","4.integrate\u002Fframeworks\u002F09.fastify","i-simple-icons-fastify",{"title":271,"path":272,"stem":273,"icon":274},"Elysia","\u002Fintegrate\u002Fframeworks\u002Felysia","4.integrate\u002Fframeworks\u002F10.elysia","i-custom-elysia",{"title":276,"path":277,"stem":278,"icon":279},"React Router","\u002Fintegrate\u002Fframeworks\u002Freact-router","4.integrate\u002Fframeworks\u002F11.react-router","i-custom-reactrouter",{"title":281,"path":282,"stem":283,"icon":284},"Cloudflare Workers","\u002Fintegrate\u002Fframeworks\u002Fcloudflare-workers","4.integrate\u002Fframeworks\u002F12.cloudflare-workers","i-simple-icons-cloudflare",{"title":286,"path":287,"stem":288,"icon":71},"Standalone","\u002Fintegrate\u002Fframeworks\u002Fstandalone","4.integrate\u002Fframeworks\u002F13.standalone",{"title":290,"path":291,"stem":292,"icon":293},"Astro","\u002Fintegrate\u002Fframeworks\u002Fastro","4.integrate\u002Fframeworks\u002F14.astro","i-simple-icons-astro",{"title":295,"path":296,"stem":297,"icon":298},"oRPC","\u002Fintegrate\u002Fframeworks\u002Forpc","4.integrate\u002Fframeworks\u002F15.orpc","i-lucide-network",{"title":300,"path":301,"stem":302,"icon":303},"AWS Lambda","\u002Fintegrate\u002Fframeworks\u002Faws-lambda","4.integrate\u002Fframeworks\u002F16.aws-lambda","i-custom-lambda",{"title":305,"path":306,"stem":307,"children":308,"page":28},"Use Cases","\u002Fuse-cases","5.use-cases",[309,312,317,346,374,407,427,431],{"title":305,"path":310,"stem":311},"\u002Fuse-cases\u002Foverview","5.use-cases\u002F0.overview",{"title":313,"path":314,"stem":315,"icon":316},"Client Logging","\u002Fuse-cases\u002Fclient-logging","5.use-cases\u002F1.client-logging","i-lucide-monitor",{"title":318,"icon":319,"path":320,"stem":321,"children":322,"page":28},"AI SDK","i-simple-icons-vercel","\u002Fuse-cases\u002Fai-sdk","5.use-cases\u002F2.ai-sdk",[323,326,331,336,341],{"title":128,"path":324,"stem":325,"icon":140},"\u002Fuse-cases\u002Fai-sdk\u002Foverview","5.use-cases\u002F2.ai-sdk\u002F01.overview",{"title":327,"path":328,"stem":329,"icon":330},"Usage","\u002Fuse-cases\u002Fai-sdk\u002Fusage","5.use-cases\u002F2.ai-sdk\u002F02.usage","i-lucide-code",{"title":332,"path":333,"stem":334,"icon":335},"Options","\u002Fuse-cases\u002Fai-sdk\u002Foptions","5.use-cases\u002F2.ai-sdk\u002F03.options","i-lucide-sliders",{"title":337,"path":338,"stem":339,"icon":340},"Metadata","\u002Fuse-cases\u002Fai-sdk\u002Fmetadata","5.use-cases\u002F2.ai-sdk\u002F04.metadata","i-lucide-database",{"title":342,"path":343,"stem":344,"icon":345},"Telemetry","\u002Fuse-cases\u002Fai-sdk\u002Ftelemetry","5.use-cases\u002F2.ai-sdk\u002F05.telemetry","i-lucide-activity",{"title":347,"icon":348,"path":349,"stem":350,"children":351,"page":28},"Better Auth","i-simple-icons-betterauth","\u002Fuse-cases\u002Fbetter-auth","5.use-cases\u002F3.better-auth",[352,355,360,365,369],{"title":128,"path":353,"stem":354,"icon":140},"\u002Fuse-cases\u002Fbetter-auth\u002Foverview","5.use-cases\u002F3.better-auth\u002F01.overview",{"title":356,"path":357,"stem":358,"icon":359},"Identify User","\u002Fuse-cases\u002Fbetter-auth\u002Fidentify-user","5.use-cases\u002F3.better-auth\u002F02.identify-user","i-lucide-user-check",{"title":361,"path":362,"stem":363,"icon":364},"Middleware","\u002Fuse-cases\u002Fbetter-auth\u002Fmiddleware","5.use-cases\u002F3.better-auth\u002F03.middleware","i-lucide-shield",{"title":366,"path":367,"stem":368,"icon":316},"Client Sync","\u002Fuse-cases\u002Fbetter-auth\u002Fclient-sync","5.use-cases\u002F3.better-auth\u002F04.client-sync",{"title":370,"path":371,"stem":372,"icon":373},"Performance","\u002Fuse-cases\u002Fbetter-auth\u002Fperformance","5.use-cases\u002F3.better-auth\u002F05.performance","i-lucide-gauge",{"title":375,"icon":376,"path":377,"stem":378,"children":379,"page":28},"Audit Logs","i-lucide-shield-check","\u002Fuse-cases\u002Faudit","5.use-cases\u002F4.audit",[380,383,388,393,398,402],{"title":128,"path":381,"stem":382,"icon":140},"\u002Fuse-cases\u002Faudit\u002Foverview","5.use-cases\u002F4.audit\u002F01.overview",{"title":384,"path":385,"stem":386,"icon":387},"Schema","\u002Fuse-cases\u002Faudit\u002Fschema","5.use-cases\u002F4.audit\u002F02.schema","i-lucide-file-text",{"title":389,"path":390,"stem":391,"icon":392},"Recording","\u002Fuse-cases\u002Faudit\u002Frecording","5.use-cases\u002F4.audit\u002F03.recording","i-lucide-pen-line",{"title":394,"path":395,"stem":396,"icon":397},"Drains","\u002Fuse-cases\u002Faudit\u002Fpipeline","5.use-cases\u002F4.audit\u002F04.pipeline","i-lucide-link",{"title":399,"path":400,"stem":401,"icon":376},"Compliance","\u002Fuse-cases\u002Faudit\u002Fcompliance","5.use-cases\u002F4.audit\u002F05.compliance",{"title":403,"path":404,"stem":405,"icon":406},"Recipes","\u002Fuse-cases\u002Faudit\u002Frecipes","5.use-cases\u002F4.audit\u002F06.recipes","i-lucide-book-open",{"title":342,"icon":373,"path":408,"stem":409,"children":410,"page":28},"\u002Fuse-cases\u002Ftelemetry","5.use-cases\u002F4.telemetry",[411,414,419,423],{"title":128,"path":412,"stem":413,"icon":140},"\u002Fuse-cases\u002Ftelemetry\u002Foverview","5.use-cases\u002F4.telemetry\u002F01.overview",{"title":415,"path":416,"stem":417,"icon":418},"Setup","\u002Fuse-cases\u002Ftelemetry\u002Fsetup","5.use-cases\u002F4.telemetry\u002F02.setup","i-lucide-wrench",{"title":420,"path":421,"stem":422},"Telemetry Ingest","\u002Fuse-cases\u002Ftelemetry\u002Fingest","5.use-cases\u002F4.telemetry\u002F03.ingest",{"title":424,"path":425,"stem":426,"icon":406},"Reference","\u002Fuse-cases\u002Ftelemetry\u002Freference","5.use-cases\u002F4.telemetry\u002F04.reference",{"title":428,"path":429,"stem":430},"Enrichers","\u002Fuse-cases\u002Fenrichers","5.use-cases\u002F5.enrichers",{"title":432,"path":433,"stem":434},"eve","\u002Fuse-cases\u002Feve","5.use-cases\u002F5.eve",{"title":436,"path":437,"stem":438,"children":439,"page":28},"Extend","\u002Fextend","6.extend",[440,444,449,454,458,463,467,471,476,481,486,491],{"title":128,"path":441,"stem":442,"icon":443},"\u002Fextend\u002Foverview","6.extend\u002F0.overview","i-lucide-blocks",{"title":445,"path":446,"stem":447,"icon":448},"Stream","\u002Fextend\u002Fstream","6.extend\u002F1.stream","i-lucide-radio-tower",{"title":450,"path":451,"stem":452,"icon":453},"Custom framework","\u002Fextend\u002Fcustom-framework","6.extend\u002F10.custom-framework","i-lucide-puzzle",{"title":455,"path":456,"stem":457,"icon":448},"Diagnostics channel","\u002Fextend\u002Fdiagnostics-channel","6.extend\u002F11.diagnostics-channel",{"title":459,"path":460,"stem":461,"icon":462},"FS reader","\u002Fextend\u002Ffs-reader","6.extend\u002F2.fs-reader","i-lucide-folder-search",{"title":403,"path":464,"stem":465,"icon":466},"\u002Fextend\u002Fconsumer-recipes","6.extend\u002F3.consumer-recipes","i-lucide-chef-hat",{"title":468,"path":469,"stem":470},"Plugins","\u002Fextend\u002Fplugins","6.extend\u002F4.plugins",{"title":472,"path":473,"stem":474,"icon":475},"Custom enrichers","\u002Fextend\u002Fcustom-enrichers","6.extend\u002F5.custom-enrichers","i-lucide-sparkles",{"title":477,"path":478,"stem":479,"icon":480},"Tail sampling","\u002Fextend\u002Ftail-sampling","6.extend\u002F6.tail-sampling","i-lucide-filter",{"title":482,"path":483,"stem":484,"icon":485},"Identity headers","\u002Fextend\u002Fidentity-headers","6.extend\u002F7.identity-headers","i-lucide-fingerprint",{"title":487,"path":488,"stem":489,"icon":490},"Custom drains","\u002Fextend\u002Fcustom-drains","6.extend\u002F8.custom-drains","i-lucide-share-2",{"title":492,"path":493,"stem":494,"icon":495},"Drain pipeline","\u002Fextend\u002Fdrain-pipeline","6.extend\u002F9.drain-pipeline","i-lucide-workflow",{"title":424,"path":497,"stem":498,"children":499,"page":28},"\u002Freference","7.reference",[500,504,507,512,516,520,524],{"title":501,"path":502,"stem":503},"Configuration","\u002Freference\u002Fconfiguration","7.reference\u002F1.configuration",{"title":370,"path":505,"stem":506,"icon":373},"\u002Freference\u002Fperformance","7.reference\u002F2.performance",{"title":508,"path":509,"stem":510,"icon":511},"Vite Plugin","\u002Freference\u002Fvite-plugin","7.reference\u002F3.vite-plugin","i-custom-vite",{"title":513,"path":514,"stem":515,"icon":376},"Best Practices","\u002Freference\u002Fbest-practices","7.reference\u002F4.best-practices",{"title":517,"path":518,"stem":519},"evlog vs pino, winston, consola","\u002Freference\u002Fvs-other-loggers","7.reference\u002F5.vs-other-loggers",{"title":521,"path":522,"stem":523,"icon":475},"Agent Skills","\u002Freference\u002Fagent-skills","7.reference\u002F6.agent-skills",{"title":525,"path":526,"stem":527},"Log cost","\u002Freference\u002Fcost","7.reference\u002F7.cost",{"id":529,"title":300,"body":530,"description":1601,"extension":1602,"links":1603,"meta":1604,"navigation":1605,"path":301,"seo":1606,"stem":302,"__hash__":1607},"docs\u002F4.integrate\u002Fframeworks\u002F16.aws-lambda.md",{"type":531,"value":532,"toc":1589},"minimark",[533,564,604,613,624,639,653,656,661,732,736,1245,1254,1261,1279,1404,1417,1421,1439,1545,1549,1585],[534,535,536,537,541,542,546,547,551,552,555,556,559,560,563],"p",{},"AWS Lambda has ",[538,539,540],"strong",{},"no HTTP middleware lifecycle"," like Nuxt or Express, so evlog behaves like ",[543,544,545],"a",{"href":287},"standalone TypeScript",": call ",[548,549,550],"code",{},"initLogger()"," once, create a logger ",[538,553,554],{},"per invocation"," (or per SQS message) with ",[548,557,558],{},"createLogger()",", then call ",[548,561,562],{},"log.emit()"," when work finishes.",[565,566,569,572,591],"prompt",{":actions":567,"description":568,"icon":303},"[\"copy\",\"cursor\",\"claude\"]","Set up evlog in my AWS Lambda function",[534,570,571],{},"Set up evlog in an AWS Lambda function (e.g. SQS consumer).",[573,574,575,579,582,585,588],"ul",{},[576,577,578],"li",{},"Install evlog: pnpm add evlog",[576,580,581],{},"Call initLogger({ env: { service: 'my-fn' } }) once at module load (cold start)",[576,583,584],{},"In the handler, create a new createLogger({ messageId, ... }) per invocation or per message",[576,586,587],{},"Use log.set() to accumulate context; call log.emit() when done",[576,589,590],{},"Avoid a single module-level logger instance reused across invocations (Lambda reuses runtimes)",[534,592,593,594,599,600],{},"Docs: ",[543,595,596],{"href":596,"rel":597},"https:\u002F\u002Fwww.evlog.dev\u002Fintegrate\u002Fframeworks\u002Faws-lambda",[598],"nofollow","\nAdapters: ",[543,601,602],{"href":602,"rel":603},"https:\u002F\u002Fwww.evlog.dev\u002Fintegrate\u002Fadapters\u002Foverview",[598],[605,606,608,609,612],"h2",{"id":607},"why-not-one-global-createlogger","Why not one global ",[548,610,611],{},"createLogger","?",[534,614,615,616,619,620,623],{},"Lambda ",[538,617,618],{},"execution environments are reused",": the same process can handle many invocations in sequence. Module-level variables persist, so ",[538,621,622],{},"one shared logger instance"," can leak fields from a previous invocation into the next.",[534,625,626,629,630,632,633,638],{},[538,627,628],{},"Do this:"," ",[548,631,550],{}," once at the top level (configuration only), and ",[538,634,635,637],{},[548,636,558],{}," inside the handler"," (or inside the loop over SQS records) for each unit of work.",[534,640,641,644,645,648,649,652],{},[538,642,643],{},"Dependency injection"," (passing ",[548,646,647],{},"log"," into functions) is optional, it helps tests and clarity, but what matters is ",[538,650,651],{},"one logger per invocation",", not whether you use DI.",[605,654,24],{"id":655},"quick-start",[657,658,660],"h3",{"id":659},"_1-install","1. Install",[662,663,664,689,703,717],"code-group",{},[665,666,672],"pre",{"className":667,"code":668,"filename":669,"language":670,"meta":671,"style":671},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","pnpm add evlog\n","pnpm","bash","",[548,673,674],{"__ignoreMap":671},[675,676,679,682,686],"span",{"class":677,"line":678},"line",1,[675,680,669],{"class":681},"sBMFI",[675,683,685],{"class":684},"sfazB"," add",[675,687,688],{"class":684}," evlog\n",[665,690,693],{"className":667,"code":691,"filename":692,"language":670,"meta":671,"style":671},"bun add evlog\n","bun",[548,694,695],{"__ignoreMap":671},[675,696,697,699,701],{"class":677,"line":678},[675,698,692],{"class":681},[675,700,685],{"class":684},[675,702,688],{"class":684},[665,704,707],{"className":667,"code":705,"filename":706,"language":670,"meta":671,"style":671},"yarn add evlog\n","yarn",[548,708,709],{"__ignoreMap":671},[675,710,711,713,715],{"class":677,"line":678},[675,712,706],{"class":681},[675,714,685],{"class":684},[675,716,688],{"class":684},[665,718,721],{"className":667,"code":719,"filename":720,"language":670,"meta":671,"style":671},"npm install evlog\n","npm",[548,722,723],{"__ignoreMap":671},[675,724,725,727,730],{"class":677,"line":678},[675,726,720],{"class":681},[675,728,729],{"class":684}," install",[675,731,688],{"class":684},[657,733,735],{"id":734},"_2-initialize-once-log-per-invocation","2. Initialize once, log per invocation",[665,737,742],{"className":738,"code":739,"filename":740,"language":741,"meta":671,"style":671},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import type { SQSEvent } from 'aws-lambda'\nimport { initLogger, createLogger } from 'evlog'\n\ninitLogger({\n  env: { service: 'sqs-consumer', environment: process.env.NODE_ENV },\n})\n\nexport async function handler(event: SQSEvent) {\n  for (const record of event.Records) {\n    const log = createLogger({\n      messageId: record.messageId,\n      approximateReceiveCount: record.attributes?.ApproximateReceiveCount,\n    })\n\n    try {\n      log.set({ queue: { name: record.eventSourceARN } })\n      \u002F\u002F … parse record.body and process the message\n      log.set({ status: 'ok' })\n    } catch (error) {\n      log.error(error instanceof Error ? error : new Error(String(error)))\n      log.set({ status: 'error' })\n      throw error\n    } finally {\n      log.emit()\n    }\n  }\n}\n","src\u002Fhandler.ts","typescript",[548,743,744,776,803,810,823,872,881,886,918,949,967,985,1008,1016,1021,1029,1070,1077,1106,1123,1168,1195,1204,1214,1227,1233,1239],{"__ignoreMap":671},[675,745,746,750,753,757,761,764,767,770,773],{"class":677,"line":678},[675,747,749],{"class":748},"s7zQu","import",[675,751,752],{"class":748}," type",[675,754,756],{"class":755},"sMK4o"," {",[675,758,760],{"class":759},"sTEyZ"," SQSEvent",[675,762,763],{"class":755}," }",[675,765,766],{"class":748}," from",[675,768,769],{"class":755}," '",[675,771,772],{"class":684},"aws-lambda",[675,774,775],{"class":755},"'\n",[675,777,779,781,783,786,789,792,794,796,798,801],{"class":677,"line":778},2,[675,780,749],{"class":748},[675,782,756],{"class":755},[675,784,785],{"class":759}," initLogger",[675,787,788],{"class":755},",",[675,790,791],{"class":759}," createLogger",[675,793,763],{"class":755},[675,795,766],{"class":748},[675,797,769],{"class":755},[675,799,800],{"class":684},"evlog",[675,802,775],{"class":755},[675,804,806],{"class":677,"line":805},3,[675,807,809],{"emptyLinePlaceholder":808},true,"\n",[675,811,813,817,820],{"class":677,"line":812},4,[675,814,816],{"class":815},"s2Zo4","initLogger",[675,818,819],{"class":759},"(",[675,821,822],{"class":755},"{\n",[675,824,826,830,833,835,838,840,842,845,848,850,853,855,858,861,864,866,869],{"class":677,"line":825},5,[675,827,829],{"class":828},"swJcz","  env",[675,831,832],{"class":755},":",[675,834,756],{"class":755},[675,836,837],{"class":828}," service",[675,839,832],{"class":755},[675,841,769],{"class":755},[675,843,844],{"class":684},"sqs-consumer",[675,846,847],{"class":755},"'",[675,849,788],{"class":755},[675,851,852],{"class":828}," environment",[675,854,832],{"class":755},[675,856,857],{"class":759}," process",[675,859,860],{"class":755},".",[675,862,863],{"class":759},"env",[675,865,860],{"class":755},[675,867,868],{"class":759},"NODE_ENV ",[675,870,871],{"class":755},"},\n",[675,873,875,878],{"class":677,"line":874},6,[675,876,877],{"class":755},"}",[675,879,880],{"class":759},")\n",[675,882,884],{"class":677,"line":883},7,[675,885,809],{"emptyLinePlaceholder":808},[675,887,889,892,896,899,902,904,908,910,912,915],{"class":677,"line":888},8,[675,890,891],{"class":748},"export",[675,893,895],{"class":894},"spNyl"," async",[675,897,898],{"class":894}," function",[675,900,901],{"class":815}," handler",[675,903,819],{"class":755},[675,905,907],{"class":906},"sHdIc","event",[675,909,832],{"class":755},[675,911,760],{"class":681},[675,913,914],{"class":755},")",[675,916,917],{"class":755}," {\n",[675,919,921,924,927,930,933,936,939,941,944,947],{"class":677,"line":920},9,[675,922,923],{"class":748},"  for",[675,925,926],{"class":828}," (",[675,928,929],{"class":894},"const",[675,931,932],{"class":759}," record",[675,934,935],{"class":755}," of",[675,937,938],{"class":759}," event",[675,940,860],{"class":755},[675,942,943],{"class":759},"Records",[675,945,946],{"class":828},") ",[675,948,822],{"class":755},[675,950,952,955,958,961,963,965],{"class":677,"line":951},10,[675,953,954],{"class":894},"    const",[675,956,957],{"class":759}," log",[675,959,960],{"class":755}," =",[675,962,791],{"class":815},[675,964,819],{"class":828},[675,966,822],{"class":755},[675,968,970,973,975,977,979,982],{"class":677,"line":969},11,[675,971,972],{"class":828},"      messageId",[675,974,832],{"class":755},[675,976,932],{"class":759},[675,978,860],{"class":755},[675,980,981],{"class":759},"messageId",[675,983,984],{"class":755},",\n",[675,986,988,991,993,995,997,1000,1003,1006],{"class":677,"line":987},12,[675,989,990],{"class":828},"      approximateReceiveCount",[675,992,832],{"class":755},[675,994,932],{"class":759},[675,996,860],{"class":755},[675,998,999],{"class":759},"attributes",[675,1001,1002],{"class":755},"?.",[675,1004,1005],{"class":759},"ApproximateReceiveCount",[675,1007,984],{"class":755},[675,1009,1011,1014],{"class":677,"line":1010},13,[675,1012,1013],{"class":755},"    }",[675,1015,880],{"class":828},[675,1017,1019],{"class":677,"line":1018},14,[675,1020,809],{"emptyLinePlaceholder":808},[675,1022,1024,1027],{"class":677,"line":1023},15,[675,1025,1026],{"class":748},"    try",[675,1028,917],{"class":755},[675,1030,1032,1035,1037,1040,1042,1045,1048,1050,1052,1055,1057,1059,1061,1064,1066,1068],{"class":677,"line":1031},16,[675,1033,1034],{"class":759},"      log",[675,1036,860],{"class":755},[675,1038,1039],{"class":815},"set",[675,1041,819],{"class":828},[675,1043,1044],{"class":755},"{",[675,1046,1047],{"class":828}," queue",[675,1049,832],{"class":755},[675,1051,756],{"class":755},[675,1053,1054],{"class":828}," name",[675,1056,832],{"class":755},[675,1058,932],{"class":759},[675,1060,860],{"class":755},[675,1062,1063],{"class":759},"eventSourceARN",[675,1065,763],{"class":755},[675,1067,763],{"class":755},[675,1069,880],{"class":828},[675,1071,1073],{"class":677,"line":1072},17,[675,1074,1076],{"class":1075},"sHwdD","      \u002F\u002F … parse record.body and process the message\n",[675,1078,1080,1082,1084,1086,1088,1090,1093,1095,1097,1100,1102,1104],{"class":677,"line":1079},18,[675,1081,1034],{"class":759},[675,1083,860],{"class":755},[675,1085,1039],{"class":815},[675,1087,819],{"class":828},[675,1089,1044],{"class":755},[675,1091,1092],{"class":828}," status",[675,1094,832],{"class":755},[675,1096,769],{"class":755},[675,1098,1099],{"class":684},"ok",[675,1101,847],{"class":755},[675,1103,763],{"class":755},[675,1105,880],{"class":828},[675,1107,1109,1111,1114,1116,1119,1121],{"class":677,"line":1108},19,[675,1110,1013],{"class":755},[675,1112,1113],{"class":748}," catch",[675,1115,926],{"class":828},[675,1117,1118],{"class":759},"error",[675,1120,946],{"class":828},[675,1122,822],{"class":755},[675,1124,1126,1128,1130,1132,1134,1136,1139,1142,1145,1148,1151,1154,1156,1158,1161,1163,1165],{"class":677,"line":1125},20,[675,1127,1034],{"class":759},[675,1129,860],{"class":755},[675,1131,1118],{"class":815},[675,1133,819],{"class":828},[675,1135,1118],{"class":759},[675,1137,1138],{"class":755}," instanceof",[675,1140,1141],{"class":681}," Error",[675,1143,1144],{"class":755}," ?",[675,1146,1147],{"class":759}," error",[675,1149,1150],{"class":755}," :",[675,1152,1153],{"class":755}," new",[675,1155,1141],{"class":815},[675,1157,819],{"class":828},[675,1159,1160],{"class":815},"String",[675,1162,819],{"class":828},[675,1164,1118],{"class":759},[675,1166,1167],{"class":828},")))\n",[675,1169,1171,1173,1175,1177,1179,1181,1183,1185,1187,1189,1191,1193],{"class":677,"line":1170},21,[675,1172,1034],{"class":759},[675,1174,860],{"class":755},[675,1176,1039],{"class":815},[675,1178,819],{"class":828},[675,1180,1044],{"class":755},[675,1182,1092],{"class":828},[675,1184,832],{"class":755},[675,1186,769],{"class":755},[675,1188,1118],{"class":684},[675,1190,847],{"class":755},[675,1192,763],{"class":755},[675,1194,880],{"class":828},[675,1196,1198,1201],{"class":677,"line":1197},22,[675,1199,1200],{"class":748},"      throw",[675,1202,1203],{"class":759}," error\n",[675,1205,1207,1209,1212],{"class":677,"line":1206},23,[675,1208,1013],{"class":755},[675,1210,1211],{"class":748}," finally",[675,1213,917],{"class":755},[675,1215,1217,1219,1221,1224],{"class":677,"line":1216},24,[675,1218,1034],{"class":759},[675,1220,860],{"class":755},[675,1222,1223],{"class":815},"emit",[675,1225,1226],{"class":828},"()\n",[675,1228,1230],{"class":677,"line":1229},25,[675,1231,1232],{"class":755},"    }\n",[675,1234,1236],{"class":677,"line":1235},26,[675,1237,1238],{"class":755},"  }\n",[675,1240,1242],{"class":677,"line":1241},27,[675,1243,1244],{"class":755},"}\n",[534,1246,1247,1248,629,1251,1253],{},"If you process the whole batch as one logical unit, use a ",[538,1249,1250],{},"single",[548,1252,558],{}," per handler invocation with batch metadata instead of one logger per record.",[605,1255,1257,1258],{"id":1256},"stdout-and-silent","Stdout and ",[548,1259,1260],{},"silent",[534,1262,1263,1264,1267,1268,1271,1272,1275,1276,860],{},"Many teams ingest Lambda logs from ",[538,1265,1266],{},"CloudWatch"," via stdout. If you use a ",[538,1269,1270],{},"drain adapter"," (OTLP, Datadog, Axiom, etc.) and want JSON or platform-specific formatting without duplicate console noise, set ",[548,1273,1274],{},"silent: true"," in production. See ",[543,1277,501],{"href":1278},"\u002Freference\u002Fconfiguration#silent-mode",[665,1280,1282],{"className":738,"code":1281,"filename":740,"language":741,"meta":671,"style":671},"import { createAxiomDrain } from 'evlog\u002Faxiom'\nimport { initLogger } from 'evlog'\n\ninitLogger({\n  env: { service: 'sqs-consumer' },\n  silent: process.env.NODE_ENV === 'production',\n  drain: createAxiomDrain(),\n})\n",[548,1283,1284,1304,1322,1326,1334,1355,1384,1398],{"__ignoreMap":671},[675,1285,1286,1288,1290,1293,1295,1297,1299,1302],{"class":677,"line":678},[675,1287,749],{"class":748},[675,1289,756],{"class":755},[675,1291,1292],{"class":759}," createAxiomDrain",[675,1294,763],{"class":755},[675,1296,766],{"class":748},[675,1298,769],{"class":755},[675,1300,1301],{"class":684},"evlog\u002Faxiom",[675,1303,775],{"class":755},[675,1305,1306,1308,1310,1312,1314,1316,1318,1320],{"class":677,"line":778},[675,1307,749],{"class":748},[675,1309,756],{"class":755},[675,1311,785],{"class":759},[675,1313,763],{"class":755},[675,1315,766],{"class":748},[675,1317,769],{"class":755},[675,1319,800],{"class":684},[675,1321,775],{"class":755},[675,1323,1324],{"class":677,"line":805},[675,1325,809],{"emptyLinePlaceholder":808},[675,1327,1328,1330,1332],{"class":677,"line":812},[675,1329,816],{"class":815},[675,1331,819],{"class":759},[675,1333,822],{"class":755},[675,1335,1336,1338,1340,1342,1344,1346,1348,1350,1352],{"class":677,"line":825},[675,1337,829],{"class":828},[675,1339,832],{"class":755},[675,1341,756],{"class":755},[675,1343,837],{"class":828},[675,1345,832],{"class":755},[675,1347,769],{"class":755},[675,1349,844],{"class":684},[675,1351,847],{"class":755},[675,1353,1354],{"class":755}," },\n",[675,1356,1357,1360,1362,1364,1366,1368,1370,1372,1375,1377,1380,1382],{"class":677,"line":874},[675,1358,1359],{"class":828},"  silent",[675,1361,832],{"class":755},[675,1363,857],{"class":759},[675,1365,860],{"class":755},[675,1367,863],{"class":759},[675,1369,860],{"class":755},[675,1371,868],{"class":759},[675,1373,1374],{"class":755},"===",[675,1376,769],{"class":755},[675,1378,1379],{"class":684},"production",[675,1381,847],{"class":755},[675,1383,984],{"class":755},[675,1385,1386,1389,1391,1393,1396],{"class":677,"line":883},[675,1387,1388],{"class":828},"  drain",[675,1390,832],{"class":755},[675,1392,1292],{"class":815},[675,1394,1395],{"class":759},"()",[675,1397,984],{"class":755},[675,1399,1400,1402],{"class":677,"line":888},[675,1401,877],{"class":755},[675,1403,880],{"class":759},[1405,1406,1409,1410,1412,1413,1416],"callout",{"color":1407,"icon":1408},"warning","i-lucide-alert-triangle","If ",[548,1411,1260],{}," is enabled without a ",[548,1414,1415],{},"drain",", events may not be visible anywhere. See the configuration docs for details.",[605,1418,1420],{"id":1419},"error-handling","Error handling",[534,1422,1423,1424,1427,1428,1431,1432,1431,1435,1438],{},"Use ",[548,1425,1426],{},"createError"," where you want structured fields (",[548,1429,1430],{},"why",", ",[548,1433,1434],{},"fix",[548,1436,1437],{},"link","). Map failures to your Lambda return or rethrow so SQS retry\u002FDLQ behavior stays correct. evlog does not replace AWS error semantics.",[665,1440,1442],{"className":738,"code":1441,"filename":740,"language":741,"meta":671,"style":671},"import { createError } from 'evlog'\n\nthrow createError({\n  message: 'Invalid payload',\n  status: 400,\n  why: 'Required field missing',\n  fix: 'Include orderId in the message body',\n})\n",[548,1443,1444,1463,1467,1478,1494,1507,1523,1539],{"__ignoreMap":671},[675,1445,1446,1448,1450,1453,1455,1457,1459,1461],{"class":677,"line":678},[675,1447,749],{"class":748},[675,1449,756],{"class":755},[675,1451,1452],{"class":759}," createError",[675,1454,763],{"class":755},[675,1456,766],{"class":748},[675,1458,769],{"class":755},[675,1460,800],{"class":684},[675,1462,775],{"class":755},[675,1464,1465],{"class":677,"line":778},[675,1466,809],{"emptyLinePlaceholder":808},[675,1468,1469,1472,1474,1476],{"class":677,"line":805},[675,1470,1471],{"class":748},"throw",[675,1473,1452],{"class":815},[675,1475,819],{"class":759},[675,1477,822],{"class":755},[675,1479,1480,1483,1485,1487,1490,1492],{"class":677,"line":812},[675,1481,1482],{"class":828},"  message",[675,1484,832],{"class":755},[675,1486,769],{"class":755},[675,1488,1489],{"class":684},"Invalid payload",[675,1491,847],{"class":755},[675,1493,984],{"class":755},[675,1495,1496,1499,1501,1505],{"class":677,"line":825},[675,1497,1498],{"class":828},"  status",[675,1500,832],{"class":755},[675,1502,1504],{"class":1503},"sbssI"," 400",[675,1506,984],{"class":755},[675,1508,1509,1512,1514,1516,1519,1521],{"class":677,"line":874},[675,1510,1511],{"class":828},"  why",[675,1513,832],{"class":755},[675,1515,769],{"class":755},[675,1517,1518],{"class":684},"Required field missing",[675,1520,847],{"class":755},[675,1522,984],{"class":755},[675,1524,1525,1528,1530,1532,1535,1537],{"class":677,"line":883},[675,1526,1527],{"class":828},"  fix",[675,1529,832],{"class":755},[675,1531,769],{"class":755},[675,1533,1534],{"class":684},"Include orderId in the message body",[675,1536,847],{"class":755},[675,1538,984],{"class":755},[675,1540,1541,1543],{"class":677,"line":888},[675,1542,877],{"class":755},[675,1544,880],{"class":759},[605,1546,1548],{"id":1547},"related","Related",[573,1550,1551,1566,1580],{},[576,1552,1553,1556,1557,1559,1560,1559,1562,1565],{},[543,1554,1555],{"href":287},"Standalone TypeScript",": same ",[548,1558,816],{}," + ",[548,1561,611],{},[548,1563,1564],{},"emit()"," model",[576,1567,1568,1570,1571,1431,1573,926,1576,1579],{},[543,1569,501],{"href":502},": ",[548,1572,1260],{},[548,1574,1575],{},"env.region",[548,1577,1578],{},"AWS_REGION","), drains",[576,1581,1582,1584],{},[543,1583,44],{"href":45},": designing one comprehensive event per unit of work",[1586,1587,1588],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}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 .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 .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 .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 .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}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}",{"title":671,"searchDepth":778,"depth":778,"links":1590},[1591,1593,1597,1599,1600],{"id":607,"depth":778,"text":1592},"Why not one global createLogger?",{"id":655,"depth":778,"text":24,"children":1594},[1595,1596],{"id":659,"depth":805,"text":660},{"id":734,"depth":805,"text":735},{"id":1256,"depth":778,"text":1598},"Stdout and silent",{"id":1419,"depth":778,"text":1420},{"id":1547,"depth":778,"text":1548},"Wide events and structured logging in AWS Lambda functions, including SQS consumers and event-driven handlers.","md",null,{},{"title":300,"icon":303},{"title":300,"description":1601},"zNoi_lS-LmG0YPgg1lT3WGOTQhSul8ArSW9n2H4Z79A",[1609,1611],{"title":295,"path":296,"stem":297,"description":1610,"icon":298,"children":-1},"Automatic wide events, structured errors, drain adapters, enrichers, and tail sampling in oRPC applications.",{"title":305,"path":310,"stem":311,"description":1612,"children":-1},"[object Object]",1786793470907]