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