[{"data":1,"prerenderedAt":2797},["ShallowReactive",2],{"navigation_docs":3,"-learn-lifecycle":505,"-learn-lifecycle-surround":2792},[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":56,"body":507,"description":2781,"extension":2782,"links":2783,"meta":2788,"navigation":2789,"path":57,"seo":2790,"stem":58,"__hash__":2791},"docs\u002F2.learn\u002F4.lifecycle.md",{"type":508,"value":509,"toc":2759},"minimark",[510,514,517,522,667,705,709,712,717,727,733,842,846,853,922,928,932,938,1152,1158,1162,1165,1205,1208,1215,1227,1335,1341,1473,1483,1487,1490,1497,1566,1589,1592,1596,1602,1853,1856,1863,1866,1946,2102,2109,2116,2126,2209,2216,2220,2285,2289,2296,2407,2411,2417,2450,2460,2464,2471,2519,2729,2733,2755],[511,512,513],"p",{},"evlog events follow a pipeline from creation to delivery. The pipeline differs slightly depending on which logging mode you use, but the core stages (emit, sample, enrich, drain) are shared.",[515,516],"lifecycle-flow",{},[518,519,521],"h2",{"id":520},"overview-by-mode","Overview by Mode",[523,524,525,554],"table",{},[526,527,528],"thead",{},[529,530,531,535,542,551],"tr",{},[532,533,534],"th",{},"Stage",[532,536,537,541],{},[538,539,540],"code",{},"log"," (simple)",[532,543,544,547,548],{},[538,545,546],{},"createLogger"," \u002F ",[538,549,550],{},"createRequestLogger",[532,552,553],{},"Framework middleware",[555,556,557,581,605,624,639,654],"tbody",{},[529,558,559,566,569,578],{},[560,561,562],"td",{},[563,564,565],"strong",{},"Create",[560,567,568],{},"Implicit per call",[560,570,571,574,575],{},[538,572,573],{},"createLogger({...})"," or ",[538,576,577],{},"createRequestLogger({...})",[560,579,580],{},"Auto on request start",[529,582,583,588,591,597],{},[560,584,585],{},[563,586,587],{},"Accumulate",[560,589,590],{},"N\u002FA (single call)",[560,592,593,596],{},[538,594,595],{},"log.set()"," multiple times",[560,598,599,601,602],{},[538,600,595],{}," via ",[538,603,604],{},"useLogger(event)",[529,606,607,612,615,621],{},[560,608,609],{},[563,610,611],{},"Emit",[560,613,614],{},"Immediate",[560,616,617,618],{},"Manual ",[538,619,620],{},"log.emit()",[560,622,623],{},"Auto on response end",[529,625,626,631,634,637],{},[560,627,628],{},[563,629,630],{},"Sample",[560,632,633],{},"Head sampling only",[560,635,636],{},"Head + tail sampling",[560,638,636],{},[529,640,641,646,649,651],{},[560,642,643],{},[563,644,645],{},"Enrich",[560,647,648],{},"Via global drain",[560,650,648],{},[560,652,653],{},"Via hooks or callbacks",[529,655,656,661,663,665],{},[560,657,658],{},[563,659,660],{},"Drain",[560,662,648],{},[560,664,648],{},[560,666,653],{},[511,668,669,670,675,676,679,680,547,683,547,686,547,689,692,693,698,699,704],{},"After ",[563,671,672],{},[538,673,674],{},"emit"," (including when sampling returns no output), the request logger is ",[563,677,678],{},"sealed",": later ",[538,681,682],{},"set",[538,684,685],{},"error",[538,687,688],{},"info",[538,690,691],{},"warn"," calls are ignored with a console warning. For background work that needs its own event, use ",[563,694,695],{},[538,696,697],{},"log.fork()"," where your integration supports it. See ",[700,701,703],"a",{"href":702},"\u002Flearn\u002Fwide-events#after-emit-sealing-and-background-work","Wide events — After emit",".",[518,706,708],{"id":707},"request-logging-step-by-step","Request Logging — Step by Step",[511,710,711],{},"For framework-managed request logging, every request walks the pipeline above. Each stage is detailed below.",[713,714,716],"h3",{"id":715},"_1-route-filtering","1. Route Filtering",[511,718,719,720,547,723,726],{},"When a request arrives, evlog checks whether the path matches the configured ",[538,721,722],{},"include",[538,724,725],{},"exclude"," patterns. If the route is excluded, no logger is created and the request proceeds without any logging overhead.",[511,728,729,730,732],{},"By default, all routes are logged. Use ",[538,731,722],{}," to restrict logging to specific patterns:",[734,735,741],"pre",{"className":736,"code":737,"filename":738,"language":739,"meta":740,"style":740},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","export default defineNuxtConfig({\n  modules: ['evlog\u002Fnuxt'],\n  evlog: {\n    include: ['\u002Fapi\u002F**'],\n  },\n})\n","nuxt.config.ts","typescript","",[538,742,743,767,795,806,827,833],{"__ignoreMap":740},[744,745,748,752,755,759,763],"span",{"class":746,"line":747},"line",1,[744,749,751],{"class":750},"s7zQu","export",[744,753,754],{"class":750}," default",[744,756,758],{"class":757},"s2Zo4"," defineNuxtConfig",[744,760,762],{"class":761},"sTEyZ","(",[744,764,766],{"class":765},"sMK4o","{\n",[744,768,770,774,777,780,783,787,789,792],{"class":746,"line":769},2,[744,771,773],{"class":772},"swJcz","  modules",[744,775,776],{"class":765},":",[744,778,779],{"class":761}," [",[744,781,782],{"class":765},"'",[744,784,786],{"class":785},"sfazB","evlog\u002Fnuxt",[744,788,782],{"class":765},[744,790,791],{"class":761},"]",[744,793,794],{"class":765},",\n",[744,796,798,801,803],{"class":746,"line":797},3,[744,799,800],{"class":772},"  evlog",[744,802,776],{"class":765},[744,804,805],{"class":765}," {\n",[744,807,809,812,814,816,818,821,823,825],{"class":746,"line":808},4,[744,810,811],{"class":772},"    include",[744,813,776],{"class":765},[744,815,779],{"class":761},[744,817,782],{"class":765},[744,819,820],{"class":785},"\u002Fapi\u002F**",[744,822,782],{"class":765},[744,824,791],{"class":761},[744,826,794],{"class":765},[744,828,830],{"class":746,"line":829},5,[744,831,832],{"class":765},"  },\n",[744,834,836,839],{"class":746,"line":835},6,[744,837,838],{"class":765},"}",[744,840,841],{"class":761},")\n",[713,843,845],{"id":844},"_2-logger-creation","2. Logger Creation",[511,847,848,849,852],{},"For matched routes, evlog creates a ",[538,850,851],{},"RequestLogger"," and attaches it to the request context. The logger is pre-populated with:",[523,854,855,865],{},[526,856,857],{},[529,858,859,862],{},[532,860,861],{},"Field",[532,863,864],{},"Source",[555,866,867,885,895,909],{},[529,868,869,874],{},[560,870,871],{},[538,872,873],{},"method",[560,875,876,877,880,881,884],{},"HTTP method (",[538,878,879],{},"GET",", ",[538,882,883],{},"POST",", ...)",[529,886,887,892],{},[560,888,889],{},[538,890,891],{},"path",[560,893,894],{},"Request path",[529,896,897,902],{},[560,898,899],{},[538,900,901],{},"requestId",[560,903,904,905,908],{},"Auto-generated UUID (or ",[538,906,907],{},"cf-ray"," on Cloudflare)",[529,910,911,916],{},[560,912,913],{},[538,914,915],{},"startTime",[560,917,918,921],{},[538,919,920],{},"Date.now()"," for duration calculation",[511,923,924,925,927],{},"The logger is stored on the event context. ",[538,926,604],{}," is a shortcut to retrieve it, it doesn't create a new logger.",[713,929,931],{"id":930},"_3-context-accumulation","3. Context Accumulation",[511,933,934,935,937],{},"During the handler, you call ",[538,936,595],{}," to attach context. Each call deep-merges into the existing context, so you can call it as many times as needed:",[734,939,942],{"className":736,"code":940,"filename":941,"language":739,"meta":740,"style":740},"import { useLogger } from 'evlog'\n\nconst log = useLogger(event)\n\nconst user = await getUser(event)\nlog.set({ user: { id: user.id, plan: user.plan } })\n\nconst cart = await getCart(user.id)\nlog.set({ cart: { items: cart.items.length, total: cart.total } })\n","server\u002Fapi\u002Fcheckout.post.ts",[538,943,944,970,976,993,997,1014,1067,1072,1095],{"__ignoreMap":740},[744,945,946,949,952,955,958,961,964,967],{"class":746,"line":747},[744,947,948],{"class":750},"import",[744,950,951],{"class":765}," {",[744,953,954],{"class":761}," useLogger",[744,956,957],{"class":765}," }",[744,959,960],{"class":750}," from",[744,962,963],{"class":765}," '",[744,965,966],{"class":785},"evlog",[744,968,969],{"class":765},"'\n",[744,971,972],{"class":746,"line":769},[744,973,975],{"emptyLinePlaceholder":974},true,"\n",[744,977,978,982,985,988,990],{"class":746,"line":797},[744,979,981],{"class":980},"spNyl","const",[744,983,984],{"class":761}," log ",[744,986,987],{"class":765},"=",[744,989,954],{"class":757},[744,991,992],{"class":761},"(event)\n",[744,994,995],{"class":746,"line":808},[744,996,975],{"emptyLinePlaceholder":974},[744,998,999,1001,1004,1006,1009,1012],{"class":746,"line":829},[744,1000,981],{"class":980},[744,1002,1003],{"class":761}," user ",[744,1005,987],{"class":765},[744,1007,1008],{"class":750}," await",[744,1010,1011],{"class":757}," getUser",[744,1013,992],{"class":761},[744,1015,1016,1018,1020,1022,1024,1027,1030,1032,1034,1037,1039,1041,1043,1046,1049,1052,1054,1056,1058,1061,1063,1065],{"class":746,"line":835},[744,1017,540],{"class":761},[744,1019,704],{"class":765},[744,1021,682],{"class":757},[744,1023,762],{"class":761},[744,1025,1026],{"class":765},"{",[744,1028,1029],{"class":772}," user",[744,1031,776],{"class":765},[744,1033,951],{"class":765},[744,1035,1036],{"class":772}," id",[744,1038,776],{"class":765},[744,1040,1029],{"class":761},[744,1042,704],{"class":765},[744,1044,1045],{"class":761},"id",[744,1047,1048],{"class":765},",",[744,1050,1051],{"class":772}," plan",[744,1053,776],{"class":765},[744,1055,1029],{"class":761},[744,1057,704],{"class":765},[744,1059,1060],{"class":761},"plan ",[744,1062,838],{"class":765},[744,1064,957],{"class":765},[744,1066,841],{"class":761},[744,1068,1070],{"class":746,"line":1069},7,[744,1071,975],{"emptyLinePlaceholder":974},[744,1073,1075,1077,1080,1082,1084,1087,1090,1092],{"class":746,"line":1074},8,[744,1076,981],{"class":980},[744,1078,1079],{"class":761}," cart ",[744,1081,987],{"class":765},[744,1083,1008],{"class":750},[744,1085,1086],{"class":757}," getCart",[744,1088,1089],{"class":761},"(user",[744,1091,704],{"class":765},[744,1093,1094],{"class":761},"id)\n",[744,1096,1098,1100,1102,1104,1106,1108,1111,1113,1115,1118,1120,1122,1124,1127,1129,1132,1134,1137,1139,1141,1143,1146,1148,1150],{"class":746,"line":1097},9,[744,1099,540],{"class":761},[744,1101,704],{"class":765},[744,1103,682],{"class":757},[744,1105,762],{"class":761},[744,1107,1026],{"class":765},[744,1109,1110],{"class":772}," cart",[744,1112,776],{"class":765},[744,1114,951],{"class":765},[744,1116,1117],{"class":772}," items",[744,1119,776],{"class":765},[744,1121,1110],{"class":761},[744,1123,704],{"class":765},[744,1125,1126],{"class":761},"items",[744,1128,704],{"class":765},[744,1130,1131],{"class":761},"length",[744,1133,1048],{"class":765},[744,1135,1136],{"class":772}," total",[744,1138,776],{"class":765},[744,1140,1110],{"class":761},[744,1142,704],{"class":765},[744,1144,1145],{"class":761},"total ",[744,1147,838],{"class":765},[744,1149,957],{"class":765},[744,1151,841],{"class":761},[511,1153,1154,1155,1157],{},"If an error is thrown, evlog's ",[538,1156,685],{}," hook captures it automatically and records it on the logger with the status code.",[713,1159,1161],{"id":1160},"_4-request-end","4. Request End",[511,1163,1164],{},"When the response is sent (or an error is thrown), evlog computes:",[1166,1167,1168,1182,1191],"ul",{},[1169,1170,1171,1174,1175,547,1178,1181],"li",{},[563,1172,1173],{},"Status code"," from the response (or from the error's ",[538,1176,1177],{},"status",[538,1179,1180],{},"statusCode",")",[1169,1183,1184,1187,1188],{},[563,1185,1186],{},"Duration"," from ",[538,1189,1190],{},"Date.now() - startTime",[1169,1192,1193,1196,1197,1199,1200,1202,1203],{},[563,1194,1195],{},"Level"," - ",[538,1198,685],{}," if an error was recorded, ",[538,1201,691],{}," if status >= 400, otherwise ",[538,1204,688],{},[511,1206,1207],{},"If an error triggered the emit, the request is marked as already emitted to prevent double-emission in the response hook.",[713,1209,1211,1212,1181],{"id":1210},"_5-tail-sampling-evlogemitkeep","5. Tail Sampling (",[538,1213,1214],{},"evlog:emit:keep",[511,1216,1217,1218,1221,1222,1226],{},"Before the event is sampled, evlog evaluates ",[563,1219,1220],{},"tail sampling"," rules. These run ",[1223,1224,1225],"em",{},"after"," the request completes, so they can inspect the outcome:",[734,1228,1230],{"className":736,"code":1229,"filename":738,"language":739,"meta":740,"style":740},"evlog: {\n  sampling: {\n    keep: [\n      { duration: 1000 },          \u002F\u002F slow requests\n      { status: 400 },             \u002F\u002F client\u002Fserver errors\n      { path: '\u002Fapi\u002Fcritical\u002F**' }, \u002F\u002F critical paths\n    ],\n  },\n}\n",[538,1231,1232,1241,1250,1260,1281,1298,1319,1326,1330],{"__ignoreMap":740},[744,1233,1234,1237,1239],{"class":746,"line":747},[744,1235,966],{"class":1236},"sBMFI",[744,1238,776],{"class":765},[744,1240,805],{"class":765},[744,1242,1243,1246,1248],{"class":746,"line":769},[744,1244,1245],{"class":1236},"  sampling",[744,1247,776],{"class":765},[744,1249,805],{"class":765},[744,1251,1252,1255,1257],{"class":746,"line":797},[744,1253,1254],{"class":1236},"    keep",[744,1256,776],{"class":765},[744,1258,1259],{"class":772}," [\n",[744,1261,1262,1265,1268,1270,1274,1277],{"class":746,"line":808},[744,1263,1264],{"class":765},"      {",[744,1266,1267],{"class":772}," duration",[744,1269,776],{"class":765},[744,1271,1273],{"class":1272},"sbssI"," 1000",[744,1275,1276],{"class":765}," },",[744,1278,1280],{"class":1279},"sHwdD","          \u002F\u002F slow requests\n",[744,1282,1283,1285,1288,1290,1293,1295],{"class":746,"line":829},[744,1284,1264],{"class":765},[744,1286,1287],{"class":772}," status",[744,1289,776],{"class":765},[744,1291,1292],{"class":1272}," 400",[744,1294,1276],{"class":765},[744,1296,1297],{"class":1279},"             \u002F\u002F client\u002Fserver errors\n",[744,1299,1300,1302,1305,1307,1309,1312,1314,1316],{"class":746,"line":835},[744,1301,1264],{"class":765},[744,1303,1304],{"class":772}," path",[744,1306,776],{"class":765},[744,1308,963],{"class":765},[744,1310,1311],{"class":785},"\u002Fapi\u002Fcritical\u002F**",[744,1313,782],{"class":765},[744,1315,1276],{"class":765},[744,1317,1318],{"class":1279}," \u002F\u002F critical paths\n",[744,1320,1321,1324],{"class":746,"line":1069},[744,1322,1323],{"class":772},"    ]",[744,1325,794],{"class":765},[744,1327,1328],{"class":746,"line":1074},[744,1329,832],{"class":765},[744,1331,1332],{"class":746,"line":1097},[744,1333,1334],{"class":765},"}\n",[511,1336,1337,1338,1340],{},"The ",[538,1339,1214],{}," hook also fires, letting you force-keep based on custom business logic:",[734,1342,1345],{"className":736,"code":1343,"filename":1344,"language":739,"meta":740,"style":740},"export default defineNitroPlugin((nitroApp) => {\n  nitroApp.hooks.hook('evlog:emit:keep', (ctx) => {\n    if (ctx.context.user?.premium) {\n      ctx.shouldKeep = true\n    }\n  })\n})\n","server\u002Fplugins\u002Fevlog-custom.ts",[538,1346,1347,1371,1408,1438,1455,1460,1467],{"__ignoreMap":740},[744,1348,1349,1351,1353,1356,1358,1360,1364,1366,1369],{"class":746,"line":747},[744,1350,751],{"class":750},[744,1352,754],{"class":750},[744,1354,1355],{"class":757}," defineNitroPlugin",[744,1357,762],{"class":761},[744,1359,762],{"class":765},[744,1361,1363],{"class":1362},"sHdIc","nitroApp",[744,1365,1181],{"class":765},[744,1367,1368],{"class":980}," =>",[744,1370,805],{"class":765},[744,1372,1373,1376,1378,1381,1383,1386,1388,1390,1392,1394,1396,1399,1402,1404,1406],{"class":746,"line":769},[744,1374,1375],{"class":761},"  nitroApp",[744,1377,704],{"class":765},[744,1379,1380],{"class":761},"hooks",[744,1382,704],{"class":765},[744,1384,1385],{"class":757},"hook",[744,1387,762],{"class":772},[744,1389,782],{"class":765},[744,1391,1214],{"class":785},[744,1393,782],{"class":765},[744,1395,1048],{"class":765},[744,1397,1398],{"class":765}," (",[744,1400,1401],{"class":1362},"ctx",[744,1403,1181],{"class":765},[744,1405,1368],{"class":980},[744,1407,805],{"class":765},[744,1409,1410,1413,1415,1417,1419,1422,1424,1427,1430,1433,1436],{"class":746,"line":797},[744,1411,1412],{"class":750},"    if",[744,1414,1398],{"class":772},[744,1416,1401],{"class":761},[744,1418,704],{"class":765},[744,1420,1421],{"class":761},"context",[744,1423,704],{"class":765},[744,1425,1426],{"class":761},"user",[744,1428,1429],{"class":765},"?.",[744,1431,1432],{"class":761},"premium",[744,1434,1435],{"class":772},") ",[744,1437,766],{"class":765},[744,1439,1440,1443,1445,1448,1451],{"class":746,"line":808},[744,1441,1442],{"class":761},"      ctx",[744,1444,704],{"class":765},[744,1446,1447],{"class":761},"shouldKeep",[744,1449,1450],{"class":765}," =",[744,1452,1454],{"class":1453},"sfNiH"," true\n",[744,1456,1457],{"class":746,"line":829},[744,1458,1459],{"class":765},"    }\n",[744,1461,1462,1465],{"class":746,"line":835},[744,1463,1464],{"class":765},"  }",[744,1466,841],{"class":772},[744,1468,1469,1471],{"class":746,"line":1069},[744,1470,838],{"class":765},[744,1472,841],{"class":761},[511,1474,1475,1476,1479,1480,704],{},"If any rule or hook sets ",[538,1477,1478],{},"shouldKeep = true",", the event ",[563,1481,1482],{},"bypasses head sampling entirely",[713,1484,1486],{"id":1485},"_6-head-sampling","6. Head Sampling",[511,1488,1489],{},"If the event wasn't force-kept by tail sampling, head sampling applies. This is a random coin flip per log level.",[511,1491,1492,1493,1496],{},"By default, all levels are kept at 100% (no sampling). Configure ",[538,1494,1495],{},"sampling.rates"," to reduce volume in production:",[734,1498,1500],{"className":736,"code":1499,"filename":738,"language":739,"meta":740,"style":740},"evlog: {\n  sampling: {\n    rates: { info: 10, warn: 50, debug: 0 },\n  },\n}\n",[538,1501,1502,1510,1518,1558,1562],{"__ignoreMap":740},[744,1503,1504,1506,1508],{"class":746,"line":747},[744,1505,966],{"class":1236},[744,1507,776],{"class":765},[744,1509,805],{"class":765},[744,1511,1512,1514,1516],{"class":746,"line":769},[744,1513,1245],{"class":1236},[744,1515,776],{"class":765},[744,1517,805],{"class":765},[744,1519,1520,1523,1525,1527,1530,1532,1535,1537,1540,1542,1545,1547,1550,1552,1555],{"class":746,"line":797},[744,1521,1522],{"class":1236},"    rates",[744,1524,776],{"class":765},[744,1526,951],{"class":765},[744,1528,1529],{"class":1236}," info",[744,1531,776],{"class":765},[744,1533,1534],{"class":1272}," 10",[744,1536,1048],{"class":765},[744,1538,1539],{"class":1236}," warn",[744,1541,776],{"class":765},[744,1543,1544],{"class":1272}," 50",[744,1546,1048],{"class":765},[744,1548,1549],{"class":1236}," debug",[744,1551,776],{"class":765},[744,1553,1554],{"class":1272}," 0",[744,1556,1557],{"class":765}," },\n",[744,1559,1560],{"class":746,"line":808},[744,1561,832],{"class":765},[744,1563,1564],{"class":746,"line":829},[744,1565,1334],{"class":765},[1166,1567,1568,1574,1580],{},[1169,1569,1570,1573],{},[538,1571,1572],{},"info: 10"," - keep 10% of info-level events",[1169,1575,1576,1579],{},[538,1577,1578],{},"warn: 50"," - keep 50% of warnings",[1169,1581,1582,1584,1585,1588],{},[538,1583,685],{}," defaults to ",[563,1586,1587],{},"100%"," (never sampled out, even if you set a rate)",[511,1590,1591],{},"If the event is sampled out, processing stops entirely: no console output, no enrichment, no drain.",[713,1593,1595],{"id":1594},"_7-emit","7. Emit",[511,1597,1337,1598,1601],{},[538,1599,1600],{},"WideEvent"," object is built from the accumulated context:",[734,1603,1607],{"className":1604,"code":1605,"filename":1600,"language":1606,"meta":740,"style":740},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"timestamp\": \"2026-01-15T10:30:00.000Z\",\n  \"level\": \"info\",\n  \"service\": \"my-app\",\n  \"method\": \"POST\",\n  \"path\": \"\u002Fapi\u002Fcheckout\",\n  \"requestId\": \"abc-123\",\n  \"duration\": 234,\n  \"status\": 200,\n  \"user\": { \"id\": 1, \"plan\": \"pro\" },\n  \"cart\": { \"items\": 3, \"total\": 9999 }\n}\n","json",[538,1608,1609,1613,1636,1655,1675,1693,1712,1731,1747,1762,1806,1848],{"__ignoreMap":740},[744,1610,1611],{"class":746,"line":747},[744,1612,766],{"class":765},[744,1614,1615,1618,1621,1624,1626,1629,1632,1634],{"class":746,"line":769},[744,1616,1617],{"class":765},"  \"",[744,1619,1620],{"class":980},"timestamp",[744,1622,1623],{"class":765},"\"",[744,1625,776],{"class":765},[744,1627,1628],{"class":765}," \"",[744,1630,1631],{"class":785},"2026-01-15T10:30:00.000Z",[744,1633,1623],{"class":765},[744,1635,794],{"class":765},[744,1637,1638,1640,1643,1645,1647,1649,1651,1653],{"class":746,"line":797},[744,1639,1617],{"class":765},[744,1641,1642],{"class":980},"level",[744,1644,1623],{"class":765},[744,1646,776],{"class":765},[744,1648,1628],{"class":765},[744,1650,688],{"class":785},[744,1652,1623],{"class":765},[744,1654,794],{"class":765},[744,1656,1657,1659,1662,1664,1666,1668,1671,1673],{"class":746,"line":808},[744,1658,1617],{"class":765},[744,1660,1661],{"class":980},"service",[744,1663,1623],{"class":765},[744,1665,776],{"class":765},[744,1667,1628],{"class":765},[744,1669,1670],{"class":785},"my-app",[744,1672,1623],{"class":765},[744,1674,794],{"class":765},[744,1676,1677,1679,1681,1683,1685,1687,1689,1691],{"class":746,"line":829},[744,1678,1617],{"class":765},[744,1680,873],{"class":980},[744,1682,1623],{"class":765},[744,1684,776],{"class":765},[744,1686,1628],{"class":765},[744,1688,883],{"class":785},[744,1690,1623],{"class":765},[744,1692,794],{"class":765},[744,1694,1695,1697,1699,1701,1703,1705,1708,1710],{"class":746,"line":835},[744,1696,1617],{"class":765},[744,1698,891],{"class":980},[744,1700,1623],{"class":765},[744,1702,776],{"class":765},[744,1704,1628],{"class":765},[744,1706,1707],{"class":785},"\u002Fapi\u002Fcheckout",[744,1709,1623],{"class":765},[744,1711,794],{"class":765},[744,1713,1714,1716,1718,1720,1722,1724,1727,1729],{"class":746,"line":1069},[744,1715,1617],{"class":765},[744,1717,901],{"class":980},[744,1719,1623],{"class":765},[744,1721,776],{"class":765},[744,1723,1628],{"class":765},[744,1725,1726],{"class":785},"abc-123",[744,1728,1623],{"class":765},[744,1730,794],{"class":765},[744,1732,1733,1735,1738,1740,1742,1745],{"class":746,"line":1074},[744,1734,1617],{"class":765},[744,1736,1737],{"class":980},"duration",[744,1739,1623],{"class":765},[744,1741,776],{"class":765},[744,1743,1744],{"class":1272}," 234",[744,1746,794],{"class":765},[744,1748,1749,1751,1753,1755,1757,1760],{"class":746,"line":1097},[744,1750,1617],{"class":765},[744,1752,1177],{"class":980},[744,1754,1623],{"class":765},[744,1756,776],{"class":765},[744,1758,1759],{"class":1272}," 200",[744,1761,794],{"class":765},[744,1763,1765,1767,1769,1771,1773,1775,1777,1779,1781,1783,1786,1788,1790,1793,1795,1797,1799,1802,1804],{"class":746,"line":1764},10,[744,1766,1617],{"class":765},[744,1768,1426],{"class":980},[744,1770,1623],{"class":765},[744,1772,776],{"class":765},[744,1774,951],{"class":765},[744,1776,1628],{"class":765},[744,1778,1045],{"class":1236},[744,1780,1623],{"class":765},[744,1782,776],{"class":765},[744,1784,1785],{"class":1272}," 1",[744,1787,1048],{"class":765},[744,1789,1628],{"class":765},[744,1791,1792],{"class":1236},"plan",[744,1794,1623],{"class":765},[744,1796,776],{"class":765},[744,1798,1628],{"class":765},[744,1800,1801],{"class":785},"pro",[744,1803,1623],{"class":765},[744,1805,1557],{"class":765},[744,1807,1809,1811,1814,1816,1818,1820,1822,1824,1826,1828,1831,1833,1835,1838,1840,1842,1845],{"class":746,"line":1808},11,[744,1810,1617],{"class":765},[744,1812,1813],{"class":980},"cart",[744,1815,1623],{"class":765},[744,1817,776],{"class":765},[744,1819,951],{"class":765},[744,1821,1628],{"class":765},[744,1823,1126],{"class":1236},[744,1825,1623],{"class":765},[744,1827,776],{"class":765},[744,1829,1830],{"class":1272}," 3",[744,1832,1048],{"class":765},[744,1834,1628],{"class":765},[744,1836,1837],{"class":1236},"total",[744,1839,1623],{"class":765},[744,1841,776],{"class":765},[744,1843,1844],{"class":1272}," 9999",[744,1846,1847],{"class":765}," }\n",[744,1849,1851],{"class":746,"line":1850},12,[744,1852,1334],{"class":765},[511,1854,1855],{},"The event is printed to the console, pretty-formatted in development and as JSON in production. This is the default behavior, no configuration needed.",[713,1857,1859,1860,1181],{"id":1858},"_8-enrich-evlogenrich","8. Enrich (",[538,1861,1862],{},"evlog:enrich",[511,1864,1865],{},"After emission, enrichers add derived context to the event. Built-in enrichers extract data from request headers:",[523,1867,1868,1880],{},[526,1869,1870],{},[529,1871,1872,1875,1878],{},[532,1873,1874],{},"Enricher",[532,1876,1877],{},"Adds",[532,1879,864],{},[555,1881,1882,1899,1913,1930],{},[529,1883,1884,1887,1893],{},[560,1885,1886],{},"User Agent",[560,1888,1889,1892],{},[538,1890,1891],{},"userAgent"," (browser, OS, device)",[560,1894,1895,1898],{},[538,1896,1897],{},"User-Agent"," header",[529,1900,1901,1904,1910],{},[560,1902,1903],{},"Geo",[560,1905,1906,1909],{},[538,1907,1908],{},"geo"," (country, region, city)",[560,1911,1912],{},"Platform headers (Vercel, Cloudflare)",[529,1914,1915,1918,1924],{},[560,1916,1917],{},"Request Size",[560,1919,1920,1923],{},[538,1921,1922],{},"requestSize"," (request\u002Fresponse bytes)",[560,1925,1926,1929],{},[538,1927,1928],{},"Content-Length"," headers",[529,1931,1932,1935,1941],{},[560,1933,1934],{},"Trace Context",[560,1936,1937,1940],{},[538,1938,1939],{},"traceContext"," (traceId, spanId)",[560,1942,1943,1898],{},[538,1944,1945],{},"traceparent",[734,1947,1950],{"className":736,"code":1948,"filename":1949,"language":739,"meta":740,"style":740},"import { createUserAgentEnricher, createGeoEnricher } from 'evlog\u002Fenrichers'\n\nexport default defineNitroPlugin((nitroApp) => {\n  const enrichers = [createUserAgentEnricher(), createGeoEnricher()]\n\n  nitroApp.hooks.hook('evlog:enrich', (ctx) => {\n    for (const enricher of enrichers) enricher(ctx)\n  })\n})\n","server\u002Fplugins\u002Fevlog-enrich.ts",[538,1951,1952,1977,1981,2001,2026,2030,2062,2090,2096],{"__ignoreMap":740},[744,1953,1954,1956,1958,1961,1963,1966,1968,1970,1972,1975],{"class":746,"line":747},[744,1955,948],{"class":750},[744,1957,951],{"class":765},[744,1959,1960],{"class":761}," createUserAgentEnricher",[744,1962,1048],{"class":765},[744,1964,1965],{"class":761}," createGeoEnricher",[744,1967,957],{"class":765},[744,1969,960],{"class":750},[744,1971,963],{"class":765},[744,1973,1974],{"class":785},"evlog\u002Fenrichers",[744,1976,969],{"class":765},[744,1978,1979],{"class":746,"line":769},[744,1980,975],{"emptyLinePlaceholder":974},[744,1982,1983,1985,1987,1989,1991,1993,1995,1997,1999],{"class":746,"line":797},[744,1984,751],{"class":750},[744,1986,754],{"class":750},[744,1988,1355],{"class":757},[744,1990,762],{"class":761},[744,1992,762],{"class":765},[744,1994,1363],{"class":1362},[744,1996,1181],{"class":765},[744,1998,1368],{"class":980},[744,2000,805],{"class":765},[744,2002,2003,2006,2009,2011,2013,2016,2019,2021,2023],{"class":746,"line":808},[744,2004,2005],{"class":980},"  const",[744,2007,2008],{"class":761}," enrichers",[744,2010,1450],{"class":765},[744,2012,779],{"class":772},[744,2014,2015],{"class":757},"createUserAgentEnricher",[744,2017,2018],{"class":772},"()",[744,2020,1048],{"class":765},[744,2022,1965],{"class":757},[744,2024,2025],{"class":772},"()]\n",[744,2027,2028],{"class":746,"line":829},[744,2029,975],{"emptyLinePlaceholder":974},[744,2031,2032,2034,2036,2038,2040,2042,2044,2046,2048,2050,2052,2054,2056,2058,2060],{"class":746,"line":835},[744,2033,1375],{"class":761},[744,2035,704],{"class":765},[744,2037,1380],{"class":761},[744,2039,704],{"class":765},[744,2041,1385],{"class":757},[744,2043,762],{"class":772},[744,2045,782],{"class":765},[744,2047,1862],{"class":785},[744,2049,782],{"class":765},[744,2051,1048],{"class":765},[744,2053,1398],{"class":765},[744,2055,1401],{"class":1362},[744,2057,1181],{"class":765},[744,2059,1368],{"class":980},[744,2061,805],{"class":765},[744,2063,2064,2067,2069,2071,2074,2077,2079,2081,2084,2086,2088],{"class":746,"line":1069},[744,2065,2066],{"class":750},"    for",[744,2068,1398],{"class":772},[744,2070,981],{"class":980},[744,2072,2073],{"class":761}," enricher",[744,2075,2076],{"class":765}," of",[744,2078,2008],{"class":761},[744,2080,1435],{"class":772},[744,2082,2083],{"class":757},"enricher",[744,2085,762],{"class":772},[744,2087,1401],{"class":761},[744,2089,841],{"class":772},[744,2091,2092,2094],{"class":746,"line":1074},[744,2093,1464],{"class":765},[744,2095,841],{"class":772},[744,2097,2098,2100],{"class":746,"line":1097},[744,2099,838],{"class":765},[744,2101,841],{"class":761},[511,2103,2104,2105,2108],{},"Enrichers receive the full ",[538,2106,2107],{},"EnrichContext"," with the mutable event, request metadata, safe headers, and response info.",[713,2110,2112,2113,1181],{"id":2111},"_9-drain-evlogdrain","9. Drain (",[538,2114,2115],{},"evlog:drain",[511,2117,2118,2119,2121,2122,2125],{},"The final step sends the enriched event to your observability platform. The ",[538,2120,2115],{}," hook receives a ",[538,2123,2124],{},"DrainContext"," with the complete event:",[734,2127,2130],{"className":736,"code":2128,"filename":2129,"language":739,"meta":740,"style":740},"import { createAxiomDrain } from 'evlog\u002Faxiom'\n\nexport default defineNitroPlugin((nitroApp) => {\n  nitroApp.hooks.hook('evlog:drain', createAxiomDrain())\n})\n","server\u002Fplugins\u002Fevlog-drain.ts",[538,2131,2132,2152,2156,2176,2203],{"__ignoreMap":740},[744,2133,2134,2136,2138,2141,2143,2145,2147,2150],{"class":746,"line":747},[744,2135,948],{"class":750},[744,2137,951],{"class":765},[744,2139,2140],{"class":761}," createAxiomDrain",[744,2142,957],{"class":765},[744,2144,960],{"class":750},[744,2146,963],{"class":765},[744,2148,2149],{"class":785},"evlog\u002Faxiom",[744,2151,969],{"class":765},[744,2153,2154],{"class":746,"line":769},[744,2155,975],{"emptyLinePlaceholder":974},[744,2157,2158,2160,2162,2164,2166,2168,2170,2172,2174],{"class":746,"line":797},[744,2159,751],{"class":750},[744,2161,754],{"class":750},[744,2163,1355],{"class":757},[744,2165,762],{"class":761},[744,2167,762],{"class":765},[744,2169,1363],{"class":1362},[744,2171,1181],{"class":765},[744,2173,1368],{"class":980},[744,2175,805],{"class":765},[744,2177,2178,2180,2182,2184,2186,2188,2190,2192,2194,2196,2198,2200],{"class":746,"line":808},[744,2179,1375],{"class":761},[744,2181,704],{"class":765},[744,2183,1380],{"class":761},[744,2185,704],{"class":765},[744,2187,1385],{"class":757},[744,2189,762],{"class":772},[744,2191,782],{"class":765},[744,2193,2115],{"class":785},[744,2195,782],{"class":765},[744,2197,1048],{"class":765},[744,2199,2140],{"class":757},[744,2201,2202],{"class":772},"())\n",[744,2204,2205,2207],{"class":746,"line":829},[744,2206,838],{"class":765},[744,2208,841],{"class":761},[511,2210,2211,2212,2215],{},"On platforms with ",[538,2213,2214],{},"waitUntil"," (Cloudflare Workers, Vercel Edge), the drain runs after the response is sent to avoid adding latency. On traditional servers, the drain is awaited to prevent losing events in serverless cold shutdowns.",[518,2217,2219],{"id":2218},"hook-execution-order","Hook Execution Order",[523,2221,2222,2238],{},[526,2223,2224],{},[529,2225,2226,2229,2232,2235],{},[532,2227,2228],{},"Order",[532,2230,2231],{},"Hook",[532,2233,2234],{},"When",[532,2236,2237],{},"Purpose",[555,2239,2240,2255,2270],{},[529,2241,2242,2245,2249,2252],{},[560,2243,2244],{},"1",[560,2246,2247],{},[538,2248,1214],{},[560,2250,2251],{},"After request ends, before sampling",[560,2253,2254],{},"Force-keep events based on outcome",[529,2256,2257,2260,2264,2267],{},[560,2258,2259],{},"2",[560,2261,2262],{},[538,2263,1862],{},[560,2265,2266],{},"After emit, before drain",[560,2268,2269],{},"Add derived context to the event",[529,2271,2272,2275,2279,2282],{},[560,2273,2274],{},"3",[560,2276,2277],{},[538,2278,2115],{},[560,2280,2281],{},"After enrichment",[560,2283,2284],{},"Send event to external services",[518,2286,2288],{"id":2287},"error-vs-success-path","Error vs Success Path",[511,2290,2291,2292,2295],{},"Both paths converge at the same emit\u002Fenrich\u002Fdrain pipeline. The only difference is ",[1223,2293,2294],{},"when"," the emit is triggered:",[523,2297,2298,2310],{},[526,2299,2300],{},[529,2301,2302,2304,2307],{},[532,2303],{},[532,2305,2306],{},"Success",[532,2308,2309],{},"Error",[555,2311,2312,2332,2350,2366,2387],{},[529,2313,2314,2319,2328],{},[560,2315,2316],{},[563,2317,2318],{},"Trigger",[560,2320,2321,547,2324,2327],{},[538,2322,2323],{},"afterResponse",[538,2325,2326],{},"response"," hook",[560,2329,2330,2327],{},[538,2331,685],{},[529,2333,2334,2338,2346],{},[560,2335,2336],{},[563,2337,1195],{},[560,2339,2340,2342,2343,2345],{},[538,2341,688],{}," (or ",[538,2344,691],{}," if status >= 400)",[560,2347,2348],{},[538,2349,685],{},[529,2351,2352,2357,2360],{},[560,2353,2354],{},[563,2355,2356],{},"Status",[560,2358,2359],{},"From response",[560,2361,2362,2363,2365],{},"From error's ",[538,2364,1177],{}," field (default 500)",[529,2367,2368,2373,2376],{},[560,2369,2370],{},[563,2371,2372],{},"Error context",[560,2374,2375],{},"None",[560,2377,2378,2380,2381,880,2384],{},[538,2379,685],{}," field with message, stack, ",[538,2382,2383],{},"why",[538,2385,2386],{},"fix",[529,2388,2389,2394,2401],{},[560,2390,2391],{},[563,2392,2393],{},"Double-emit guard",[560,2395,2396,2397,2400],{},"Checks ",[538,2398,2399],{},"_evlogEmitted"," flag",[560,2402,2403,2404],{},"Sets ",[538,2405,2406],{},"_evlogEmitted = true",[518,2408,2410],{"id":2409},"simple-logging-pipeline","Simple Logging Pipeline",[511,2412,2413,2414,2416],{},"When using the ",[538,2415,540],{}," singleton, the pipeline is shorter:",[2418,2419,2420,2432,2437],"ol",{},[1169,2421,2422,2425,2426,574,2429],{},[563,2423,2424],{},"Call",": ",[538,2427,2428],{},"log.info({ action: 'deploy' })",[538,2430,2431],{},"log.info('tag', 'message')",[1169,2433,2434,2436],{},[563,2435,611],{},": The event is built and printed immediately",[1169,2438,2439,2441,2442,2445,2446,2449],{},[563,2440,660],{},": If a global ",[538,2443,2444],{},"drain"," was configured via ",[538,2447,2448],{},"initLogger()",", the event is sent to external services",[511,2451,2452,2453,2455,2456,2459],{},"Tagged logs (",[538,2454,2431],{},") are console-only in pretty mode. Object-form logs (",[538,2457,2458],{},"log.info({ ... })",") always flow through the drain pipeline.",[518,2461,2463],{"id":2462},"standalone-wide-event-pipeline","Standalone Wide Event Pipeline",[511,2465,2466,2467,2470],{},"When using ",[538,2468,2469],{},"createLogger()"," outside a framework:",[2418,2472,2473,2480,2496,2504,2512],{},[1169,2474,2475,2425,2477],{},[563,2476,565],{},[538,2478,2479],{},"createLogger({ jobId: 'sync-001' })",[1169,2481,2482,2425,2484,880,2486,880,2489,880,2492,2495],{},[563,2483,587],{},[538,2485,595],{},[538,2487,2488],{},"log.info()",[538,2490,2491],{},"log.warn()",[538,2493,2494],{},"log.error()"," over the operation",[1169,2497,2498,2500,2501,2503],{},[563,2499,611],{},": Manual ",[538,2502,620],{}," call",[1169,2505,2506,2508,2509],{},[563,2507,630],{},": Head sampling applies based on computed level. Tail sampling via ",[538,2510,2511],{},"initLogger({ sampling: { keep: [...] } })",[1169,2513,2514,2441,2516,2518],{},[563,2515,660],{},[538,2517,2444],{}," was configured, the event is sent",[734,2520,2523],{"className":736,"code":2521,"filename":2522,"language":739,"meta":740,"style":740},"import { initLogger, createLogger } from 'evlog'\nimport { createAxiomDrain } from 'evlog\u002Faxiom'\n\ninitLogger({\n  env: { service: 'worker' },\n  drain: createAxiomDrain(),\n  sampling: { rates: { info: 10 } },\n})\n\nconst log = createLogger({ task: 'migrate' })\nlog.set({ records: 500, status: 'complete' })\nlog.emit()\n","scripts\u002Fmigrate.ts",[538,2524,2525,2549,2567,2571,2580,2603,2616,2641,2647,2651,2681,2718],{"__ignoreMap":740},[744,2526,2527,2529,2531,2534,2536,2539,2541,2543,2545,2547],{"class":746,"line":747},[744,2528,948],{"class":750},[744,2530,951],{"class":765},[744,2532,2533],{"class":761}," initLogger",[744,2535,1048],{"class":765},[744,2537,2538],{"class":761}," createLogger",[744,2540,957],{"class":765},[744,2542,960],{"class":750},[744,2544,963],{"class":765},[744,2546,966],{"class":785},[744,2548,969],{"class":765},[744,2550,2551,2553,2555,2557,2559,2561,2563,2565],{"class":746,"line":769},[744,2552,948],{"class":750},[744,2554,951],{"class":765},[744,2556,2140],{"class":761},[744,2558,957],{"class":765},[744,2560,960],{"class":750},[744,2562,963],{"class":765},[744,2564,2149],{"class":785},[744,2566,969],{"class":765},[744,2568,2569],{"class":746,"line":797},[744,2570,975],{"emptyLinePlaceholder":974},[744,2572,2573,2576,2578],{"class":746,"line":808},[744,2574,2575],{"class":757},"initLogger",[744,2577,762],{"class":761},[744,2579,766],{"class":765},[744,2581,2582,2585,2587,2589,2592,2594,2596,2599,2601],{"class":746,"line":829},[744,2583,2584],{"class":772},"  env",[744,2586,776],{"class":765},[744,2588,951],{"class":765},[744,2590,2591],{"class":772}," service",[744,2593,776],{"class":765},[744,2595,963],{"class":765},[744,2597,2598],{"class":785},"worker",[744,2600,782],{"class":765},[744,2602,1557],{"class":765},[744,2604,2605,2608,2610,2612,2614],{"class":746,"line":835},[744,2606,2607],{"class":772},"  drain",[744,2609,776],{"class":765},[744,2611,2140],{"class":757},[744,2613,2018],{"class":761},[744,2615,794],{"class":765},[744,2617,2618,2620,2622,2624,2627,2629,2631,2633,2635,2637,2639],{"class":746,"line":1069},[744,2619,1245],{"class":772},[744,2621,776],{"class":765},[744,2623,951],{"class":765},[744,2625,2626],{"class":772}," rates",[744,2628,776],{"class":765},[744,2630,951],{"class":765},[744,2632,1529],{"class":772},[744,2634,776],{"class":765},[744,2636,1534],{"class":1272},[744,2638,957],{"class":765},[744,2640,1557],{"class":765},[744,2642,2643,2645],{"class":746,"line":1074},[744,2644,838],{"class":765},[744,2646,841],{"class":761},[744,2648,2649],{"class":746,"line":1097},[744,2650,975],{"emptyLinePlaceholder":974},[744,2652,2653,2655,2657,2659,2661,2663,2665,2668,2670,2672,2675,2677,2679],{"class":746,"line":1764},[744,2654,981],{"class":980},[744,2656,984],{"class":761},[744,2658,987],{"class":765},[744,2660,2538],{"class":757},[744,2662,762],{"class":761},[744,2664,1026],{"class":765},[744,2666,2667],{"class":772}," task",[744,2669,776],{"class":765},[744,2671,963],{"class":765},[744,2673,2674],{"class":785},"migrate",[744,2676,782],{"class":765},[744,2678,957],{"class":765},[744,2680,841],{"class":761},[744,2682,2683,2685,2687,2689,2691,2693,2696,2698,2701,2703,2705,2707,2709,2712,2714,2716],{"class":746,"line":1808},[744,2684,540],{"class":761},[744,2686,704],{"class":765},[744,2688,682],{"class":757},[744,2690,762],{"class":761},[744,2692,1026],{"class":765},[744,2694,2695],{"class":772}," records",[744,2697,776],{"class":765},[744,2699,2700],{"class":1272}," 500",[744,2702,1048],{"class":765},[744,2704,1287],{"class":772},[744,2706,776],{"class":765},[744,2708,963],{"class":765},[744,2710,2711],{"class":785},"complete",[744,2713,782],{"class":765},[744,2715,957],{"class":765},[744,2717,841],{"class":761},[744,2719,2720,2722,2724,2726],{"class":746,"line":1850},[744,2721,540],{"class":761},[744,2723,704],{"class":765},[744,2725,674],{"class":757},[744,2727,2728],{"class":761},"()\n",[518,2730,2732],{"id":2731},"next-steps","Next Steps",[1166,2734,2735,2740,2745,2750],{},[1169,2736,2737,2739],{},[700,2738,46],{"href":47}," - Design effective wide events",[1169,2741,2742,2744],{},[700,2743,61],{"href":62}," - Configure head and tail sampling",[1169,2746,2747,2749],{},[700,2748,133],{"href":138}," - Send events to external platforms",[1169,2751,2752,2754],{},[700,2753,411],{"href":412}," - Add derived context automatically",[2756,2757,2758],"style",{},"html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}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 .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}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 .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}",{"title":740,"searchDepth":769,"depth":769,"links":2760},[2761,2762,2776,2777,2778,2779,2780],{"id":520,"depth":769,"text":521},{"id":707,"depth":769,"text":708,"children":2763},[2764,2765,2766,2767,2768,2770,2771,2772,2774],{"id":715,"depth":797,"text":716},{"id":844,"depth":797,"text":845},{"id":930,"depth":797,"text":931},{"id":1160,"depth":797,"text":1161},{"id":1210,"depth":797,"text":2769},"5. Tail Sampling (evlog:emit:keep)",{"id":1485,"depth":797,"text":1486},{"id":1594,"depth":797,"text":1595},{"id":1858,"depth":797,"text":2773},"8. Enrich (evlog:enrich)",{"id":2111,"depth":797,"text":2775},"9. Drain (evlog:drain)",{"id":2218,"depth":769,"text":2219},{"id":2287,"depth":769,"text":2288},{"id":2409,"depth":769,"text":2410},{"id":2462,"depth":769,"text":2463},{"id":2731,"depth":769,"text":2732},"Understand the full lifecycle of an evlog event, from creation to drain. Covers all three modes (simple logging, wide events, request logging), sampling, enrichment, and delivery.","md",[2784,2787],{"label":46,"icon":49,"to":47,"color":2785,"variant":2786},"neutral","subtle",{"label":61,"icon":64,"to":62,"color":2785,"variant":2786},{},{"icon":59},{"title":56,"description":2781},"Yu3uJNclfj3HKmHL5fS-JpUiecOufCrl18HGVzijylE",[2793,2795],{"title":51,"path":52,"stem":53,"description":2794,"icon":54,"children":-1},"Create errors that explain why they occurred and how to fix them. Add actionable context with why, fix, and link fields for humans and AI agents.",{"title":61,"path":62,"stem":63,"description":2796,"icon":64,"children":-1},"Control log volume with two-tier sampling. Head sampling drops noise by level, tail sampling rescues critical events based on outcome. Never miss errors, slow requests, or critical paths.",1785230280465]