[{"data":1,"prerenderedAt":2696},["ShallowReactive",2],{"navigation_docs":3,"-frameworks-sveltekit":243,"-frameworks-sveltekit-surround":2691},[4,30,110,159,213,229],{"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},"Frameworks","\u002Fframeworks","2.frameworks",[35,40,45,50,55,60,65,70,75,80,85,90,95,100,105],{"title":36,"path":37,"stem":38,"icon":39},"Overview","\u002Fframeworks\u002Foverview","2.frameworks\u002F00.overview","i-lucide-layout-grid",{"title":41,"path":42,"stem":43,"icon":44},"Nuxt","\u002Fframeworks\u002Fnuxt","2.frameworks\u002F01.nuxt","i-simple-icons-nuxtdotjs",{"title":46,"path":47,"stem":48,"icon":49},"Next.js","\u002Fframeworks\u002Fnextjs","2.frameworks\u002F02.nextjs","i-simple-icons-nextdotjs",{"title":51,"path":52,"stem":53,"icon":54},"SvelteKit","\u002Fframeworks\u002Fsveltekit","2.frameworks\u002F03.sveltekit","i-simple-icons-svelte",{"title":56,"path":57,"stem":58,"icon":59},"Nitro","\u002Fframeworks\u002Fnitro","2.frameworks\u002F04.nitro","i-custom-nitro",{"title":61,"path":62,"stem":63,"icon":64},"TanStack Start","\u002Fframeworks\u002Ftanstack-start","2.frameworks\u002F05.tanstack-start","i-custom-tanstack",{"title":66,"path":67,"stem":68,"icon":69},"NestJS","\u002Fframeworks\u002Fnestjs","2.frameworks\u002F06.nestjs","i-simple-icons-nestjs",{"title":71,"path":72,"stem":73,"icon":74},"Express","\u002Fframeworks\u002Fexpress","2.frameworks\u002F07.express","i-simple-icons-express",{"title":76,"path":77,"stem":78,"icon":79},"Hono","\u002Fframeworks\u002Fhono","2.frameworks\u002F08.hono","i-simple-icons-hono",{"title":81,"path":82,"stem":83,"icon":84},"Fastify","\u002Fframeworks\u002Ffastify","2.frameworks\u002F09.fastify","i-simple-icons-fastify",{"title":86,"path":87,"stem":88,"icon":89},"Elysia","\u002Fframeworks\u002Felysia","2.frameworks\u002F10.elysia","i-custom-elysia",{"title":91,"path":92,"stem":93,"icon":94},"Cloudflare Workers","\u002Fframeworks\u002Fcloudflare-workers","2.frameworks\u002F11.cloudflare-workers","i-simple-icons-cloudflare",{"title":96,"path":97,"stem":98,"icon":99},"Standalone","\u002Fframeworks\u002Fstandalone","2.frameworks\u002F12.standalone","i-simple-icons-typescript",{"title":101,"path":102,"stem":103,"icon":104},"Astro","\u002Fframeworks\u002Fastro","2.frameworks\u002F13.astro","i-simple-icons-astro",{"title":106,"path":107,"stem":108,"icon":109},"Custom Integration","\u002Fframeworks\u002Fcustom-integration","2.frameworks\u002F14.custom-integration","i-lucide-puzzle",{"title":111,"path":112,"stem":113,"children":114,"page":29},"Core Concepts","\u002Fcore-concepts","3.core-concepts",[115,120,125,130,135,139,144,149,154],{"title":116,"path":117,"stem":118,"icon":119},"Request Lifecycle","\u002Fcore-concepts\u002Flifecycle","3.core-concepts\u002F0.lifecycle","i-lucide-arrow-right-left",{"title":121,"path":122,"stem":123,"icon":124},"Wide Events","\u002Fcore-concepts\u002Fwide-events","3.core-concepts\u002F1.wide-events","i-lucide-layers",{"title":126,"path":127,"stem":128,"icon":129},"Structured Errors","\u002Fcore-concepts\u002Fstructured-errors","3.core-concepts\u002F2.structured-errors","i-lucide-shield-alert",{"title":131,"path":132,"stem":133,"icon":134},"Best Practices","\u002Fcore-concepts\u002Fbest-practices","3.core-concepts\u002F3.best-practices","i-lucide-shield-check",{"title":136,"path":137,"stem":138,"icon":99},"Typed Fields","\u002Fcore-concepts\u002Ftyped-fields","3.core-concepts\u002F4.typed-fields",{"title":140,"path":141,"stem":142,"icon":143},"Sampling","\u002Fcore-concepts\u002Fsampling","3.core-concepts\u002F5.sampling","i-lucide-filter",{"title":145,"path":146,"stem":147,"icon":148},"Client Logging","\u002Fcore-concepts\u002Fclient-logging","3.core-concepts\u002F6.client-logging","i-lucide-monitor",{"title":150,"path":151,"stem":152,"icon":153},"Configuration","\u002Fcore-concepts\u002Fconfiguration","3.core-concepts\u002F7.configuration","i-lucide-settings",{"title":155,"path":156,"stem":157,"icon":158},"Performance","\u002Fcore-concepts\u002Fperformance","3.core-concepts\u002F8.performance","i-lucide-gauge",{"title":160,"path":161,"stem":162,"children":163,"page":29},"Adapters","\u002Fadapters","4.adapters",[164,168,173,178,183,188,193,198,203,208],{"title":36,"path":165,"stem":166,"icon":167},"\u002Fadapters\u002Foverview","4.adapters\u002F1.overview","i-custom-plug",{"title":169,"path":170,"stem":171,"icon":172},"Browser","\u002Fadapters\u002Fbrowser","4.adapters\u002F10.browser","i-lucide-globe",{"title":174,"path":175,"stem":176,"icon":177},"Axiom","\u002Fadapters\u002Faxiom","4.adapters\u002F2.axiom","i-custom-axiom",{"title":179,"path":180,"stem":181,"icon":182},"OTLP","\u002Fadapters\u002Fotlp","4.adapters\u002F3.otlp","i-simple-icons-opentelemetry",{"title":184,"path":185,"stem":186,"icon":187},"PostHog","\u002Fadapters\u002Fposthog","4.adapters\u002F4.posthog","i-simple-icons-posthog",{"title":189,"path":190,"stem":191,"icon":192},"Sentry","\u002Fadapters\u002Fsentry","4.adapters\u002F5.sentry","i-simple-icons-sentry",{"title":194,"path":195,"stem":196,"icon":197},"Better Stack","\u002Fadapters\u002Fbetter-stack","4.adapters\u002F6.better-stack","i-simple-icons-betterstack",{"title":199,"path":200,"stem":201,"icon":202},"File System","\u002Fadapters\u002Ffs","4.adapters\u002F7.fs","i-lucide-hard-drive",{"title":204,"path":205,"stem":206,"icon":207},"Custom Adapters","\u002Fadapters\u002Fcustom","4.adapters\u002F8.custom","i-lucide-code",{"title":209,"path":210,"stem":211,"icon":212},"Pipeline","\u002Fadapters\u002Fpipeline","4.adapters\u002F9.pipeline","i-lucide-workflow",{"title":214,"path":215,"stem":216,"children":217,"page":29},"Enrichers","\u002Fenrichers","5.enrichers",[218,221,225],{"title":36,"path":219,"stem":220,"icon":28},"\u002Fenrichers\u002Foverview","5.enrichers\u002F1.overview",{"title":222,"path":223,"stem":224,"icon":109},"Built-in","\u002Fenrichers\u002Fbuilt-in","5.enrichers\u002F2.built-in",{"title":226,"path":227,"stem":228,"icon":207},"Custom","\u002Fenrichers\u002Fcustom","5.enrichers\u002F3.custom",{"title":230,"path":231,"stem":232,"children":233,"page":29},"NuxtHub","\u002Fnuxthub","6.nuxthub",[234,238],{"title":36,"path":235,"stem":236,"icon":237},"\u002Fnuxthub\u002Foverview","6.nuxthub\u002F1.overview","i-lucide-database",{"title":239,"path":240,"stem":241,"icon":242},"Retention","\u002Fnuxthub\u002Fretention","6.nuxthub\u002F2.retention","i-lucide-clock",{"id":244,"title":51,"body":245,"description":2681,"extension":2682,"links":2683,"meta":2687,"navigation":2688,"path":52,"seo":2689,"stem":53,"__hash__":2690},"docs\u002F2.frameworks\u002F03.sveltekit.md",{"type":246,"value":247,"toc":2664},"minimark",[248,272,353,357,362,382,386,527,531,630,633,636,983,986,1051,1054,1060,1242,1373,1388,1392,1413,1676,1679,1736,1739,1750,1754,1757,2010,2014,2021,2295,2308,2312,2318,2431,2435,2445,2597,2601,2641,2650,2660],[249,250,251,252,256,257,260,261,264,265,260,268,271],"p",{},"The ",[253,254,255],"code",{},"evlog\u002Fsveltekit"," adapter provides ",[253,258,259],{},"handle"," and ",[253,262,263],{},"handleError"," hooks that auto-create a request-scoped logger accessible via ",[253,266,267],{},"event.locals.log",[253,269,270],{},"useLogger()",", emitting a wide event when the response completes.",[273,274,275],"code-collapse",{},[276,277,283],"pre",{"className":278,"code":279,"filename":280,"language":281,"meta":282,"style":282},"language-txt shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","Set up evlog in my SvelteKit app.\n\n- Install evlog: pnpm add evlog\n- Call initLogger({ env: { service: 'my-app' } }) in hooks.server.ts\n- Export handle and handleError from evlog\u002Fsveltekit in hooks.server.ts\n- Access the logger via event.locals.log or useLogger() in routes and services\n- Use log.set() to accumulate context, throw createError() for structured errors\n- Wide events are auto-emitted when each request completes\n\nDocs: https:\u002F\u002Fwww.evlog.dev\u002Fframeworks\u002Fsveltekit\nAdapters: https:\u002F\u002Fwww.evlog.dev\u002Fadapters\n","Prompt","txt","",[253,284,285,293,300,306,312,318,324,330,336,341,347],{"__ignoreMap":282},[286,287,290],"span",{"class":288,"line":289},"line",1,[286,291,292],{},"Set up evlog in my SvelteKit app.\n",[286,294,296],{"class":288,"line":295},2,[286,297,299],{"emptyLinePlaceholder":298},true,"\n",[286,301,303],{"class":288,"line":302},3,[286,304,305],{},"- Install evlog: pnpm add evlog\n",[286,307,309],{"class":288,"line":308},4,[286,310,311],{},"- Call initLogger({ env: { service: 'my-app' } }) in hooks.server.ts\n",[286,313,315],{"class":288,"line":314},5,[286,316,317],{},"- Export handle and handleError from evlog\u002Fsveltekit in hooks.server.ts\n",[286,319,321],{"class":288,"line":320},6,[286,322,323],{},"- Access the logger via event.locals.log or useLogger() in routes and services\n",[286,325,327],{"class":288,"line":326},7,[286,328,329],{},"- Use log.set() to accumulate context, throw createError() for structured errors\n",[286,331,333],{"class":288,"line":332},8,[286,334,335],{},"- Wide events are auto-emitted when each request completes\n",[286,337,339],{"class":288,"line":338},9,[286,340,299],{"emptyLinePlaceholder":298},[286,342,344],{"class":288,"line":343},10,[286,345,346],{},"Docs: https:\u002F\u002Fwww.evlog.dev\u002Fframeworks\u002Fsveltekit\n",[286,348,350],{"class":288,"line":349},11,[286,351,352],{},"Adapters: https:\u002F\u002Fwww.evlog.dev\u002Fadapters\n",[354,355,20],"h2",{"id":356},"quick-start",[358,359,361],"h3",{"id":360},"_1-install","1. Install",[276,363,367],{"className":364,"code":365,"language":366,"meta":282,"style":282},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","bun add evlog\n","bash",[253,368,369],{"__ignoreMap":282},[286,370,371,375,379],{"class":288,"line":289},[286,372,374],{"class":373},"sBMFI","bun",[286,376,378],{"class":377},"sfazB"," add",[286,380,381],{"class":377}," evlog\n",[358,383,385],{"id":384},"_2-initialize-and-create-hooks","2. Initialize and create hooks",[276,387,392],{"className":388,"code":389,"filename":390,"language":391,"meta":282,"style":282},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { initLogger } from 'evlog'\nimport { createEvlogHooks } from 'evlog\u002Fsveltekit'\n\ninitLogger({\n  env: { service: 'my-api' },\n})\n\nexport const { handle, handleError } = createEvlogHooks()\n","src\u002Fhooks.server.ts","typescript",[253,393,394,423,442,446,458,485,493,497],{"__ignoreMap":282},[286,395,396,400,404,408,411,414,417,420],{"class":288,"line":289},[286,397,399],{"class":398},"s7zQu","import",[286,401,403],{"class":402},"sMK4o"," {",[286,405,407],{"class":406},"sTEyZ"," initLogger",[286,409,410],{"class":402}," }",[286,412,413],{"class":398}," from",[286,415,416],{"class":402}," '",[286,418,419],{"class":377},"evlog",[286,421,422],{"class":402},"'\n",[286,424,425,427,429,432,434,436,438,440],{"class":288,"line":295},[286,426,399],{"class":398},[286,428,403],{"class":402},[286,430,431],{"class":406}," createEvlogHooks",[286,433,410],{"class":402},[286,435,413],{"class":398},[286,437,416],{"class":402},[286,439,255],{"class":377},[286,441,422],{"class":402},[286,443,444],{"class":288,"line":302},[286,445,299],{"emptyLinePlaceholder":298},[286,447,448,452,455],{"class":288,"line":308},[286,449,451],{"class":450},"s2Zo4","initLogger",[286,453,454],{"class":406},"(",[286,456,457],{"class":402},"{\n",[286,459,460,464,467,469,472,474,476,479,482],{"class":288,"line":314},[286,461,463],{"class":462},"swJcz","  env",[286,465,466],{"class":402},":",[286,468,403],{"class":402},[286,470,471],{"class":462}," service",[286,473,466],{"class":402},[286,475,416],{"class":402},[286,477,478],{"class":377},"my-api",[286,480,481],{"class":402},"'",[286,483,484],{"class":402}," },\n",[286,486,487,490],{"class":288,"line":320},[286,488,489],{"class":402},"}",[286,491,492],{"class":406},")\n",[286,494,495],{"class":288,"line":326},[286,496,299],{"emptyLinePlaceholder":298},[286,498,499,502,506,508,511,514,517,519,522,524],{"class":288,"line":332},[286,500,501],{"class":398},"export",[286,503,505],{"class":504},"spNyl"," const",[286,507,403],{"class":402},[286,509,510],{"class":406}," handle",[286,512,513],{"class":402},",",[286,515,516],{"class":406}," handleError ",[286,518,489],{"class":402},[286,520,521],{"class":402}," =",[286,523,431],{"class":450},[286,525,526],{"class":406},"()\n",[358,528,530],{"id":529},"_3-type-your-locals","3. Type your locals",[276,532,535],{"className":388,"code":533,"filename":534,"language":391,"meta":282,"style":282},"import type { RequestLogger } from 'evlog'\n\ndeclare global {\n  namespace App {\n    interface Locals {\n      log: RequestLogger\n    }\n  }\n}\n\nexport {}\n","src\u002Fapp.d.ts",[253,536,537,559,563,573,584,594,604,609,614,619,623],{"__ignoreMap":282},[286,538,539,541,544,546,549,551,553,555,557],{"class":288,"line":289},[286,540,399],{"class":398},[286,542,543],{"class":398}," type",[286,545,403],{"class":402},[286,547,548],{"class":406}," RequestLogger",[286,550,410],{"class":402},[286,552,413],{"class":398},[286,554,416],{"class":402},[286,556,419],{"class":377},[286,558,422],{"class":402},[286,560,561],{"class":288,"line":295},[286,562,299],{"emptyLinePlaceholder":298},[286,564,565,568,571],{"class":288,"line":302},[286,566,567],{"class":504},"declare",[286,569,570],{"class":406}," global ",[286,572,457],{"class":402},[286,574,575,578,581],{"class":288,"line":308},[286,576,577],{"class":504},"  namespace",[286,579,580],{"class":373}," App",[286,582,583],{"class":402}," {\n",[286,585,586,589,592],{"class":288,"line":314},[286,587,588],{"class":504},"    interface",[286,590,591],{"class":373}," Locals",[286,593,583],{"class":402},[286,595,596,599,601],{"class":288,"line":320},[286,597,598],{"class":462},"      log",[286,600,466],{"class":402},[286,602,603],{"class":373}," RequestLogger\n",[286,605,606],{"class":288,"line":326},[286,607,608],{"class":402},"    }\n",[286,610,611],{"class":288,"line":332},[286,612,613],{"class":402},"  }\n",[286,615,616],{"class":288,"line":338},[286,617,618],{"class":402},"}\n",[286,620,621],{"class":288,"line":343},[286,622,299],{"emptyLinePlaceholder":298},[286,624,625,627],{"class":288,"line":349},[286,626,501],{"class":398},[286,628,629],{"class":402}," {}\n",[354,631,121],{"id":632},"wide-events",[249,634,635],{},"Build up context progressively through your handler. One request = one wide event:",[276,637,640],{"className":388,"code":638,"filename":639,"language":391,"meta":282,"style":282},"import { json } from '@sveltejs\u002Fkit'\nimport type { RequestHandler } from '.\u002F$types'\n\nexport const GET: RequestHandler = async ({ locals, params }) => {\n  locals.log.set({ user: { id: params.id } })\n\n  const user = await db.findUser(params.id)\n  locals.log.set({ user: { name: user.name, plan: user.plan } })\n\n  const orders = await db.findOrders(params.id)\n  locals.log.set({ orders: { count: orders.length, totalRevenue: sum(orders) } })\n\n  return json({ user, orders })\n}\n","src\u002Froutes\u002Fapi\u002Fusers\u002F[id]\u002F+server.ts",[253,641,642,662,684,688,726,772,776,807,861,865,893,951,956,978],{"__ignoreMap":282},[286,643,644,646,648,651,653,655,657,660],{"class":288,"line":289},[286,645,399],{"class":398},[286,647,403],{"class":402},[286,649,650],{"class":406}," json",[286,652,410],{"class":402},[286,654,413],{"class":398},[286,656,416],{"class":402},[286,658,659],{"class":377},"@sveltejs\u002Fkit",[286,661,422],{"class":402},[286,663,664,666,668,670,673,675,677,679,682],{"class":288,"line":295},[286,665,399],{"class":398},[286,667,543],{"class":398},[286,669,403],{"class":402},[286,671,672],{"class":406}," RequestHandler",[286,674,410],{"class":402},[286,676,413],{"class":398},[286,678,416],{"class":402},[286,680,681],{"class":377},".\u002F$types",[286,683,422],{"class":402},[286,685,686],{"class":288,"line":302},[286,687,299],{"emptyLinePlaceholder":298},[286,689,690,692,694,697,699,701,703,706,709,713,715,718,721,724],{"class":288,"line":308},[286,691,501],{"class":398},[286,693,505],{"class":504},[286,695,696],{"class":406}," GET",[286,698,466],{"class":402},[286,700,672],{"class":373},[286,702,521],{"class":402},[286,704,705],{"class":504}," async",[286,707,708],{"class":402}," ({",[286,710,712],{"class":711},"sHdIc"," locals",[286,714,513],{"class":402},[286,716,717],{"class":711}," params",[286,719,720],{"class":402}," })",[286,722,723],{"class":504}," =>",[286,725,583],{"class":402},[286,727,728,731,734,737,739,742,744,747,750,752,754,757,759,761,763,766,768,770],{"class":288,"line":314},[286,729,730],{"class":406},"  locals",[286,732,733],{"class":402},".",[286,735,736],{"class":406},"log",[286,738,733],{"class":402},[286,740,741],{"class":450},"set",[286,743,454],{"class":462},[286,745,746],{"class":402},"{",[286,748,749],{"class":462}," user",[286,751,466],{"class":402},[286,753,403],{"class":402},[286,755,756],{"class":462}," id",[286,758,466],{"class":402},[286,760,717],{"class":406},[286,762,733],{"class":402},[286,764,765],{"class":406},"id",[286,767,410],{"class":402},[286,769,410],{"class":402},[286,771,492],{"class":462},[286,773,774],{"class":288,"line":320},[286,775,299],{"emptyLinePlaceholder":298},[286,777,778,781,783,785,788,791,793,796,798,801,803,805],{"class":288,"line":326},[286,779,780],{"class":504},"  const",[286,782,749],{"class":406},[286,784,521],{"class":402},[286,786,787],{"class":398}," await",[286,789,790],{"class":406}," db",[286,792,733],{"class":402},[286,794,795],{"class":450},"findUser",[286,797,454],{"class":462},[286,799,800],{"class":406},"params",[286,802,733],{"class":402},[286,804,765],{"class":406},[286,806,492],{"class":462},[286,808,809,811,813,815,817,819,821,823,825,827,829,832,834,836,838,841,843,846,848,850,852,855,857,859],{"class":288,"line":332},[286,810,730],{"class":406},[286,812,733],{"class":402},[286,814,736],{"class":406},[286,816,733],{"class":402},[286,818,741],{"class":450},[286,820,454],{"class":462},[286,822,746],{"class":402},[286,824,749],{"class":462},[286,826,466],{"class":402},[286,828,403],{"class":402},[286,830,831],{"class":462}," name",[286,833,466],{"class":402},[286,835,749],{"class":406},[286,837,733],{"class":402},[286,839,840],{"class":406},"name",[286,842,513],{"class":402},[286,844,845],{"class":462}," plan",[286,847,466],{"class":402},[286,849,749],{"class":406},[286,851,733],{"class":402},[286,853,854],{"class":406},"plan",[286,856,410],{"class":402},[286,858,410],{"class":402},[286,860,492],{"class":462},[286,862,863],{"class":288,"line":338},[286,864,299],{"emptyLinePlaceholder":298},[286,866,867,869,872,874,876,878,880,883,885,887,889,891],{"class":288,"line":343},[286,868,780],{"class":504},[286,870,871],{"class":406}," orders",[286,873,521],{"class":402},[286,875,787],{"class":398},[286,877,790],{"class":406},[286,879,733],{"class":402},[286,881,882],{"class":450},"findOrders",[286,884,454],{"class":462},[286,886,800],{"class":406},[286,888,733],{"class":402},[286,890,765],{"class":406},[286,892,492],{"class":462},[286,894,895,897,899,901,903,905,907,909,911,913,915,918,920,922,924,927,929,932,934,937,939,942,945,947,949],{"class":288,"line":349},[286,896,730],{"class":406},[286,898,733],{"class":402},[286,900,736],{"class":406},[286,902,733],{"class":402},[286,904,741],{"class":450},[286,906,454],{"class":462},[286,908,746],{"class":402},[286,910,871],{"class":462},[286,912,466],{"class":402},[286,914,403],{"class":402},[286,916,917],{"class":462}," count",[286,919,466],{"class":402},[286,921,871],{"class":406},[286,923,733],{"class":402},[286,925,926],{"class":406},"length",[286,928,513],{"class":402},[286,930,931],{"class":462}," totalRevenue",[286,933,466],{"class":402},[286,935,936],{"class":450}," sum",[286,938,454],{"class":462},[286,940,941],{"class":406},"orders",[286,943,944],{"class":462},") ",[286,946,489],{"class":402},[286,948,410],{"class":402},[286,950,492],{"class":462},[286,952,954],{"class":288,"line":953},12,[286,955,299],{"emptyLinePlaceholder":298},[286,957,959,962,964,966,968,970,972,974,976],{"class":288,"line":958},13,[286,960,961],{"class":398},"  return",[286,963,650],{"class":450},[286,965,454],{"class":462},[286,967,746],{"class":402},[286,969,749],{"class":406},[286,971,513],{"class":402},[286,973,871],{"class":406},[286,975,410],{"class":402},[286,977,492],{"class":462},[286,979,981],{"class":288,"line":980},14,[286,982,618],{"class":402},[249,984,985],{},"All fields are merged into a single wide event emitted when the request completes:",[276,987,990],{"className":364,"code":988,"filename":989,"language":366,"meta":282,"style":282},"14:58:15 INFO [my-api] GET \u002Fapi\u002Fusers\u002Fusr_123 200 in 12ms\n  ├─ orders: count=2 totalRevenue=6298\n  ├─ user: id=usr_123 name=Alice plan=pro\n  └─ requestId: 4a8ff3a8-...\n","Terminal output",[253,991,992,1003,1024,1040],{"__ignoreMap":282},[286,993,994,997,1000],{"class":288,"line":289},[286,995,996],{"class":373},"14:58:15",[286,998,999],{"class":377}," INFO",[286,1001,1002],{"class":406}," [my-api] GET \u002Fapi\u002Fusers\u002Fusr_123 200 in 12ms\n",[286,1004,1005,1008,1011,1014,1018,1021],{"class":288,"line":295},[286,1006,1007],{"class":373},"  ├─",[286,1009,1010],{"class":377}," orders:",[286,1012,1013],{"class":377}," count=",[286,1015,1017],{"class":1016},"sbssI","2",[286,1019,1020],{"class":377}," totalRevenue=",[286,1022,1023],{"class":1016},"6298\n",[286,1025,1026,1028,1031,1034,1037],{"class":288,"line":302},[286,1027,1007],{"class":373},[286,1029,1030],{"class":377}," user:",[286,1032,1033],{"class":377}," id=usr_123",[286,1035,1036],{"class":377}," name=Alice",[286,1038,1039],{"class":377}," plan=pro\n",[286,1041,1042,1045,1048],{"class":288,"line":308},[286,1043,1044],{"class":373},"  └─",[286,1046,1047],{"class":377}," requestId:",[286,1049,1050],{"class":377}," 4a8ff3a8-...\n",[354,1052,270],{"id":1053},"uselogger",[249,1055,1056,1057,1059],{},"Use ",[253,1058,270],{}," to access the request-scoped logger from anywhere in the call stack without passing locals through your service layer:",[276,1061,1064],{"className":388,"code":1062,"filename":1063,"language":391,"meta":282,"style":282},"import { useLogger } from 'evlog\u002Fsveltekit'\n\nexport async function findUser(id: string) {\n  const log = useLogger()\n  log.set({ user: { id } })\n\n  const user = await db.findUser(id)\n  log.set({ user: { name: user.name, plan: user.plan } })\n\n  return user\n}\n","src\u002Flib\u002Fservices\u002Fuser.ts",[253,1065,1066,1085,1089,1115,1128,1155,1159,1181,1227,1231,1238],{"__ignoreMap":282},[286,1067,1068,1070,1072,1075,1077,1079,1081,1083],{"class":288,"line":289},[286,1069,399],{"class":398},[286,1071,403],{"class":402},[286,1073,1074],{"class":406}," useLogger",[286,1076,410],{"class":402},[286,1078,413],{"class":398},[286,1080,416],{"class":402},[286,1082,255],{"class":377},[286,1084,422],{"class":402},[286,1086,1087],{"class":288,"line":295},[286,1088,299],{"emptyLinePlaceholder":298},[286,1090,1091,1093,1095,1098,1101,1103,1105,1107,1110,1113],{"class":288,"line":302},[286,1092,501],{"class":398},[286,1094,705],{"class":504},[286,1096,1097],{"class":504}," function",[286,1099,1100],{"class":450}," findUser",[286,1102,454],{"class":402},[286,1104,765],{"class":711},[286,1106,466],{"class":402},[286,1108,1109],{"class":373}," string",[286,1111,1112],{"class":402},")",[286,1114,583],{"class":402},[286,1116,1117,1119,1122,1124,1126],{"class":288,"line":308},[286,1118,780],{"class":504},[286,1120,1121],{"class":406}," log",[286,1123,521],{"class":402},[286,1125,1074],{"class":450},[286,1127,526],{"class":462},[286,1129,1130,1133,1135,1137,1139,1141,1143,1145,1147,1149,1151,1153],{"class":288,"line":314},[286,1131,1132],{"class":406},"  log",[286,1134,733],{"class":402},[286,1136,741],{"class":450},[286,1138,454],{"class":462},[286,1140,746],{"class":402},[286,1142,749],{"class":462},[286,1144,466],{"class":402},[286,1146,403],{"class":402},[286,1148,756],{"class":406},[286,1150,410],{"class":402},[286,1152,410],{"class":402},[286,1154,492],{"class":462},[286,1156,1157],{"class":288,"line":320},[286,1158,299],{"emptyLinePlaceholder":298},[286,1160,1161,1163,1165,1167,1169,1171,1173,1175,1177,1179],{"class":288,"line":326},[286,1162,780],{"class":504},[286,1164,749],{"class":406},[286,1166,521],{"class":402},[286,1168,787],{"class":398},[286,1170,790],{"class":406},[286,1172,733],{"class":402},[286,1174,795],{"class":450},[286,1176,454],{"class":462},[286,1178,765],{"class":406},[286,1180,492],{"class":462},[286,1182,1183,1185,1187,1189,1191,1193,1195,1197,1199,1201,1203,1205,1207,1209,1211,1213,1215,1217,1219,1221,1223,1225],{"class":288,"line":332},[286,1184,1132],{"class":406},[286,1186,733],{"class":402},[286,1188,741],{"class":450},[286,1190,454],{"class":462},[286,1192,746],{"class":402},[286,1194,749],{"class":462},[286,1196,466],{"class":402},[286,1198,403],{"class":402},[286,1200,831],{"class":462},[286,1202,466],{"class":402},[286,1204,749],{"class":406},[286,1206,733],{"class":402},[286,1208,840],{"class":406},[286,1210,513],{"class":402},[286,1212,845],{"class":462},[286,1214,466],{"class":402},[286,1216,749],{"class":406},[286,1218,733],{"class":402},[286,1220,854],{"class":406},[286,1222,410],{"class":402},[286,1224,410],{"class":402},[286,1226,492],{"class":462},[286,1228,1229],{"class":288,"line":338},[286,1230,299],{"emptyLinePlaceholder":298},[286,1232,1233,1235],{"class":288,"line":343},[286,1234,961],{"class":398},[286,1236,1237],{"class":406}," user\n",[286,1239,1240],{"class":288,"line":349},[286,1241,618],{"class":402},[276,1243,1245],{"className":388,"code":1244,"filename":639,"language":391,"meta":282,"style":282},"import { json } from '@sveltejs\u002Fkit'\nimport { findUser } from '$lib\u002Fservices\u002Fuser'\nimport type { RequestHandler } from '.\u002F$types'\n\nexport const GET: RequestHandler = async ({ params }) => {\n  const user = await findUser(params.id)\n  return json(user)\n}\n",[253,1246,1247,1265,1284,1304,1308,1334,1356,1369],{"__ignoreMap":282},[286,1248,1249,1251,1253,1255,1257,1259,1261,1263],{"class":288,"line":289},[286,1250,399],{"class":398},[286,1252,403],{"class":402},[286,1254,650],{"class":406},[286,1256,410],{"class":402},[286,1258,413],{"class":398},[286,1260,416],{"class":402},[286,1262,659],{"class":377},[286,1264,422],{"class":402},[286,1266,1267,1269,1271,1273,1275,1277,1279,1282],{"class":288,"line":295},[286,1268,399],{"class":398},[286,1270,403],{"class":402},[286,1272,1100],{"class":406},[286,1274,410],{"class":402},[286,1276,413],{"class":398},[286,1278,416],{"class":402},[286,1280,1281],{"class":377},"$lib\u002Fservices\u002Fuser",[286,1283,422],{"class":402},[286,1285,1286,1288,1290,1292,1294,1296,1298,1300,1302],{"class":288,"line":302},[286,1287,399],{"class":398},[286,1289,543],{"class":398},[286,1291,403],{"class":402},[286,1293,672],{"class":406},[286,1295,410],{"class":402},[286,1297,413],{"class":398},[286,1299,416],{"class":402},[286,1301,681],{"class":377},[286,1303,422],{"class":402},[286,1305,1306],{"class":288,"line":308},[286,1307,299],{"emptyLinePlaceholder":298},[286,1309,1310,1312,1314,1316,1318,1320,1322,1324,1326,1328,1330,1332],{"class":288,"line":314},[286,1311,501],{"class":398},[286,1313,505],{"class":504},[286,1315,696],{"class":406},[286,1317,466],{"class":402},[286,1319,672],{"class":373},[286,1321,521],{"class":402},[286,1323,705],{"class":504},[286,1325,708],{"class":402},[286,1327,717],{"class":711},[286,1329,720],{"class":402},[286,1331,723],{"class":504},[286,1333,583],{"class":402},[286,1335,1336,1338,1340,1342,1344,1346,1348,1350,1352,1354],{"class":288,"line":320},[286,1337,780],{"class":504},[286,1339,749],{"class":406},[286,1341,521],{"class":402},[286,1343,787],{"class":398},[286,1345,1100],{"class":450},[286,1347,454],{"class":462},[286,1349,800],{"class":406},[286,1351,733],{"class":402},[286,1353,765],{"class":406},[286,1355,492],{"class":462},[286,1357,1358,1360,1362,1364,1367],{"class":288,"line":326},[286,1359,961],{"class":398},[286,1361,650],{"class":450},[286,1363,454],{"class":462},[286,1365,1366],{"class":406},"user",[286,1368,492],{"class":462},[286,1370,1371],{"class":288,"line":332},[286,1372,618],{"class":402},[249,1374,1375,1376,260,1378,1380,1381,1383,1384,1387],{},"Both ",[253,1377,267],{},[253,1379,270],{}," return the same logger instance. ",[253,1382,270],{}," uses ",[253,1385,1386],{},"AsyncLocalStorage"," to propagate the logger across async boundaries.",[354,1389,1391],{"id":1390},"error-handling","Error Handling",[249,1393,1056,1394,1397,1398,1401,1402,1405,1406,1409,1410,1412],{},[253,1395,1396],{},"createError"," for structured errors with ",[253,1399,1400],{},"why",", ",[253,1403,1404],{},"fix",", and ",[253,1407,1408],{},"link"," fields. The ",[253,1411,263],{}," hook captures thrown errors automatically:",[276,1414,1417],{"className":388,"code":1415,"filename":1416,"language":391,"meta":282,"style":282},"import { json } from '@sveltejs\u002Fkit'\nimport { createError } from 'evlog'\nimport type { RequestHandler } from '.\u002F$types'\n\nexport const POST: RequestHandler = async ({ locals, request }) => {\n  const { cartId } = await request.json()\n  locals.log.set({ cart: { id: cartId } })\n\n  throw createError({\n    message: 'Payment failed',\n    status: 402,\n    why: 'Card declined by issuer',\n    fix: 'Try a different payment method',\n    link: 'https:\u002F\u002Fdocs.example.com\u002Fpayments\u002Fdeclined',\n  })\n}\n","src\u002Froutes\u002Fapi\u002Fcheckout\u002F+server.ts",[253,1418,1419,1437,1456,1476,1480,1512,1536,1571,1575,1586,1603,1615,1631,1647,1663,1671],{"__ignoreMap":282},[286,1420,1421,1423,1425,1427,1429,1431,1433,1435],{"class":288,"line":289},[286,1422,399],{"class":398},[286,1424,403],{"class":402},[286,1426,650],{"class":406},[286,1428,410],{"class":402},[286,1430,413],{"class":398},[286,1432,416],{"class":402},[286,1434,659],{"class":377},[286,1436,422],{"class":402},[286,1438,1439,1441,1443,1446,1448,1450,1452,1454],{"class":288,"line":295},[286,1440,399],{"class":398},[286,1442,403],{"class":402},[286,1444,1445],{"class":406}," createError",[286,1447,410],{"class":402},[286,1449,413],{"class":398},[286,1451,416],{"class":402},[286,1453,419],{"class":377},[286,1455,422],{"class":402},[286,1457,1458,1460,1462,1464,1466,1468,1470,1472,1474],{"class":288,"line":302},[286,1459,399],{"class":398},[286,1461,543],{"class":398},[286,1463,403],{"class":402},[286,1465,672],{"class":406},[286,1467,410],{"class":402},[286,1469,413],{"class":398},[286,1471,416],{"class":402},[286,1473,681],{"class":377},[286,1475,422],{"class":402},[286,1477,1478],{"class":288,"line":308},[286,1479,299],{"emptyLinePlaceholder":298},[286,1481,1482,1484,1486,1489,1491,1493,1495,1497,1499,1501,1503,1506,1508,1510],{"class":288,"line":314},[286,1483,501],{"class":398},[286,1485,505],{"class":504},[286,1487,1488],{"class":406}," POST",[286,1490,466],{"class":402},[286,1492,672],{"class":373},[286,1494,521],{"class":402},[286,1496,705],{"class":504},[286,1498,708],{"class":402},[286,1500,712],{"class":711},[286,1502,513],{"class":402},[286,1504,1505],{"class":711}," request",[286,1507,720],{"class":402},[286,1509,723],{"class":504},[286,1511,583],{"class":402},[286,1513,1514,1516,1518,1521,1523,1525,1527,1529,1531,1534],{"class":288,"line":320},[286,1515,780],{"class":504},[286,1517,403],{"class":402},[286,1519,1520],{"class":406}," cartId",[286,1522,410],{"class":402},[286,1524,521],{"class":402},[286,1526,787],{"class":398},[286,1528,1505],{"class":406},[286,1530,733],{"class":402},[286,1532,1533],{"class":450},"json",[286,1535,526],{"class":462},[286,1537,1538,1540,1542,1544,1546,1548,1550,1552,1555,1557,1559,1561,1563,1565,1567,1569],{"class":288,"line":326},[286,1539,730],{"class":406},[286,1541,733],{"class":402},[286,1543,736],{"class":406},[286,1545,733],{"class":402},[286,1547,741],{"class":450},[286,1549,454],{"class":462},[286,1551,746],{"class":402},[286,1553,1554],{"class":462}," cart",[286,1556,466],{"class":402},[286,1558,403],{"class":402},[286,1560,756],{"class":462},[286,1562,466],{"class":402},[286,1564,1520],{"class":406},[286,1566,410],{"class":402},[286,1568,410],{"class":402},[286,1570,492],{"class":462},[286,1572,1573],{"class":288,"line":332},[286,1574,299],{"emptyLinePlaceholder":298},[286,1576,1577,1580,1582,1584],{"class":288,"line":338},[286,1578,1579],{"class":398},"  throw",[286,1581,1445],{"class":450},[286,1583,454],{"class":462},[286,1585,457],{"class":402},[286,1587,1588,1591,1593,1595,1598,1600],{"class":288,"line":343},[286,1589,1590],{"class":462},"    message",[286,1592,466],{"class":402},[286,1594,416],{"class":402},[286,1596,1597],{"class":377},"Payment failed",[286,1599,481],{"class":402},[286,1601,1602],{"class":402},",\n",[286,1604,1605,1608,1610,1613],{"class":288,"line":349},[286,1606,1607],{"class":462},"    status",[286,1609,466],{"class":402},[286,1611,1612],{"class":1016}," 402",[286,1614,1602],{"class":402},[286,1616,1617,1620,1622,1624,1627,1629],{"class":288,"line":953},[286,1618,1619],{"class":462},"    why",[286,1621,466],{"class":402},[286,1623,416],{"class":402},[286,1625,1626],{"class":377},"Card declined by issuer",[286,1628,481],{"class":402},[286,1630,1602],{"class":402},[286,1632,1633,1636,1638,1640,1643,1645],{"class":288,"line":958},[286,1634,1635],{"class":462},"    fix",[286,1637,466],{"class":402},[286,1639,416],{"class":402},[286,1641,1642],{"class":377},"Try a different payment method",[286,1644,481],{"class":402},[286,1646,1602],{"class":402},[286,1648,1649,1652,1654,1656,1659,1661],{"class":288,"line":980},[286,1650,1651],{"class":462},"    link",[286,1653,466],{"class":402},[286,1655,416],{"class":402},[286,1657,1658],{"class":377},"https:\u002F\u002Fdocs.example.com\u002Fpayments\u002Fdeclined",[286,1660,481],{"class":402},[286,1662,1602],{"class":402},[286,1664,1666,1669],{"class":288,"line":1665},15,[286,1667,1668],{"class":402},"  }",[286,1670,492],{"class":462},[286,1672,1674],{"class":288,"line":1673},16,[286,1675,618],{"class":402},[249,1677,1678],{},"The error is captured and logged with both the custom context and structured error fields:",[276,1680,1682],{"className":364,"code":1681,"filename":989,"language":366,"meta":282,"style":282},"14:58:20 ERROR [my-api] POST \u002Fapi\u002Fcheckout 402 in 3ms\n  ├─ error: name=EvlogError message=Payment failed status=402\n  ├─ cart: id=cart_456\n  └─ requestId: 880a50ac-...\n",[253,1683,1684,1695,1717,1727],{"__ignoreMap":282},[286,1685,1686,1689,1692],{"class":288,"line":289},[286,1687,1688],{"class":373},"14:58:20",[286,1690,1691],{"class":377}," ERROR",[286,1693,1694],{"class":406}," [my-api] POST \u002Fapi\u002Fcheckout 402 in 3ms\n",[286,1696,1697,1699,1702,1705,1708,1711,1714],{"class":288,"line":295},[286,1698,1007],{"class":373},[286,1700,1701],{"class":377}," error:",[286,1703,1704],{"class":377}," name=EvlogError",[286,1706,1707],{"class":377}," message=Payment",[286,1709,1710],{"class":377}," failed",[286,1712,1713],{"class":377}," status=",[286,1715,1716],{"class":1016},"402\n",[286,1718,1719,1721,1724],{"class":288,"line":302},[286,1720,1007],{"class":373},[286,1722,1723],{"class":377}," cart:",[286,1725,1726],{"class":377}," id=cart_456\n",[286,1728,1729,1731,1733],{"class":288,"line":308},[286,1730,1044],{"class":373},[286,1732,1047],{"class":377},[286,1734,1735],{"class":377}," 880a50ac-...\n",[354,1737,150],{"id":1738},"configuration",[249,1740,1741,1742,1746,1747,1749],{},"See the ",[1743,1744,1745],"a",{"href":151},"Configuration reference"," for all available options (",[253,1748,451],{},", middleware options, sampling, silent mode, etc.).",[354,1751,1753],{"id":1752},"drain-enrichers","Drain & Enrichers",[249,1755,1756],{},"Configure drain adapters and enrichers directly in the hooks options:",[276,1758,1760],{"className":388,"code":1759,"filename":390,"language":391,"meta":282,"style":282},"import { initLogger } from 'evlog'\nimport { createEvlogHooks } from 'evlog\u002Fsveltekit'\nimport { createAxiomDrain } from 'evlog\u002Faxiom'\nimport { createUserAgentEnricher } from 'evlog\u002Fenrichers'\n\ninitLogger({\n  env: { service: 'my-api' },\n})\n\nconst userAgent = createUserAgentEnricher()\n\nexport const { handle, handleError } = createEvlogHooks({\n  drain: createAxiomDrain(),\n  enrich: (ctx) => {\n    userAgent(ctx)\n    ctx.event.region = process.env.FLY_REGION\n  },\n})\n",[253,1761,1762,1780,1798,1818,1838,1842,1850,1870,1876,1880,1895,1899,1923,1937,1956,1967,1997,2003],{"__ignoreMap":282},[286,1763,1764,1766,1768,1770,1772,1774,1776,1778],{"class":288,"line":289},[286,1765,399],{"class":398},[286,1767,403],{"class":402},[286,1769,407],{"class":406},[286,1771,410],{"class":402},[286,1773,413],{"class":398},[286,1775,416],{"class":402},[286,1777,419],{"class":377},[286,1779,422],{"class":402},[286,1781,1782,1784,1786,1788,1790,1792,1794,1796],{"class":288,"line":295},[286,1783,399],{"class":398},[286,1785,403],{"class":402},[286,1787,431],{"class":406},[286,1789,410],{"class":402},[286,1791,413],{"class":398},[286,1793,416],{"class":402},[286,1795,255],{"class":377},[286,1797,422],{"class":402},[286,1799,1800,1802,1804,1807,1809,1811,1813,1816],{"class":288,"line":302},[286,1801,399],{"class":398},[286,1803,403],{"class":402},[286,1805,1806],{"class":406}," createAxiomDrain",[286,1808,410],{"class":402},[286,1810,413],{"class":398},[286,1812,416],{"class":402},[286,1814,1815],{"class":377},"evlog\u002Faxiom",[286,1817,422],{"class":402},[286,1819,1820,1822,1824,1827,1829,1831,1833,1836],{"class":288,"line":308},[286,1821,399],{"class":398},[286,1823,403],{"class":402},[286,1825,1826],{"class":406}," createUserAgentEnricher",[286,1828,410],{"class":402},[286,1830,413],{"class":398},[286,1832,416],{"class":402},[286,1834,1835],{"class":377},"evlog\u002Fenrichers",[286,1837,422],{"class":402},[286,1839,1840],{"class":288,"line":314},[286,1841,299],{"emptyLinePlaceholder":298},[286,1843,1844,1846,1848],{"class":288,"line":320},[286,1845,451],{"class":450},[286,1847,454],{"class":406},[286,1849,457],{"class":402},[286,1851,1852,1854,1856,1858,1860,1862,1864,1866,1868],{"class":288,"line":326},[286,1853,463],{"class":462},[286,1855,466],{"class":402},[286,1857,403],{"class":402},[286,1859,471],{"class":462},[286,1861,466],{"class":402},[286,1863,416],{"class":402},[286,1865,478],{"class":377},[286,1867,481],{"class":402},[286,1869,484],{"class":402},[286,1871,1872,1874],{"class":288,"line":332},[286,1873,489],{"class":402},[286,1875,492],{"class":406},[286,1877,1878],{"class":288,"line":338},[286,1879,299],{"emptyLinePlaceholder":298},[286,1881,1882,1885,1888,1891,1893],{"class":288,"line":343},[286,1883,1884],{"class":504},"const",[286,1886,1887],{"class":406}," userAgent ",[286,1889,1890],{"class":402},"=",[286,1892,1826],{"class":450},[286,1894,526],{"class":406},[286,1896,1897],{"class":288,"line":349},[286,1898,299],{"emptyLinePlaceholder":298},[286,1900,1901,1903,1905,1907,1909,1911,1913,1915,1917,1919,1921],{"class":288,"line":953},[286,1902,501],{"class":398},[286,1904,505],{"class":504},[286,1906,403],{"class":402},[286,1908,510],{"class":406},[286,1910,513],{"class":402},[286,1912,516],{"class":406},[286,1914,489],{"class":402},[286,1916,521],{"class":402},[286,1918,431],{"class":450},[286,1920,454],{"class":406},[286,1922,457],{"class":402},[286,1924,1925,1928,1930,1932,1935],{"class":288,"line":958},[286,1926,1927],{"class":462},"  drain",[286,1929,466],{"class":402},[286,1931,1806],{"class":450},[286,1933,1934],{"class":406},"()",[286,1936,1602],{"class":402},[286,1938,1939,1942,1944,1947,1950,1952,1954],{"class":288,"line":980},[286,1940,1941],{"class":450},"  enrich",[286,1943,466],{"class":402},[286,1945,1946],{"class":402}," (",[286,1948,1949],{"class":711},"ctx",[286,1951,1112],{"class":402},[286,1953,723],{"class":504},[286,1955,583],{"class":402},[286,1957,1958,1961,1963,1965],{"class":288,"line":1665},[286,1959,1960],{"class":450},"    userAgent",[286,1962,454],{"class":462},[286,1964,1949],{"class":406},[286,1966,492],{"class":462},[286,1968,1969,1972,1974,1977,1979,1982,1984,1987,1989,1992,1994],{"class":288,"line":1673},[286,1970,1971],{"class":406},"    ctx",[286,1973,733],{"class":402},[286,1975,1976],{"class":406},"event",[286,1978,733],{"class":402},[286,1980,1981],{"class":406},"region",[286,1983,521],{"class":402},[286,1985,1986],{"class":406}," process",[286,1988,733],{"class":402},[286,1990,1991],{"class":406},"env",[286,1993,733],{"class":402},[286,1995,1996],{"class":406},"FLY_REGION\n",[286,1998,2000],{"class":288,"line":1999},17,[286,2001,2002],{"class":402},"  },\n",[286,2004,2006,2008],{"class":288,"line":2005},18,[286,2007,489],{"class":402},[286,2009,492],{"class":406},[358,2011,2013],{"id":2012},"pipeline-batching-retry","Pipeline (Batching & Retry)",[249,2015,2016,2017,2020],{},"For production, wrap your adapter with ",[253,2018,2019],{},"createDrainPipeline"," to batch events and retry on failure:",[276,2022,2024],{"className":388,"code":2023,"filename":390,"language":391,"meta":282,"style":282},"import type { DrainContext } from 'evlog'\nimport { initLogger } from 'evlog'\nimport { createEvlogHooks } from 'evlog\u002Fsveltekit'\nimport { createAxiomDrain } from 'evlog\u002Faxiom'\nimport { createDrainPipeline } from 'evlog\u002Fpipeline'\n\ninitLogger({\n  env: { service: 'my-api' },\n})\n\nconst pipeline = createDrainPipeline\u003CDrainContext>({\n  batch: { size: 50, intervalMs: 5000 },\n  retry: { maxAttempts: 3 },\n})\nconst drain = pipeline(createAxiomDrain())\n\nexport const { handle, handleError } = createEvlogHooks({ drain })\n",[253,2025,2026,2047,2065,2083,2101,2121,2125,2133,2153,2159,2163,2187,2216,2235,2241,2261,2265],{"__ignoreMap":282},[286,2027,2028,2030,2032,2034,2037,2039,2041,2043,2045],{"class":288,"line":289},[286,2029,399],{"class":398},[286,2031,543],{"class":398},[286,2033,403],{"class":402},[286,2035,2036],{"class":406}," DrainContext",[286,2038,410],{"class":402},[286,2040,413],{"class":398},[286,2042,416],{"class":402},[286,2044,419],{"class":377},[286,2046,422],{"class":402},[286,2048,2049,2051,2053,2055,2057,2059,2061,2063],{"class":288,"line":295},[286,2050,399],{"class":398},[286,2052,403],{"class":402},[286,2054,407],{"class":406},[286,2056,410],{"class":402},[286,2058,413],{"class":398},[286,2060,416],{"class":402},[286,2062,419],{"class":377},[286,2064,422],{"class":402},[286,2066,2067,2069,2071,2073,2075,2077,2079,2081],{"class":288,"line":302},[286,2068,399],{"class":398},[286,2070,403],{"class":402},[286,2072,431],{"class":406},[286,2074,410],{"class":402},[286,2076,413],{"class":398},[286,2078,416],{"class":402},[286,2080,255],{"class":377},[286,2082,422],{"class":402},[286,2084,2085,2087,2089,2091,2093,2095,2097,2099],{"class":288,"line":308},[286,2086,399],{"class":398},[286,2088,403],{"class":402},[286,2090,1806],{"class":406},[286,2092,410],{"class":402},[286,2094,413],{"class":398},[286,2096,416],{"class":402},[286,2098,1815],{"class":377},[286,2100,422],{"class":402},[286,2102,2103,2105,2107,2110,2112,2114,2116,2119],{"class":288,"line":314},[286,2104,399],{"class":398},[286,2106,403],{"class":402},[286,2108,2109],{"class":406}," createDrainPipeline",[286,2111,410],{"class":402},[286,2113,413],{"class":398},[286,2115,416],{"class":402},[286,2117,2118],{"class":377},"evlog\u002Fpipeline",[286,2120,422],{"class":402},[286,2122,2123],{"class":288,"line":320},[286,2124,299],{"emptyLinePlaceholder":298},[286,2126,2127,2129,2131],{"class":288,"line":326},[286,2128,451],{"class":450},[286,2130,454],{"class":406},[286,2132,457],{"class":402},[286,2134,2135,2137,2139,2141,2143,2145,2147,2149,2151],{"class":288,"line":332},[286,2136,463],{"class":462},[286,2138,466],{"class":402},[286,2140,403],{"class":402},[286,2142,471],{"class":462},[286,2144,466],{"class":402},[286,2146,416],{"class":402},[286,2148,478],{"class":377},[286,2150,481],{"class":402},[286,2152,484],{"class":402},[286,2154,2155,2157],{"class":288,"line":338},[286,2156,489],{"class":402},[286,2158,492],{"class":406},[286,2160,2161],{"class":288,"line":343},[286,2162,299],{"emptyLinePlaceholder":298},[286,2164,2165,2167,2170,2172,2174,2177,2180,2183,2185],{"class":288,"line":349},[286,2166,1884],{"class":504},[286,2168,2169],{"class":406}," pipeline ",[286,2171,1890],{"class":402},[286,2173,2109],{"class":450},[286,2175,2176],{"class":402},"\u003C",[286,2178,2179],{"class":373},"DrainContext",[286,2181,2182],{"class":402},">",[286,2184,454],{"class":406},[286,2186,457],{"class":402},[286,2188,2189,2192,2194,2196,2199,2201,2204,2206,2209,2211,2214],{"class":288,"line":953},[286,2190,2191],{"class":462},"  batch",[286,2193,466],{"class":402},[286,2195,403],{"class":402},[286,2197,2198],{"class":462}," size",[286,2200,466],{"class":402},[286,2202,2203],{"class":1016}," 50",[286,2205,513],{"class":402},[286,2207,2208],{"class":462}," intervalMs",[286,2210,466],{"class":402},[286,2212,2213],{"class":1016}," 5000",[286,2215,484],{"class":402},[286,2217,2218,2221,2223,2225,2228,2230,2233],{"class":288,"line":958},[286,2219,2220],{"class":462},"  retry",[286,2222,466],{"class":402},[286,2224,403],{"class":402},[286,2226,2227],{"class":462}," maxAttempts",[286,2229,466],{"class":402},[286,2231,2232],{"class":1016}," 3",[286,2234,484],{"class":402},[286,2236,2237,2239],{"class":288,"line":980},[286,2238,489],{"class":402},[286,2240,492],{"class":406},[286,2242,2243,2245,2248,2250,2253,2255,2258],{"class":288,"line":1665},[286,2244,1884],{"class":504},[286,2246,2247],{"class":406}," drain ",[286,2249,1890],{"class":402},[286,2251,2252],{"class":450}," pipeline",[286,2254,454],{"class":406},[286,2256,2257],{"class":450},"createAxiomDrain",[286,2259,2260],{"class":406},"())\n",[286,2262,2263],{"class":288,"line":1673},[286,2264,299],{"emptyLinePlaceholder":298},[286,2266,2267,2269,2271,2273,2275,2277,2279,2281,2283,2285,2287,2289,2291,2293],{"class":288,"line":1999},[286,2268,501],{"class":398},[286,2270,505],{"class":504},[286,2272,403],{"class":402},[286,2274,510],{"class":406},[286,2276,513],{"class":402},[286,2278,516],{"class":406},[286,2280,489],{"class":402},[286,2282,521],{"class":402},[286,2284,431],{"class":450},[286,2286,454],{"class":406},[286,2288,746],{"class":402},[286,2290,2247],{"class":406},[286,2292,489],{"class":402},[286,2294,492],{"class":406},[2296,2297,2299,2300,2303,2304,2307],"callout",{"color":2298,"icon":13},"info","Call ",[253,2301,2302],{},"drain.flush()"," on server shutdown to ensure all buffered events are sent. See the ",[1743,2305,2306],{"href":210},"Pipeline docs"," for all options.",[354,2309,2311],{"id":2310},"tail-sampling","Tail Sampling",[249,2313,1056,2314,2317],{},[253,2315,2316],{},"keep"," to force-retain specific events regardless of head sampling:",[276,2319,2321],{"className":388,"code":2320,"filename":390,"language":391,"meta":282,"style":282},"export const { handle, handleError } = createEvlogHooks({\n  drain: createAxiomDrain(),\n  keep: (ctx) => {\n    if (ctx.duration && ctx.duration > 2000) ctx.shouldKeep = true\n  },\n})\n",[253,2322,2323,2347,2359,2376,2421,2425],{"__ignoreMap":282},[286,2324,2325,2327,2329,2331,2333,2335,2337,2339,2341,2343,2345],{"class":288,"line":289},[286,2326,501],{"class":398},[286,2328,505],{"class":504},[286,2330,403],{"class":402},[286,2332,510],{"class":406},[286,2334,513],{"class":402},[286,2336,516],{"class":406},[286,2338,489],{"class":402},[286,2340,521],{"class":402},[286,2342,431],{"class":450},[286,2344,454],{"class":406},[286,2346,457],{"class":402},[286,2348,2349,2351,2353,2355,2357],{"class":288,"line":295},[286,2350,1927],{"class":462},[286,2352,466],{"class":402},[286,2354,1806],{"class":450},[286,2356,1934],{"class":406},[286,2358,1602],{"class":402},[286,2360,2361,2364,2366,2368,2370,2372,2374],{"class":288,"line":302},[286,2362,2363],{"class":450},"  keep",[286,2365,466],{"class":402},[286,2367,1946],{"class":402},[286,2369,1949],{"class":711},[286,2371,1112],{"class":402},[286,2373,723],{"class":504},[286,2375,583],{"class":402},[286,2377,2378,2381,2383,2385,2387,2390,2393,2396,2398,2400,2403,2406,2408,2410,2412,2415,2417],{"class":288,"line":308},[286,2379,2380],{"class":398},"    if",[286,2382,1946],{"class":462},[286,2384,1949],{"class":406},[286,2386,733],{"class":402},[286,2388,2389],{"class":406},"duration",[286,2391,2392],{"class":402}," &&",[286,2394,2395],{"class":406}," ctx",[286,2397,733],{"class":402},[286,2399,2389],{"class":406},[286,2401,2402],{"class":402}," >",[286,2404,2405],{"class":1016}," 2000",[286,2407,944],{"class":462},[286,2409,1949],{"class":406},[286,2411,733],{"class":402},[286,2413,2414],{"class":406},"shouldKeep",[286,2416,521],{"class":402},[286,2418,2420],{"class":2419},"sfNiH"," true\n",[286,2422,2423],{"class":288,"line":314},[286,2424,2002],{"class":402},[286,2426,2427,2429],{"class":288,"line":320},[286,2428,489],{"class":402},[286,2430,492],{"class":406},[354,2432,2434],{"id":2433},"route-filtering","Route Filtering",[249,2436,2437,2438,260,2441,2444],{},"Control which routes are logged with ",[253,2439,2440],{},"include",[253,2442,2443],{},"exclude"," patterns:",[276,2446,2448],{"className":388,"code":2447,"filename":390,"language":391,"meta":282,"style":282},"export const { handle, handleError } = createEvlogHooks({\n  include: ['\u002Fapi\u002F**'],\n  exclude: ['\u002F_internal\u002F**', '\u002Fhealth'],\n  routes: {\n    '\u002Fapi\u002Fauth\u002F**': { service: 'auth-service' },\n    '\u002Fapi\u002Fpayment\u002F**': { service: 'payment-service' },\n  },\n})\n",[253,2449,2450,2474,2496,2525,2534,2561,2587,2591],{"__ignoreMap":282},[286,2451,2452,2454,2456,2458,2460,2462,2464,2466,2468,2470,2472],{"class":288,"line":289},[286,2453,501],{"class":398},[286,2455,505],{"class":504},[286,2457,403],{"class":402},[286,2459,510],{"class":406},[286,2461,513],{"class":402},[286,2463,516],{"class":406},[286,2465,489],{"class":402},[286,2467,521],{"class":402},[286,2469,431],{"class":450},[286,2471,454],{"class":406},[286,2473,457],{"class":402},[286,2475,2476,2479,2481,2484,2486,2489,2491,2494],{"class":288,"line":295},[286,2477,2478],{"class":462},"  include",[286,2480,466],{"class":402},[286,2482,2483],{"class":406}," [",[286,2485,481],{"class":402},[286,2487,2488],{"class":377},"\u002Fapi\u002F**",[286,2490,481],{"class":402},[286,2492,2493],{"class":406},"]",[286,2495,1602],{"class":402},[286,2497,2498,2501,2503,2505,2507,2510,2512,2514,2516,2519,2521,2523],{"class":288,"line":302},[286,2499,2500],{"class":462},"  exclude",[286,2502,466],{"class":402},[286,2504,2483],{"class":406},[286,2506,481],{"class":402},[286,2508,2509],{"class":377},"\u002F_internal\u002F**",[286,2511,481],{"class":402},[286,2513,513],{"class":402},[286,2515,416],{"class":402},[286,2517,2518],{"class":377},"\u002Fhealth",[286,2520,481],{"class":402},[286,2522,2493],{"class":406},[286,2524,1602],{"class":402},[286,2526,2527,2530,2532],{"class":288,"line":308},[286,2528,2529],{"class":462},"  routes",[286,2531,466],{"class":402},[286,2533,583],{"class":402},[286,2535,2536,2539,2542,2544,2546,2548,2550,2552,2554,2557,2559],{"class":288,"line":314},[286,2537,2538],{"class":402},"    '",[286,2540,2541],{"class":462},"\u002Fapi\u002Fauth\u002F**",[286,2543,481],{"class":402},[286,2545,466],{"class":402},[286,2547,403],{"class":402},[286,2549,471],{"class":462},[286,2551,466],{"class":402},[286,2553,416],{"class":402},[286,2555,2556],{"class":377},"auth-service",[286,2558,481],{"class":402},[286,2560,484],{"class":402},[286,2562,2563,2565,2568,2570,2572,2574,2576,2578,2580,2583,2585],{"class":288,"line":320},[286,2564,2538],{"class":402},[286,2566,2567],{"class":462},"\u002Fapi\u002Fpayment\u002F**",[286,2569,481],{"class":402},[286,2571,466],{"class":402},[286,2573,403],{"class":402},[286,2575,471],{"class":462},[286,2577,466],{"class":402},[286,2579,416],{"class":402},[286,2581,2582],{"class":377},"payment-service",[286,2584,481],{"class":402},[286,2586,484],{"class":402},[286,2588,2589],{"class":288,"line":326},[286,2590,2002],{"class":402},[286,2592,2593,2595],{"class":288,"line":332},[286,2594,489],{"class":402},[286,2596,492],{"class":406},[354,2598,2600],{"id":2599},"run-locally","Run Locally",[276,2602,2604],{"className":364,"code":2603,"language":366,"meta":282,"style":282},"git clone https:\u002F\u002Fgithub.com\u002FHugoRCD\u002Fevlog.git\ncd evlog\nbun install\nbun run example:sveltekit\n",[253,2605,2606,2617,2624,2631],{"__ignoreMap":282},[286,2607,2608,2611,2614],{"class":288,"line":289},[286,2609,2610],{"class":373},"git",[286,2612,2613],{"class":377}," clone",[286,2615,2616],{"class":377}," https:\u002F\u002Fgithub.com\u002FHugoRCD\u002Fevlog.git\n",[286,2618,2619,2622],{"class":288,"line":295},[286,2620,2621],{"class":450},"cd",[286,2623,381],{"class":377},[286,2625,2626,2628],{"class":288,"line":302},[286,2627,374],{"class":373},[286,2629,2630],{"class":377}," install\n",[286,2632,2633,2635,2638],{"class":288,"line":308},[286,2634,374],{"class":373},[286,2636,2637],{"class":377}," run",[286,2639,2640],{"class":377}," example:sveltekit\n",[249,2642,2643,2644,2649],{},"Open ",[1743,2645,2646],{"href":2646,"rel":2647},"http:\u002F\u002Flocalhost:5173",[2648],"nofollow"," to explore the interactive test UI.",[2651,2652,2653],"card-group",{},[2654,2655,2659],"card",{"icon":2656,"title":2657,"to":2658},"i-simple-icons-github","Source Code","https:\u002F\u002Fgithub.com\u002FHugoRCD\u002Fevlog\u002Ftree\u002Fmain\u002Fexamples\u002Fsveltekit","Browse the complete SvelteKit example source on GitHub.",[2661,2662,2663],"style",{},"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 .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 pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .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}",{"title":282,"searchDepth":295,"depth":295,"links":2665},[2666,2671,2672,2673,2674,2675,2678,2679,2680],{"id":356,"depth":295,"text":20,"children":2667},[2668,2669,2670],{"id":360,"depth":302,"text":361},{"id":384,"depth":302,"text":385},{"id":529,"depth":302,"text":530},{"id":632,"depth":295,"text":121},{"id":1053,"depth":295,"text":270},{"id":1390,"depth":295,"text":1391},{"id":1738,"depth":295,"text":150},{"id":1752,"depth":295,"text":1753,"children":2676},[2677],{"id":2012,"depth":302,"text":2013},{"id":2310,"depth":295,"text":2311},{"id":2433,"depth":295,"text":2434},{"id":2599,"depth":295,"text":2600},"Automatic wide events, structured errors, drain adapters, enrichers, and tail sampling in SvelteKit applications.","md",[2684],{"label":2657,"icon":2656,"to":2658,"color":2685,"variant":2686},"neutral","subtle",{},{"title":51,"icon":54},{"title":51,"description":2681},"mYzEwVth-Z8_w27T4sWoj-vIEwLFy0HXnZ-IYCfJzz8",[2692,2694],{"title":46,"path":47,"stem":48,"description":2693,"icon":49,"children":-1},"Wide events, structured errors, drain pipeline, tail sampling, route-based services, error handling, and client-side logging in Next.js applications.",{"title":56,"path":57,"stem":58,"description":2695,"icon":59,"children":-1},"Automatic wide events, structured errors, drain adapters, enrichers, and tail sampling in Nitro v2 and v3 applications.",1773505333043]