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