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