[{"data":1,"prerenderedAt":2185},["ShallowReactive",2],{"navigation_docs":3,"-frameworks-custom-integration":276,"-frameworks-custom-integration-surround":2180},[4,30,65,105,187,246,262],{"title":5,"path":6,"stem":7,"children":8,"page":29},"Getting Started","\u002Fgetting-started","1.getting-started",[9,14,19,24],{"title":10,"path":11,"stem":12,"icon":13},"Introduction","\u002Fgetting-started\u002Fintroduction","1.getting-started\u002F1.introduction","i-lucide-info",{"title":15,"path":16,"stem":17,"icon":18},"Installation","\u002Fgetting-started\u002Finstallation","1.getting-started\u002F2.installation","i-lucide-download",{"title":20,"path":21,"stem":22,"icon":23},"Quick Start","\u002Fgetting-started\u002Fquick-start","1.getting-started\u002F3.quick-start","i-lucide-zap",{"title":25,"path":26,"stem":27,"icon":28},"Agent Skills","\u002Fgetting-started\u002Fagent-skills","1.getting-started\u002F4.agent-skills","i-lucide-sparkles",false,{"title":31,"path":32,"stem":33,"children":34,"page":29},"Logging","\u002Flogging","2.logging",[35,40,45,50,55,60],{"title":36,"path":37,"stem":38,"icon":39},"Overview","\u002Flogging\u002Foverview","2.logging\u002F0.overview","i-lucide-list",{"title":41,"path":42,"stem":43,"icon":44},"Simple Logging","\u002Flogging\u002Fsimple-logging","2.logging\u002F1.simple-logging","i-lucide-terminal",{"title":46,"path":47,"stem":48,"icon":49},"Wide Events","\u002Flogging\u002Fwide-events","2.logging\u002F2.wide-events","i-lucide-layers",{"title":51,"path":52,"stem":53,"icon":54},"Structured Errors","\u002Flogging\u002Fstructured-errors","2.logging\u002F3.structured-errors","i-lucide-shield-alert",{"title":56,"path":57,"stem":58,"icon":59},"Client Logging","\u002Flogging\u002Fclient-logging","2.logging\u002F4.client-logging","i-lucide-monitor",{"title":61,"path":62,"stem":63,"icon":64},"AI SDK Integration","\u002Flogging\u002Fai-sdk","2.logging\u002F5.ai-sdk","i-simple-icons-vercel",{"title":66,"path":67,"stem":68,"children":69,"page":29},"Core Concepts","\u002Fcore-concepts","3.core-concepts",[70,75,80,85,90,95,100],{"title":71,"path":72,"stem":73,"icon":74},"Lifecycle","\u002Fcore-concepts\u002Flifecycle","3.core-concepts\u002F0.lifecycle","i-lucide-arrow-right-left",{"title":76,"path":77,"stem":78,"icon":79},"Configuration","\u002Fcore-concepts\u002Fconfiguration","3.core-concepts\u002F1.configuration","i-lucide-settings",{"title":81,"path":82,"stem":83,"icon":84},"Sampling","\u002Fcore-concepts\u002Fsampling","3.core-concepts\u002F2.sampling","i-lucide-filter",{"title":86,"path":87,"stem":88,"icon":89},"Typed Fields","\u002Fcore-concepts\u002Ftyped-fields","3.core-concepts\u002F3.typed-fields","i-simple-icons-typescript",{"title":91,"path":92,"stem":93,"icon":94},"Best Practices","\u002Fcore-concepts\u002Fbest-practices","3.core-concepts\u002F4.best-practices","i-lucide-shield-check",{"title":96,"path":97,"stem":98,"icon":99},"Performance","\u002Fcore-concepts\u002Fperformance","3.core-concepts\u002F5.performance","i-lucide-gauge",{"title":101,"path":102,"stem":103,"icon":104},"Vite Plugin","\u002Fcore-concepts\u002Fvite-plugin","3.core-concepts\u002F6.vite-plugin","i-custom-vite",{"title":106,"path":107,"stem":108,"children":109,"page":29},"Frameworks","\u002Fframeworks","4.frameworks",[110,114,119,124,129,134,139,144,149,154,159,164,168,173,177,182],{"title":36,"path":111,"stem":112,"icon":113},"\u002Fframeworks\u002Foverview","4.frameworks\u002F00.overview","i-lucide-layout-grid",{"title":115,"path":116,"stem":117,"icon":118},"Nuxt","\u002Fframeworks\u002Fnuxt","4.frameworks\u002F01.nuxt","i-simple-icons-nuxtdotjs",{"title":120,"path":121,"stem":122,"icon":123},"Next.js","\u002Fframeworks\u002Fnextjs","4.frameworks\u002F02.nextjs","i-simple-icons-nextdotjs",{"title":125,"path":126,"stem":127,"icon":128},"SvelteKit","\u002Fframeworks\u002Fsveltekit","4.frameworks\u002F03.sveltekit","i-simple-icons-svelte",{"title":130,"path":131,"stem":132,"icon":133},"Nitro","\u002Fframeworks\u002Fnitro","4.frameworks\u002F04.nitro","i-custom-nitro",{"title":135,"path":136,"stem":137,"icon":138},"TanStack Start","\u002Fframeworks\u002Ftanstack-start","4.frameworks\u002F05.tanstack-start","i-custom-tanstack",{"title":140,"path":141,"stem":142,"icon":143},"NestJS","\u002Fframeworks\u002Fnestjs","4.frameworks\u002F06.nestjs","i-simple-icons-nestjs",{"title":145,"path":146,"stem":147,"icon":148},"Express","\u002Fframeworks\u002Fexpress","4.frameworks\u002F07.express","i-simple-icons-express",{"title":150,"path":151,"stem":152,"icon":153},"Hono","\u002Fframeworks\u002Fhono","4.frameworks\u002F08.hono","i-simple-icons-hono",{"title":155,"path":156,"stem":157,"icon":158},"Fastify","\u002Fframeworks\u002Ffastify","4.frameworks\u002F09.fastify","i-simple-icons-fastify",{"title":160,"path":161,"stem":162,"icon":163},"Elysia","\u002Fframeworks\u002Felysia","4.frameworks\u002F10.elysia","i-custom-elysia",{"title":165,"path":166,"stem":167},"React Router","\u002Fframeworks\u002Freact-router","4.frameworks\u002F11.react-router",{"title":169,"path":170,"stem":171,"icon":172},"Cloudflare Workers","\u002Fframeworks\u002Fcloudflare-workers","4.frameworks\u002F12.cloudflare-workers","i-simple-icons-cloudflare",{"title":174,"path":175,"stem":176,"icon":89},"Standalone","\u002Fframeworks\u002Fstandalone","4.frameworks\u002F13.standalone",{"title":178,"path":179,"stem":180,"icon":181},"Astro","\u002Fframeworks\u002Fastro","4.frameworks\u002F14.astro","i-simple-icons-astro",{"title":183,"path":184,"stem":185,"icon":186},"Custom Integration","\u002Fframeworks\u002Fcustom-integration","4.frameworks\u002F15.custom-integration","i-lucide-puzzle",{"title":188,"path":189,"stem":190,"children":191,"page":29},"Adapters","\u002Fadapters","5.adapters",[192,196,201,206,211,216,221,226,231,236,241],{"title":36,"path":193,"stem":194,"icon":195},"\u002Fadapters\u002Foverview","5.adapters\u002F1.overview","i-custom-plug",{"title":197,"path":198,"stem":199,"icon":200},"Pipeline","\u002Fadapters\u002Fpipeline","5.adapters\u002F10.pipeline","i-lucide-workflow",{"title":202,"path":203,"stem":204,"icon":205},"Browser","\u002Fadapters\u002Fbrowser","5.adapters\u002F11.browser","i-lucide-globe",{"title":207,"path":208,"stem":209,"icon":210},"Axiom","\u002Fadapters\u002Faxiom","5.adapters\u002F2.axiom","i-custom-axiom",{"title":212,"path":213,"stem":214,"icon":215},"OTLP","\u002Fadapters\u002Fotlp","5.adapters\u002F3.otlp","i-simple-icons-opentelemetry",{"title":217,"path":218,"stem":219,"icon":220},"PostHog","\u002Fadapters\u002Fposthog","5.adapters\u002F4.posthog","i-simple-icons-posthog",{"title":222,"path":223,"stem":224,"icon":225},"Sentry","\u002Fadapters\u002Fsentry","5.adapters\u002F5.sentry","i-simple-icons-sentry",{"title":227,"path":228,"stem":229,"icon":230},"Better Stack","\u002Fadapters\u002Fbetter-stack","5.adapters\u002F6.better-stack","i-simple-icons-betterstack",{"title":232,"path":233,"stem":234,"icon":235},"File System","\u002Fadapters\u002Ffs","5.adapters\u002F7.fs","i-lucide-hard-drive",{"title":237,"path":238,"stem":239,"icon":240},"HyperDX","\u002Fadapters\u002Fhyperdx","5.adapters\u002F8.hyperdx","i-custom-hyperdx",{"title":242,"path":243,"stem":244,"icon":245},"Custom Adapters","\u002Fadapters\u002Fcustom","5.adapters\u002F9.custom","i-lucide-code",{"title":247,"path":248,"stem":249,"children":250,"page":29},"Enrichers","\u002Fenrichers","6.enrichers",[251,254,258],{"title":36,"path":252,"stem":253,"icon":28},"\u002Fenrichers\u002Foverview","6.enrichers\u002F1.overview",{"title":255,"path":256,"stem":257,"icon":186},"Built-in","\u002Fenrichers\u002Fbuilt-in","6.enrichers\u002F2.built-in",{"title":259,"path":260,"stem":261,"icon":245},"Custom","\u002Fenrichers\u002Fcustom","6.enrichers\u002F3.custom",{"title":263,"path":264,"stem":265,"children":266,"page":29},"NuxtHub","\u002Fnuxthub","7.nuxthub",[267,271],{"title":36,"path":268,"stem":269,"icon":270},"\u002Fnuxthub\u002Foverview","7.nuxthub\u002F1.overview","i-lucide-database",{"title":272,"path":273,"stem":274,"icon":275},"Retention","\u002Fnuxthub\u002Fretention","7.nuxthub\u002F2.retention","i-lucide-clock",{"id":277,"title":183,"body":278,"description":2173,"extension":2174,"links":2175,"meta":2176,"navigation":2177,"path":184,"seo":2178,"stem":185,"__hash__":2179},"docs\u002F4.frameworks\u002F15.custom-integration.md",{"type":279,"value":280,"toc":2163},"minimark",[281,290,301,306,363,367,547,571,575,578,586,656,662,666,669,1390,1397,1401,1506,1510,1513,1987,1991,1994,2111,2122,2126,2159],[282,283,284,285,289],"p",{},"Don't see your framework listed? The ",[286,287,288],"code",{},"evlog\u002Ftoolkit"," package exposes the same building blocks that power every built-in integration (Hono, Express, Fastify, Elysia, NestJS, SvelteKit). Build a full-featured evlog middleware for any HTTP framework in ~50 lines of code.",[291,292,295,296,300],"callout",{"color":293,"icon":294},"warning","i-lucide-flask-conical","The toolkit API is marked as ",[297,298,299],"strong",{},"beta",". The surface is stable (used by all built-in integrations) but may evolve based on community feedback.",[302,303,305],"h2",{"id":304},"install","Install",[307,308,309,334,349],"code-group",{},[310,311,317],"pre",{"className":312,"code":313,"filename":314,"language":315,"meta":316,"style":316},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","pnpm add evlog\n","pnpm","bash","",[286,318,319],{"__ignoreMap":316},[320,321,324,327,331],"span",{"class":322,"line":323},"line",1,[320,325,314],{"class":326},"sBMFI",[320,328,330],{"class":329},"sfazB"," add",[320,332,333],{"class":329}," evlog\n",[310,335,338],{"className":312,"code":336,"filename":337,"language":315,"meta":316,"style":316},"npm install evlog\n","npm",[286,339,340],{"__ignoreMap":316},[320,341,342,344,347],{"class":322,"line":323},[320,343,337],{"class":326},[320,345,346],{"class":329}," install",[320,348,333],{"class":329},[310,350,353],{"className":312,"code":351,"filename":352,"language":315,"meta":316,"style":316},"bun add evlog\n","bun",[286,354,355],{"__ignoreMap":316},[320,356,357,359,361],{"class":322,"line":323},[320,358,352],{"class":326},[320,360,330],{"class":329},[320,362,333],{"class":329},[302,364,366],{"id":365},"whats-in-the-toolkit","What's in the Toolkit",[368,369,370,383],"table",{},[371,372,373],"thead",{},[374,375,376,380],"tr",{},[377,378,379],"th",{},"Export",[377,381,382],{},"Purpose",[384,385,386,397,426,451,464,478,492,509,527,537],"tbody",{},[374,387,388,394],{},[389,390,391],"td",{},[286,392,393],{},"createMiddlewareLogger(opts)",[389,395,396],{},"Full pipeline: logger creation, route filtering, tail sampling, emit, enrich, drain",[374,398,399,404],{},[389,400,401],{},[286,402,403],{},"BaseEvlogOptions",[389,405,406,407,410,411,410,414,410,417,410,420,410,423],{},"Base user-facing options type with ",[286,408,409],{},"drain",", ",[286,412,413],{},"enrich",[286,415,416],{},"keep",[286,418,419],{},"include",[286,421,422],{},"exclude",[286,424,425],{},"routes",[374,427,428,433],{},[389,429,430],{},[286,431,432],{},"MiddlewareLoggerOptions",[389,434,435,436,438,439,410,442,410,445,410,448],{},"Internal options extending ",[286,437,403],{}," with ",[286,440,441],{},"method",[286,443,444],{},"path",[286,446,447],{},"requestId",[286,449,450],{},"headers",[374,452,453,458],{},[389,454,455],{},[286,456,457],{},"MiddlewareLoggerResult",[389,459,460,461],{},"Return type: ",[286,462,463],{},"{ logger, finish, skipped }",[374,465,466,471],{},[389,467,468],{},[286,469,470],{},"extractSafeHeaders(headers)",[389,472,473,474,477],{},"Filter sensitive headers from a Web API ",[286,475,476],{},"Headers"," object (Hono, Elysia, Deno, Bun)",[374,479,480,485],{},[389,481,482],{},[286,483,484],{},"extractSafeNodeHeaders(headers)",[389,486,487,488,491],{},"Filter sensitive headers from Node.js ",[286,489,490],{},"IncomingHttpHeaders"," (Express, Fastify, NestJS)",[374,493,494,499],{},[389,495,496],{},[286,497,498],{},"createLoggerStorage(hint)",[389,500,501,502,505,506],{},"Factory returning ",[286,503,504],{},"{ storage, useLogger }"," backed by ",[286,507,508],{},"AsyncLocalStorage",[374,510,511,516],{},[389,512,513],{},[286,514,515],{},"extractErrorStatus(error)",[389,517,518,519,522,523,526],{},"Extract HTTP status from any error shape (",[286,520,521],{},"status"," or ",[286,524,525],{},"statusCode",")",[374,528,529,534],{},[389,530,531],{},[286,532,533],{},"shouldLog(path, include, exclude)",[389,535,536],{},"Route filtering logic (glob patterns)",[374,538,539,544],{},[389,540,541],{},[286,542,543],{},"getServiceForPath(path, routes)",[389,545,546],{},"Resolve per-route service name",[282,548,549,550,410,553,410,556,410,559,562,563,566,567,570],{},"Types like ",[286,551,552],{},"RequestLogger",[286,554,555],{},"DrainContext",[286,557,558],{},"EnrichContext",[286,560,561],{},"WideEvent",", and ",[286,564,565],{},"TailSamplingContext"," are exported from the main ",[286,568,569],{},"evlog"," package.",[302,572,574],{"id":573},"architecture","Architecture",[282,576,577],{},"Every evlog framework integration follows the same 5-step pattern:",[310,579,584],{"className":580,"code":582,"language":583},[581],"language-text","Request → createMiddlewareLogger() → store logger → handle request → finish()\n","text",[286,585,582],{"__ignoreMap":316},[587,588,589,605,614,627,644],"ol",{},[590,591,592,595,596,410,598,410,600,562,602,604],"li",{},[297,593,594],{},"Extract"," ",[286,597,441],{},[286,599,444],{},[286,601,447],{},[286,603,450],{}," from the framework request",[590,606,607,595,610,613],{},[297,608,609],{},"Call",[286,611,612],{},"createMiddlewareLogger()"," with those fields + user options",[590,615,616,595,619,622,623,626],{},[297,617,618],{},"Check",[286,620,621],{},"skipped"," - if ",[286,624,625],{},"true",", the route is filtered out, skip to next middleware",[590,628,629,632,633,636,637,410,640,643],{},[297,630,631],{},"Store"," the ",[286,634,635],{},"logger"," in the framework's idiomatic context (",[286,638,639],{},"req.log",[286,641,642],{},"c.set('log')",", etc.)",[590,645,646,595,648,651,652,655],{},[297,647,609],{},[286,649,650],{},"finish({ status })"," on success or ",[286,653,654],{},"finish({ error })"," on failure",[282,657,658,661],{},[286,659,660],{},"createMiddlewareLogger"," handles everything else: route filtering, service overrides, duration tracking, tail sampling, event emission, enrichment, and draining.",[302,663,665],{"id":664},"minimal-example","Minimal Example",[282,667,668],{},"Here's a complete integration for a generic Node.js HTTP framework:",[310,670,675],{"className":671,"code":672,"filename":673,"language":674,"meta":316,"style":316},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import type { IncomingMessage, ServerResponse } from 'node:http'\nimport type { RequestLogger } from 'evlog'\nimport {\n  createMiddlewareLogger,\n  extractSafeNodeHeaders,\n  createLoggerStorage,\n  type BaseEvlogOptions,\n} from 'evlog\u002Ftoolkit'\n\nexport type MyFrameworkEvlogOptions = BaseEvlogOptions\n\nconst { storage, useLogger } = createLoggerStorage(\n  'middleware context. Make sure evlog middleware is registered before your routes.',\n)\n\nexport { useLogger }\n\nexport function evlog(options: MyFrameworkEvlogOptions = {}) {\n  return async (req: IncomingMessage, res: ServerResponse, next: () => Promise\u003Cvoid>) => {\n    const { logger, finish, skipped } = createMiddlewareLogger({\n      method: req.method || 'GET',\n      path: req.url || '\u002F',\n      requestId: (req.headers['x-request-id'] as string) || crypto.randomUUID(),\n      headers: extractSafeNodeHeaders(req.headers),\n      ...options,\n    })\n\n    if (skipped) {\n      await next()\n      return\n    }\n\n    ;(req as IncomingMessage & { log: RequestLogger }).log = logger\n\n    try {\n      await storage.run(logger, () => next())\n      await finish({ status: res.statusCode })\n    } catch (error) {\n      await finish({ error: error as Error })\n      throw error\n    }\n  }\n}\n","my-framework-evlog.ts","typescript",[286,676,677,715,737,745,754,762,770,781,795,802,820,825,852,866,872,877,890,895,925,982,1016,1044,1070,1124,1147,1157,1165,1170,1184,1195,1201,1207,1212,1253,1258,1266,1293,1320,1337,1364,1373,1378,1384],{"__ignoreMap":316},[320,678,679,683,686,690,694,697,700,703,706,709,712],{"class":322,"line":323},[320,680,682],{"class":681},"s7zQu","import",[320,684,685],{"class":681}," type",[320,687,689],{"class":688},"sMK4o"," {",[320,691,693],{"class":692},"sTEyZ"," IncomingMessage",[320,695,696],{"class":688},",",[320,698,699],{"class":692}," ServerResponse",[320,701,702],{"class":688}," }",[320,704,705],{"class":681}," from",[320,707,708],{"class":688}," '",[320,710,711],{"class":329},"node:http",[320,713,714],{"class":688},"'\n",[320,716,718,720,722,724,727,729,731,733,735],{"class":322,"line":717},2,[320,719,682],{"class":681},[320,721,685],{"class":681},[320,723,689],{"class":688},[320,725,726],{"class":692}," RequestLogger",[320,728,702],{"class":688},[320,730,705],{"class":681},[320,732,708],{"class":688},[320,734,569],{"class":329},[320,736,714],{"class":688},[320,738,740,742],{"class":322,"line":739},3,[320,741,682],{"class":681},[320,743,744],{"class":688}," {\n",[320,746,748,751],{"class":322,"line":747},4,[320,749,750],{"class":692},"  createMiddlewareLogger",[320,752,753],{"class":688},",\n",[320,755,757,760],{"class":322,"line":756},5,[320,758,759],{"class":692},"  extractSafeNodeHeaders",[320,761,753],{"class":688},[320,763,765,768],{"class":322,"line":764},6,[320,766,767],{"class":692},"  createLoggerStorage",[320,769,753],{"class":688},[320,771,773,776,779],{"class":322,"line":772},7,[320,774,775],{"class":681},"  type",[320,777,778],{"class":692}," BaseEvlogOptions",[320,780,753],{"class":688},[320,782,784,787,789,791,793],{"class":322,"line":783},8,[320,785,786],{"class":688},"}",[320,788,705],{"class":681},[320,790,708],{"class":688},[320,792,288],{"class":329},[320,794,714],{"class":688},[320,796,798],{"class":322,"line":797},9,[320,799,801],{"emptyLinePlaceholder":800},true,"\n",[320,803,805,808,811,814,817],{"class":322,"line":804},10,[320,806,807],{"class":681},"export",[320,809,685],{"class":810},"spNyl",[320,812,813],{"class":326}," MyFrameworkEvlogOptions",[320,815,816],{"class":688}," =",[320,818,819],{"class":326}," BaseEvlogOptions\n",[320,821,823],{"class":322,"line":822},11,[320,824,801],{"emptyLinePlaceholder":800},[320,826,828,831,833,836,838,841,843,845,849],{"class":322,"line":827},12,[320,829,830],{"class":810},"const",[320,832,689],{"class":688},[320,834,835],{"class":692}," storage",[320,837,696],{"class":688},[320,839,840],{"class":692}," useLogger ",[320,842,786],{"class":688},[320,844,816],{"class":688},[320,846,848],{"class":847},"s2Zo4"," createLoggerStorage",[320,850,851],{"class":692},"(\n",[320,853,855,858,861,864],{"class":322,"line":854},13,[320,856,857],{"class":688},"  '",[320,859,860],{"class":329},"middleware context. Make sure evlog middleware is registered before your routes.",[320,862,863],{"class":688},"'",[320,865,753],{"class":688},[320,867,869],{"class":322,"line":868},14,[320,870,871],{"class":692},")\n",[320,873,875],{"class":322,"line":874},15,[320,876,801],{"emptyLinePlaceholder":800},[320,878,880,882,884,887],{"class":322,"line":879},16,[320,881,807],{"class":681},[320,883,689],{"class":688},[320,885,886],{"class":692}," useLogger",[320,888,889],{"class":688}," }\n",[320,891,893],{"class":322,"line":892},17,[320,894,801],{"emptyLinePlaceholder":800},[320,896,898,900,903,906,909,913,916,918,920,923],{"class":322,"line":897},18,[320,899,807],{"class":681},[320,901,902],{"class":810}," function",[320,904,905],{"class":847}," evlog",[320,907,908],{"class":688},"(",[320,910,912],{"class":911},"sHdIc","options",[320,914,915],{"class":688},":",[320,917,813],{"class":326},[320,919,816],{"class":688},[320,921,922],{"class":688}," {})",[320,924,744],{"class":688},[320,926,928,931,934,937,940,942,944,946,949,951,953,955,958,960,963,966,969,972,975,978,980],{"class":322,"line":927},19,[320,929,930],{"class":681},"  return",[320,932,933],{"class":810}," async",[320,935,936],{"class":688}," (",[320,938,939],{"class":911},"req",[320,941,915],{"class":688},[320,943,693],{"class":326},[320,945,696],{"class":688},[320,947,948],{"class":911}," res",[320,950,915],{"class":688},[320,952,699],{"class":326},[320,954,696],{"class":688},[320,956,957],{"class":847}," next",[320,959,915],{"class":688},[320,961,962],{"class":688}," ()",[320,964,965],{"class":810}," =>",[320,967,968],{"class":326}," Promise",[320,970,971],{"class":688},"\u003C",[320,973,974],{"class":326},"void",[320,976,977],{"class":688},">)",[320,979,965],{"class":810},[320,981,744],{"class":688},[320,983,985,988,990,993,995,998,1000,1003,1005,1007,1010,1013],{"class":322,"line":984},20,[320,986,987],{"class":810},"    const",[320,989,689],{"class":688},[320,991,992],{"class":692}," logger",[320,994,696],{"class":688},[320,996,997],{"class":692}," finish",[320,999,696],{"class":688},[320,1001,1002],{"class":692}," skipped",[320,1004,702],{"class":688},[320,1006,816],{"class":688},[320,1008,1009],{"class":847}," createMiddlewareLogger",[320,1011,908],{"class":1012},"swJcz",[320,1014,1015],{"class":688},"{\n",[320,1017,1019,1022,1024,1027,1030,1032,1035,1037,1040,1042],{"class":322,"line":1018},21,[320,1020,1021],{"class":1012},"      method",[320,1023,915],{"class":688},[320,1025,1026],{"class":692}," req",[320,1028,1029],{"class":688},".",[320,1031,441],{"class":692},[320,1033,1034],{"class":688}," ||",[320,1036,708],{"class":688},[320,1038,1039],{"class":329},"GET",[320,1041,863],{"class":688},[320,1043,753],{"class":688},[320,1045,1047,1050,1052,1054,1056,1059,1061,1063,1066,1068],{"class":322,"line":1046},22,[320,1048,1049],{"class":1012},"      path",[320,1051,915],{"class":688},[320,1053,1026],{"class":692},[320,1055,1029],{"class":688},[320,1057,1058],{"class":692},"url",[320,1060,1034],{"class":688},[320,1062,708],{"class":688},[320,1064,1065],{"class":329},"\u002F",[320,1067,863],{"class":688},[320,1069,753],{"class":688},[320,1071,1073,1076,1078,1080,1082,1084,1086,1089,1091,1094,1096,1099,1102,1105,1108,1111,1114,1116,1119,1122],{"class":322,"line":1072},23,[320,1074,1075],{"class":1012},"      requestId",[320,1077,915],{"class":688},[320,1079,936],{"class":1012},[320,1081,939],{"class":692},[320,1083,1029],{"class":688},[320,1085,450],{"class":692},[320,1087,1088],{"class":1012},"[",[320,1090,863],{"class":688},[320,1092,1093],{"class":329},"x-request-id",[320,1095,863],{"class":688},[320,1097,1098],{"class":1012},"] ",[320,1100,1101],{"class":681},"as",[320,1103,1104],{"class":326}," string",[320,1106,1107],{"class":1012},") ",[320,1109,1110],{"class":688},"||",[320,1112,1113],{"class":692}," crypto",[320,1115,1029],{"class":688},[320,1117,1118],{"class":847},"randomUUID",[320,1120,1121],{"class":1012},"()",[320,1123,753],{"class":688},[320,1125,1127,1130,1132,1135,1137,1139,1141,1143,1145],{"class":322,"line":1126},24,[320,1128,1129],{"class":1012},"      headers",[320,1131,915],{"class":688},[320,1133,1134],{"class":847}," extractSafeNodeHeaders",[320,1136,908],{"class":1012},[320,1138,939],{"class":692},[320,1140,1029],{"class":688},[320,1142,450],{"class":692},[320,1144,526],{"class":1012},[320,1146,753],{"class":688},[320,1148,1150,1153,1155],{"class":322,"line":1149},25,[320,1151,1152],{"class":688},"      ...",[320,1154,912],{"class":692},[320,1156,753],{"class":688},[320,1158,1160,1163],{"class":322,"line":1159},26,[320,1161,1162],{"class":688},"    }",[320,1164,871],{"class":1012},[320,1166,1168],{"class":322,"line":1167},27,[320,1169,801],{"emptyLinePlaceholder":800},[320,1171,1173,1176,1178,1180,1182],{"class":322,"line":1172},28,[320,1174,1175],{"class":681},"    if",[320,1177,936],{"class":1012},[320,1179,621],{"class":692},[320,1181,1107],{"class":1012},[320,1183,1015],{"class":688},[320,1185,1187,1190,1192],{"class":322,"line":1186},29,[320,1188,1189],{"class":681},"      await",[320,1191,957],{"class":847},[320,1193,1194],{"class":1012},"()\n",[320,1196,1198],{"class":322,"line":1197},30,[320,1199,1200],{"class":681},"      return\n",[320,1202,1204],{"class":322,"line":1203},31,[320,1205,1206],{"class":688},"    }\n",[320,1208,1210],{"class":322,"line":1209},32,[320,1211,801],{"emptyLinePlaceholder":800},[320,1213,1215,1218,1220,1222,1225,1227,1230,1232,1235,1237,1239,1241,1243,1245,1248,1250],{"class":322,"line":1214},33,[320,1216,1217],{"class":688},"    ;",[320,1219,908],{"class":1012},[320,1221,939],{"class":692},[320,1223,1224],{"class":681}," as",[320,1226,693],{"class":326},[320,1228,1229],{"class":688}," &",[320,1231,689],{"class":688},[320,1233,1234],{"class":1012}," log",[320,1236,915],{"class":688},[320,1238,726],{"class":326},[320,1240,702],{"class":688},[320,1242,526],{"class":1012},[320,1244,1029],{"class":688},[320,1246,1247],{"class":692},"log",[320,1249,816],{"class":688},[320,1251,1252],{"class":692}," logger\n",[320,1254,1256],{"class":322,"line":1255},34,[320,1257,801],{"emptyLinePlaceholder":800},[320,1259,1261,1264],{"class":322,"line":1260},35,[320,1262,1263],{"class":681},"    try",[320,1265,744],{"class":688},[320,1267,1269,1271,1273,1275,1278,1280,1282,1284,1286,1288,1290],{"class":322,"line":1268},36,[320,1270,1189],{"class":681},[320,1272,835],{"class":692},[320,1274,1029],{"class":688},[320,1276,1277],{"class":847},"run",[320,1279,908],{"class":1012},[320,1281,635],{"class":692},[320,1283,696],{"class":688},[320,1285,962],{"class":688},[320,1287,965],{"class":810},[320,1289,957],{"class":847},[320,1291,1292],{"class":1012},"())\n",[320,1294,1296,1298,1300,1302,1305,1308,1310,1312,1314,1316,1318],{"class":322,"line":1295},37,[320,1297,1189],{"class":681},[320,1299,997],{"class":847},[320,1301,908],{"class":1012},[320,1303,1304],{"class":688},"{",[320,1306,1307],{"class":1012}," status",[320,1309,915],{"class":688},[320,1311,948],{"class":692},[320,1313,1029],{"class":688},[320,1315,525],{"class":692},[320,1317,702],{"class":688},[320,1319,871],{"class":1012},[320,1321,1323,1325,1328,1330,1333,1335],{"class":322,"line":1322},38,[320,1324,1162],{"class":688},[320,1326,1327],{"class":681}," catch",[320,1329,936],{"class":1012},[320,1331,1332],{"class":692},"error",[320,1334,1107],{"class":1012},[320,1336,1015],{"class":688},[320,1338,1340,1342,1344,1346,1348,1351,1353,1355,1357,1360,1362],{"class":322,"line":1339},39,[320,1341,1189],{"class":681},[320,1343,997],{"class":847},[320,1345,908],{"class":1012},[320,1347,1304],{"class":688},[320,1349,1350],{"class":1012}," error",[320,1352,915],{"class":688},[320,1354,1350],{"class":692},[320,1356,1224],{"class":681},[320,1358,1359],{"class":326}," Error",[320,1361,702],{"class":688},[320,1363,871],{"class":1012},[320,1365,1367,1370],{"class":322,"line":1366},40,[320,1368,1369],{"class":681},"      throw",[320,1371,1372],{"class":692}," error\n",[320,1374,1376],{"class":322,"line":1375},41,[320,1377,1206],{"class":688},[320,1379,1381],{"class":322,"line":1380},42,[320,1382,1383],{"class":688},"  }\n",[320,1385,1387],{"class":322,"line":1386},43,[320,1388,1389],{"class":688},"}\n",[282,1391,1392,1393,1396],{},"That's it. This middleware gets ",[297,1394,1395],{},"every feature"," for free: route filtering, drain adapters, enrichers, tail sampling, error capture, and duration tracking.",[302,1398,1400],{"id":1399},"key-rules","Key Rules",[587,1402,1403,1415,1435,1455,1473,1482,1491],{},[590,1404,1405,1410,1411,1414],{},[297,1406,1407,1408],{},"Always use ",[286,1409,660],{}," - never call ",[286,1412,1413],{},"createRequestLogger"," directly",[590,1416,1417,1420,1421,1424,1425,1427,1428,1431,1432,1434],{},[297,1418,1419],{},"Use the right header extractor"," - ",[286,1422,1423],{},"extractSafeHeaders"," for Web API ",[286,1426,476],{}," (Hono, Elysia, Deno), ",[286,1429,1430],{},"extractSafeNodeHeaders"," for Node.js ",[286,1433,490],{}," (Express, Fastify)",[590,1436,1437,1420,1440,1443,1444,410,1446,410,1448,410,1450,410,1452,1454],{},[297,1438,1439],{},"Spread user options",[286,1441,1442],{},"...options"," passes ",[286,1445,409],{},[286,1447,413],{},[286,1449,416],{},[286,1451,419],{},[286,1453,422],{}," to the pipeline automatically",[590,1456,1457,1464,1465,1468,1469,1472],{},[297,1458,1459,1460,1463],{},"Call ",[286,1461,1462],{},"finish()"," in both paths"," - success (",[286,1466,1467],{},"{ status }",") and error (",[286,1470,1471],{},"{ error }",") - it handles emit + enrich + drain",[590,1474,1475,1478,1479,1481],{},[297,1476,1477],{},"Re-throw errors"," after ",[286,1480,1462],{}," so framework error handlers still work",[590,1483,1484,1490],{},[297,1485,1486,1487],{},"Export ",[286,1488,1489],{},"useLogger()"," - consumers expect it for accessing the logger from service functions",[590,1492,1493,1496,1497,1499,1500,410,1502,410,1504],{},[297,1494,1495],{},"Export your options type"," extending ",[286,1498,403],{}," - for IDE completion on ",[286,1501,409],{},[286,1503,413],{},[286,1505,416],{},[302,1507,1509],{"id":1508},"usage","Usage",[282,1511,1512],{},"Once built, your integration is used like any other:",[310,1514,1517],{"className":671,"code":1515,"filename":1516,"language":674,"meta":316,"style":316},"import { initLogger } from 'evlog'\nimport { evlog, useLogger } from '.\u002Fmy-framework-evlog'\nimport { createAxiomDrain } from 'evlog\u002Faxiom'\n\ninitLogger({ env: { service: 'my-api' } })\n\napp.use(evlog({\n  include: ['\u002Fapi\u002F**'],\n  drain: createAxiomDrain(),\n  enrich: (ctx) => {\n    ctx.event.region = process.env.FLY_REGION\n  },\n  keep: (ctx) => {\n    if (ctx.duration && ctx.duration > 2000) ctx.shouldKeep = true\n  },\n}))\n\napp.get('\u002Fapi\u002Fusers', (req, res) => {\n  req.log.set({ users: { count: 42 } })\n  res.json({ users: [] })\n})\n\n\u002F\u002F Access logger from anywhere in the call stack\nfunction findUsers() {\n  const log = useLogger()\n  log.set({ db: { query: 'SELECT * FROM users' } })\n}\n","src\u002Findex.ts",[286,1518,1519,1538,1561,1581,1585,1619,1623,1641,1663,1676,1694,1724,1729,1746,1791,1795,1802,1806,1840,1879,1904,1910,1914,1920,1932,1945,1983],{"__ignoreMap":316},[320,1520,1521,1523,1525,1528,1530,1532,1534,1536],{"class":322,"line":323},[320,1522,682],{"class":681},[320,1524,689],{"class":688},[320,1526,1527],{"class":692}," initLogger",[320,1529,702],{"class":688},[320,1531,705],{"class":681},[320,1533,708],{"class":688},[320,1535,569],{"class":329},[320,1537,714],{"class":688},[320,1539,1540,1542,1544,1546,1548,1550,1552,1554,1556,1559],{"class":322,"line":717},[320,1541,682],{"class":681},[320,1543,689],{"class":688},[320,1545,905],{"class":692},[320,1547,696],{"class":688},[320,1549,886],{"class":692},[320,1551,702],{"class":688},[320,1553,705],{"class":681},[320,1555,708],{"class":688},[320,1557,1558],{"class":329},".\u002Fmy-framework-evlog",[320,1560,714],{"class":688},[320,1562,1563,1565,1567,1570,1572,1574,1576,1579],{"class":322,"line":739},[320,1564,682],{"class":681},[320,1566,689],{"class":688},[320,1568,1569],{"class":692}," createAxiomDrain",[320,1571,702],{"class":688},[320,1573,705],{"class":681},[320,1575,708],{"class":688},[320,1577,1578],{"class":329},"evlog\u002Faxiom",[320,1580,714],{"class":688},[320,1582,1583],{"class":322,"line":747},[320,1584,801],{"emptyLinePlaceholder":800},[320,1586,1587,1590,1592,1594,1597,1599,1601,1604,1606,1608,1611,1613,1615,1617],{"class":322,"line":756},[320,1588,1589],{"class":847},"initLogger",[320,1591,908],{"class":692},[320,1593,1304],{"class":688},[320,1595,1596],{"class":1012}," env",[320,1598,915],{"class":688},[320,1600,689],{"class":688},[320,1602,1603],{"class":1012}," service",[320,1605,915],{"class":688},[320,1607,708],{"class":688},[320,1609,1610],{"class":329},"my-api",[320,1612,863],{"class":688},[320,1614,702],{"class":688},[320,1616,702],{"class":688},[320,1618,871],{"class":692},[320,1620,1621],{"class":322,"line":764},[320,1622,801],{"emptyLinePlaceholder":800},[320,1624,1625,1628,1630,1633,1635,1637,1639],{"class":322,"line":772},[320,1626,1627],{"class":692},"app",[320,1629,1029],{"class":688},[320,1631,1632],{"class":847},"use",[320,1634,908],{"class":692},[320,1636,569],{"class":847},[320,1638,908],{"class":692},[320,1640,1015],{"class":688},[320,1642,1643,1646,1648,1651,1653,1656,1658,1661],{"class":322,"line":783},[320,1644,1645],{"class":1012},"  include",[320,1647,915],{"class":688},[320,1649,1650],{"class":692}," [",[320,1652,863],{"class":688},[320,1654,1655],{"class":329},"\u002Fapi\u002F**",[320,1657,863],{"class":688},[320,1659,1660],{"class":692},"]",[320,1662,753],{"class":688},[320,1664,1665,1668,1670,1672,1674],{"class":322,"line":797},[320,1666,1667],{"class":1012},"  drain",[320,1669,915],{"class":688},[320,1671,1569],{"class":847},[320,1673,1121],{"class":692},[320,1675,753],{"class":688},[320,1677,1678,1681,1683,1685,1688,1690,1692],{"class":322,"line":804},[320,1679,1680],{"class":847},"  enrich",[320,1682,915],{"class":688},[320,1684,936],{"class":688},[320,1686,1687],{"class":911},"ctx",[320,1689,526],{"class":688},[320,1691,965],{"class":810},[320,1693,744],{"class":688},[320,1695,1696,1699,1701,1704,1706,1709,1711,1714,1716,1719,1721],{"class":322,"line":822},[320,1697,1698],{"class":692},"    ctx",[320,1700,1029],{"class":688},[320,1702,1703],{"class":692},"event",[320,1705,1029],{"class":688},[320,1707,1708],{"class":692},"region",[320,1710,816],{"class":688},[320,1712,1713],{"class":692}," process",[320,1715,1029],{"class":688},[320,1717,1718],{"class":692},"env",[320,1720,1029],{"class":688},[320,1722,1723],{"class":692},"FLY_REGION\n",[320,1725,1726],{"class":322,"line":827},[320,1727,1728],{"class":688},"  },\n",[320,1730,1731,1734,1736,1738,1740,1742,1744],{"class":322,"line":854},[320,1732,1733],{"class":847},"  keep",[320,1735,915],{"class":688},[320,1737,936],{"class":688},[320,1739,1687],{"class":911},[320,1741,526],{"class":688},[320,1743,965],{"class":810},[320,1745,744],{"class":688},[320,1747,1748,1750,1752,1754,1756,1759,1762,1765,1767,1769,1772,1776,1778,1780,1782,1785,1787],{"class":322,"line":868},[320,1749,1175],{"class":681},[320,1751,936],{"class":1012},[320,1753,1687],{"class":692},[320,1755,1029],{"class":688},[320,1757,1758],{"class":692},"duration",[320,1760,1761],{"class":688}," &&",[320,1763,1764],{"class":692}," ctx",[320,1766,1029],{"class":688},[320,1768,1758],{"class":692},[320,1770,1771],{"class":688}," >",[320,1773,1775],{"class":1774},"sbssI"," 2000",[320,1777,1107],{"class":1012},[320,1779,1687],{"class":692},[320,1781,1029],{"class":688},[320,1783,1784],{"class":692},"shouldKeep",[320,1786,816],{"class":688},[320,1788,1790],{"class":1789},"sfNiH"," true\n",[320,1792,1793],{"class":322,"line":874},[320,1794,1728],{"class":688},[320,1796,1797,1799],{"class":322,"line":879},[320,1798,786],{"class":688},[320,1800,1801],{"class":692},"))\n",[320,1803,1804],{"class":322,"line":892},[320,1805,801],{"emptyLinePlaceholder":800},[320,1807,1808,1810,1812,1815,1817,1819,1822,1824,1826,1828,1830,1832,1834,1836,1838],{"class":322,"line":897},[320,1809,1627],{"class":692},[320,1811,1029],{"class":688},[320,1813,1814],{"class":847},"get",[320,1816,908],{"class":692},[320,1818,863],{"class":688},[320,1820,1821],{"class":329},"\u002Fapi\u002Fusers",[320,1823,863],{"class":688},[320,1825,696],{"class":688},[320,1827,936],{"class":688},[320,1829,939],{"class":911},[320,1831,696],{"class":688},[320,1833,948],{"class":911},[320,1835,526],{"class":688},[320,1837,965],{"class":810},[320,1839,744],{"class":688},[320,1841,1842,1845,1847,1849,1851,1854,1856,1858,1861,1863,1865,1868,1870,1873,1875,1877],{"class":322,"line":927},[320,1843,1844],{"class":692},"  req",[320,1846,1029],{"class":688},[320,1848,1247],{"class":692},[320,1850,1029],{"class":688},[320,1852,1853],{"class":847},"set",[320,1855,908],{"class":1012},[320,1857,1304],{"class":688},[320,1859,1860],{"class":1012}," users",[320,1862,915],{"class":688},[320,1864,689],{"class":688},[320,1866,1867],{"class":1012}," count",[320,1869,915],{"class":688},[320,1871,1872],{"class":1774}," 42",[320,1874,702],{"class":688},[320,1876,702],{"class":688},[320,1878,871],{"class":1012},[320,1880,1881,1884,1886,1889,1891,1893,1895,1897,1900,1902],{"class":322,"line":984},[320,1882,1883],{"class":692},"  res",[320,1885,1029],{"class":688},[320,1887,1888],{"class":847},"json",[320,1890,908],{"class":1012},[320,1892,1304],{"class":688},[320,1894,1860],{"class":1012},[320,1896,915],{"class":688},[320,1898,1899],{"class":1012}," [] ",[320,1901,786],{"class":688},[320,1903,871],{"class":1012},[320,1905,1906,1908],{"class":322,"line":1018},[320,1907,786],{"class":688},[320,1909,871],{"class":692},[320,1911,1912],{"class":322,"line":1046},[320,1913,801],{"emptyLinePlaceholder":800},[320,1915,1916],{"class":322,"line":1072},[320,1917,1919],{"class":1918},"sHwdD","\u002F\u002F Access logger from anywhere in the call stack\n",[320,1921,1922,1925,1928,1930],{"class":322,"line":1126},[320,1923,1924],{"class":810},"function",[320,1926,1927],{"class":847}," findUsers",[320,1929,1121],{"class":688},[320,1931,744],{"class":688},[320,1933,1934,1937,1939,1941,1943],{"class":322,"line":1149},[320,1935,1936],{"class":810},"  const",[320,1938,1234],{"class":692},[320,1940,816],{"class":688},[320,1942,886],{"class":847},[320,1944,1194],{"class":1012},[320,1946,1947,1950,1952,1954,1956,1958,1961,1963,1965,1968,1970,1972,1975,1977,1979,1981],{"class":322,"line":1159},[320,1948,1949],{"class":692},"  log",[320,1951,1029],{"class":688},[320,1953,1853],{"class":847},[320,1955,908],{"class":1012},[320,1957,1304],{"class":688},[320,1959,1960],{"class":1012}," db",[320,1962,915],{"class":688},[320,1964,689],{"class":688},[320,1966,1967],{"class":1012}," query",[320,1969,915],{"class":688},[320,1971,708],{"class":688},[320,1973,1974],{"class":329},"SELECT * FROM users",[320,1976,863],{"class":688},[320,1978,702],{"class":688},[320,1980,702],{"class":688},[320,1982,871],{"class":1012},[320,1984,1985],{"class":322,"line":1167},[320,1986,1389],{"class":688},[302,1988,1990],{"id":1989},"reference-implementations","Reference Implementations",[282,1992,1993],{},"Study these built-in integrations for framework-specific patterns:",[368,1995,1996,2012],{},[371,1997,1998],{},[374,1999,2000,2003,2006,2009],{},[377,2001,2002],{},"Framework",[377,2004,2005],{},"Lines",[377,2007,2008],{},"Pattern",[377,2010,2011],{},"Source",[384,2013,2014,2037,2059,2085],{},[374,2015,2016,2018,2021,2028],{},[389,2017,150],{},[389,2019,2020],{},"~40",[389,2022,2023,2024,2027],{},"Web API Headers, ",[286,2025,2026],{},"c.set()",", try\u002Fcatch",[389,2029,2030],{},[2031,2032,2036],"a",{"href":2033,"rel":2034},"https:\u002F\u002Fgithub.com\u002Fhugorcd\u002Fevlog\u002Fblob\u002Fmain\u002Fpackages\u002Fevlog\u002Fsrc\u002Fhono\u002Findex.ts",[2035],"nofollow","hono\u002Findex.ts",[374,2038,2039,2041,2044,2052],{},[389,2040,145],{},[389,2042,2043],{},"~60",[389,2045,2046,2047,410,2049],{},"Node.js headers, ",[286,2048,639],{},[286,2050,2051],{},"res.on('finish')",[389,2053,2054],{},[2031,2055,2058],{"href":2056,"rel":2057},"https:\u002F\u002Fgithub.com\u002Fhugorcd\u002Fevlog\u002Fblob\u002Fmain\u002Fpackages\u002Fevlog\u002Fsrc\u002Fexpress\u002Findex.ts",[2035],"express\u002Findex.ts",[374,2060,2061,2063,2066,2078],{},[389,2062,160],{},[389,2064,2065],{},"~70",[389,2067,2068,2069,410,2072,1065,2075],{},"Plugin API, ",[286,2070,2071],{},"derive()",[286,2073,2074],{},"onAfterHandle",[286,2076,2077],{},"onError",[389,2079,2080],{},[2031,2081,2084],{"href":2082,"rel":2083},"https:\u002F\u002Fgithub.com\u002Fhugorcd\u002Fevlog\u002Fblob\u002Fmain\u002Fpackages\u002Fevlog\u002Fsrc\u002Felysia\u002Findex.ts",[2035],"elysia\u002Findex.ts",[374,2086,2087,2089,2091,2104],{},[389,2088,155],{},[389,2090,2065],{},[389,2092,2093,2094,410,2097,1065,2100,2103],{},"Plugin, ",[286,2095,2096],{},"decorateRequest",[286,2098,2099],{},"onRequest",[286,2101,2102],{},"onResponse"," hooks",[389,2105,2106],{},[2031,2107,2110],{"href":2108,"rel":2109},"https:\u002F\u002Fgithub.com\u002Fhugorcd\u002Fevlog\u002Fblob\u002Fmain\u002Fpackages\u002Fevlog\u002Fsrc\u002Ffastify\u002Findex.ts",[2035],"fastify\u002Findex.ts",[291,2112,2115,2116,2121],{"color":2113,"icon":2114},"neutral","i-lucide-heart","Built an integration for a framework we don't support? ",[2031,2117,2120],{"href":2118,"rel":2119},"https:\u002F\u002Fgithub.com\u002Fhugorcd\u002Fevlog\u002Fpulls",[2035],"Open a PR"," - the community will thank you.",[302,2123,2125],{"id":2124},"next-steps","Next Steps",[2127,2128,2129,2134,2139,2144],"ul",{},[590,2130,2131,2133],{},[2031,2132,46],{"href":47},": Design comprehensive events with context layering",[590,2135,2136,2138],{},[2031,2137,188],{"href":193},": Send logs to Axiom, Sentry, PostHog, and more",[590,2140,2141,2143],{},[2031,2142,81],{"href":82},": Control log volume with head and tail sampling",[590,2145,2146,2148,2149,410,2152,562,2155,2158],{},[2031,2147,51],{"href":52},": Throw errors with ",[286,2150,2151],{},"why",[286,2153,2154],{},"fix",[286,2156,2157],{},"link"," fields",[2160,2161,2162],"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 .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}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 .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}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}",{"title":316,"searchDepth":717,"depth":717,"links":2164},[2165,2166,2167,2168,2169,2170,2171,2172],{"id":304,"depth":717,"text":305},{"id":365,"depth":717,"text":366},{"id":573,"depth":717,"text":574},{"id":664,"depth":717,"text":665},{"id":1399,"depth":717,"text":1400},{"id":1508,"depth":717,"text":1509},{"id":1989,"depth":717,"text":1990},{"id":2124,"depth":717,"text":2125},"Build your own evlog framework integration using the toolkit API with createMiddlewareLogger, header extraction, AsyncLocalStorage, and the full drain\u002Fenrich\u002Fkeep pipeline.","md",null,{},{"title":183,"icon":186},{"title":183,"description":2173},"EQ6JjpZ9onn8gb01AOtKcBsrTyu_czukdMa_gu7AeAs",[2181,2183],{"title":178,"path":179,"stem":180,"description":2182,"icon":181,"children":-1},"Wide events and structured errors in Astro server middleware.",{"title":36,"path":193,"stem":194,"description":2184,"icon":195,"children":-1},"Send your logs to external services with evlog adapters. Built-in support for popular observability platforms and custom destinations.",1775288557309]