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