[{"data":1,"prerenderedAt":3312},["ShallowReactive",2],{"navigation_docs":3,"-getting-started-quick-start":219,"-getting-started-quick-start-surround":3307},[4,30,105,139,188,205],{"title":5,"path":6,"stem":7,"children":8,"page":29},"Getting Started","/getting-started","1.getting-started",[9,14,19,24],{"title":10,"path":11,"stem":12,"icon":13},"Introduction","/getting-started/introduction","1.getting-started/1.introduction","i-lucide-info",{"title":15,"path":16,"stem":17,"icon":18},"Installation","/getting-started/installation","1.getting-started/2.installation","i-lucide-download",{"title":20,"path":21,"stem":22,"icon":23},"Quick Start","/getting-started/quick-start","1.getting-started/3.quick-start","i-lucide-zap",{"title":25,"path":26,"stem":27,"icon":28},"Agent Skills","/getting-started/agent-skills","1.getting-started/4.agent-skills","i-lucide-sparkles",false,{"title":31,"path":32,"stem":33,"children":34,"page":29},"Frameworks","/frameworks","2.frameworks",[35,40,45,50,55,60,65,70,75,80,85,90,95,100],{"title":36,"path":37,"stem":38,"icon":39},"Overview","/frameworks/overview","2.frameworks/00.overview","i-lucide-layout-grid",{"title":41,"path":42,"stem":43,"icon":44},"Nuxt","/frameworks/nuxt","2.frameworks/01.nuxt","i-simple-icons-nuxtdotjs",{"title":46,"path":47,"stem":48,"icon":49},"Next.js","/frameworks/nextjs","2.frameworks/02.nextjs","i-simple-icons-nextdotjs",{"title":51,"path":52,"stem":53,"icon":54},"SvelteKit","/frameworks/sveltekit","2.frameworks/03.sveltekit","i-simple-icons-svelte",{"title":56,"path":57,"stem":58,"icon":59},"Nitro","/frameworks/nitro","2.frameworks/04.nitro","i-custom-nitro",{"title":61,"path":62,"stem":63,"icon":64},"TanStack Start","/frameworks/tanstack-start","2.frameworks/05.tanstack-start","i-custom-tanstack",{"title":66,"path":67,"stem":68,"icon":69},"NestJS","/frameworks/nestjs","2.frameworks/06.nestjs","i-simple-icons-nestjs",{"title":71,"path":72,"stem":73,"icon":74},"Express","/frameworks/express","2.frameworks/07.express","i-simple-icons-express",{"title":76,"path":77,"stem":78,"icon":79},"Hono","/frameworks/hono","2.frameworks/08.hono","i-simple-icons-hono",{"title":81,"path":82,"stem":83,"icon":84},"Fastify","/frameworks/fastify","2.frameworks/09.fastify","i-simple-icons-fastify",{"title":86,"path":87,"stem":88,"icon":89},"Elysia","/frameworks/elysia","2.frameworks/10.elysia","i-custom-elysia",{"title":91,"path":92,"stem":93,"icon":94},"Cloudflare Workers","/frameworks/cloudflare-workers","2.frameworks/11.cloudflare-workers","i-simple-icons-cloudflare",{"title":96,"path":97,"stem":98,"icon":99},"Standalone","/frameworks/standalone","2.frameworks/12.standalone","i-simple-icons-typescript",{"title":101,"path":102,"stem":103,"icon":104},"Astro","/frameworks/astro","2.frameworks/13.astro","i-simple-icons-astro",{"title":106,"path":107,"stem":108,"children":109,"page":29},"Core Concepts","/core-concepts","3.core-concepts",[110,115,120,125,129,134],{"title":111,"path":112,"stem":113,"icon":114},"Wide Events","/core-concepts/wide-events","3.core-concepts/1.wide-events","i-lucide-layers",{"title":116,"path":117,"stem":118,"icon":119},"Structured Errors","/core-concepts/structured-errors","3.core-concepts/2.structured-errors","i-lucide-shield-alert",{"title":121,"path":122,"stem":123,"icon":124},"Best Practices","/core-concepts/best-practices","3.core-concepts/3.best-practices","i-lucide-shield-check",{"title":126,"path":127,"stem":128,"icon":99},"Typed Fields","/core-concepts/typed-fields","3.core-concepts/4.typed-fields",{"title":130,"path":131,"stem":132,"icon":133},"Sampling","/core-concepts/sampling","3.core-concepts/5.sampling","i-lucide-filter",{"title":135,"path":136,"stem":137,"icon":138},"Client Logging","/core-concepts/client-logging","3.core-concepts/6.client-logging","i-lucide-monitor",{"title":140,"path":141,"stem":142,"children":143,"page":29},"Adapters","/adapters","4.adapters",[144,148,153,158,163,168,173,178,183],{"title":36,"path":145,"stem":146,"icon":147},"/adapters/overview","4.adapters/1.overview","i-custom-plug",{"title":149,"path":150,"stem":151,"icon":152},"Axiom","/adapters/axiom","4.adapters/2.axiom","i-custom-axiom",{"title":154,"path":155,"stem":156,"icon":157},"OTLP","/adapters/otlp","4.adapters/3.otlp","i-simple-icons-opentelemetry",{"title":159,"path":160,"stem":161,"icon":162},"PostHog","/adapters/posthog","4.adapters/4.posthog","i-simple-icons-posthog",{"title":164,"path":165,"stem":166,"icon":167},"Sentry","/adapters/sentry","4.adapters/5.sentry","i-simple-icons-sentry",{"title":169,"path":170,"stem":171,"icon":172},"Better Stack","/adapters/better-stack","4.adapters/6.better-stack","i-simple-icons-betterstack",{"title":174,"path":175,"stem":176,"icon":177},"Custom Adapters","/adapters/custom","4.adapters/7.custom","i-lucide-code",{"title":179,"path":180,"stem":181,"icon":182},"Pipeline","/adapters/pipeline","4.adapters/8.pipeline","i-lucide-workflow",{"title":184,"path":185,"stem":186,"icon":187},"Browser","/adapters/browser","4.adapters/9.browser","i-lucide-globe",{"title":189,"path":190,"stem":191,"children":192,"page":29},"Enrichers","/enrichers","5.enrichers",[193,196,201],{"title":36,"path":194,"stem":195,"icon":28},"/enrichers/overview","5.enrichers/1.overview",{"title":197,"path":198,"stem":199,"icon":200},"Built-in","/enrichers/built-in","5.enrichers/2.built-in","i-lucide-puzzle",{"title":202,"path":203,"stem":204,"icon":177},"Custom","/enrichers/custom","5.enrichers/3.custom",{"title":206,"path":207,"stem":208,"children":209,"page":29},"NuxtHub","/nuxthub","6.nuxthub",[210,214],{"title":36,"path":211,"stem":212,"icon":213},"/nuxthub/overview","6.nuxthub/1.overview","i-lucide-database",{"title":215,"path":216,"stem":217,"icon":218},"Retention","/nuxthub/retention","6.nuxthub/2.retention","i-lucide-clock",{"id":220,"title":20,"body":221,"description":3296,"extension":3297,"links":3298,"meta":3303,"navigation":3304,"path":21,"seo":3305,"stem":22,"__hash__":3306},"docs/1.getting-started/3.quick-start.md",{"type":222,"value":223,"toc":3281},"minimark",[224,228,253,258,265,643,652,657,717,721,724,729,735,928,931,979,983,988,1100,1113,1117,1122,1382,1407,1424,1496,1511,1515,1521,1779,1783,1870,1874,1880,2248,2252,2255,2406,2417,2421,2427,2818,2821,2829,2835,2839,2842,3248,3252,3277],[225,226,227],"p",{},"This guide covers the core APIs you'll use most often with evlog.",[229,230,232,233,237,238,242,243,242,246,242,249,252],"callout",{"color":231,"icon":28},"info","In Nuxt, evlog ",[234,235,236],"strong",{},"auto-imports"," all functions (",[239,240,241],"code",{},"useLogger",", ",[239,244,245],{},"log",[239,247,248],{},"createError",[239,250,251],{},"parseError","). No import statements needed.",[254,255,257],"h2",{"id":256},"uselogger-server-side","useLogger (Server-Side)",[225,259,260,261,264],{},"Use ",[239,262,263],{},"useLogger(event)"," in any Nuxt/Nitro API route to get a request-scoped logger:",[266,267,268,576],"code-group",{},[269,270,276],"pre",{"className":271,"code":272,"filename":273,"language":274,"meta":275,"style":275},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","export default defineEventHandler(async (event) => {\n  // Get the request-scoped logger (auto-imported in Nuxt)\n  const log = useLogger(event)\n\n  // Accumulate context throughout the request\n  log.set({ user: { id: 1, plan: 'pro' } })\n  log.set({ cart: { items: 3, total: 9999 } })\n\n  // Process checkout...\n  const order = await processCheckout()\n  log.set({ orderId: order.id })\n\n  // Logger auto-emits when request ends - nothing else to do!\n  return { success: true, orderId: order.id }\n})\n","server/api/checkout.post.ts","typescript","",[239,277,278,319,326,349,356,362,422,466,471,477,496,525,530,536,568],{"__ignoreMap":275},[279,280,283,287,290,294,298,302,306,310,313,316],"span",{"class":281,"line":282},"line",1,[279,284,286],{"class":285},"s7zQu","export",[279,288,289],{"class":285}," default",[279,291,293],{"class":292},"s2Zo4"," defineEventHandler",[279,295,297],{"class":296},"sTEyZ","(",[279,299,301],{"class":300},"spNyl","async",[279,303,305],{"class":304},"sMK4o"," (",[279,307,309],{"class":308},"sHdIc","event",[279,311,312],{"class":304},")",[279,314,315],{"class":300}," =>",[279,317,318],{"class":304}," {\n",[279,320,322],{"class":281,"line":321},2,[279,323,325],{"class":324},"sHwdD","  // Get the request-scoped logger (auto-imported in Nuxt)\n",[279,327,329,332,335,338,341,344,346],{"class":281,"line":328},3,[279,330,331],{"class":300},"  const",[279,333,334],{"class":296}," log",[279,336,337],{"class":304}," =",[279,339,340],{"class":292}," useLogger",[279,342,297],{"class":343},"swJcz",[279,345,309],{"class":296},[279,347,348],{"class":343},")\n",[279,350,352],{"class":281,"line":351},4,[279,353,355],{"emptyLinePlaceholder":354},true,"\n",[279,357,359],{"class":281,"line":358},5,[279,360,361],{"class":324},"  // Accumulate context throughout the request\n",[279,363,365,368,371,374,376,379,382,385,388,391,393,397,400,403,405,408,412,415,418,420],{"class":281,"line":364},6,[279,366,367],{"class":296},"  log",[279,369,370],{"class":304},".",[279,372,373],{"class":292},"set",[279,375,297],{"class":343},[279,377,378],{"class":304},"{",[279,380,381],{"class":343}," user",[279,383,384],{"class":304},":",[279,386,387],{"class":304}," {",[279,389,390],{"class":343}," id",[279,392,384],{"class":304},[279,394,396],{"class":395},"sbssI"," 1",[279,398,399],{"class":304},",",[279,401,402],{"class":343}," plan",[279,404,384],{"class":304},[279,406,407],{"class":304}," '",[279,409,411],{"class":410},"sfazB","pro",[279,413,414],{"class":304},"'",[279,416,417],{"class":304}," }",[279,419,417],{"class":304},[279,421,348],{"class":343},[279,423,425,427,429,431,433,435,438,440,442,445,447,450,452,455,457,460,462,464],{"class":281,"line":424},7,[279,426,367],{"class":296},[279,428,370],{"class":304},[279,430,373],{"class":292},[279,432,297],{"class":343},[279,434,378],{"class":304},[279,436,437],{"class":343}," cart",[279,439,384],{"class":304},[279,441,387],{"class":304},[279,443,444],{"class":343}," items",[279,446,384],{"class":304},[279,448,449],{"class":395}," 3",[279,451,399],{"class":304},[279,453,454],{"class":343}," total",[279,456,384],{"class":304},[279,458,459],{"class":395}," 9999",[279,461,417],{"class":304},[279,463,417],{"class":304},[279,465,348],{"class":343},[279,467,469],{"class":281,"line":468},8,[279,470,355],{"emptyLinePlaceholder":354},[279,472,474],{"class":281,"line":473},9,[279,475,476],{"class":324},"  // Process checkout...\n",[279,478,480,482,485,487,490,493],{"class":281,"line":479},10,[279,481,331],{"class":300},[279,483,484],{"class":296}," order",[279,486,337],{"class":304},[279,488,489],{"class":285}," await",[279,491,492],{"class":292}," processCheckout",[279,494,495],{"class":343},"()\n",[279,497,499,501,503,505,507,509,512,514,516,518,521,523],{"class":281,"line":498},11,[279,500,367],{"class":296},[279,502,370],{"class":304},[279,504,373],{"class":292},[279,506,297],{"class":343},[279,508,378],{"class":304},[279,510,511],{"class":343}," orderId",[279,513,384],{"class":304},[279,515,484],{"class":296},[279,517,370],{"class":304},[279,519,520],{"class":296},"id",[279,522,417],{"class":304},[279,524,348],{"class":343},[279,526,528],{"class":281,"line":527},12,[279,529,355],{"emptyLinePlaceholder":354},[279,531,533],{"class":281,"line":532},13,[279,534,535],{"class":324},"  // Logger auto-emits when request ends - nothing else to do!\n",[279,537,539,542,544,547,549,553,555,557,559,561,563,565],{"class":281,"line":538},14,[279,540,541],{"class":285},"  return",[279,543,387],{"class":304},[279,545,546],{"class":343}," success",[279,548,384],{"class":304},[279,550,552],{"class":551},"sfNiH"," true",[279,554,399],{"class":304},[279,556,511],{"class":343},[279,558,384],{"class":304},[279,560,484],{"class":296},[279,562,370],{"class":304},[279,564,520],{"class":296},[279,566,567],{"class":304}," }\n",[279,569,571,574],{"class":281,"line":570},15,[279,572,573],{"class":304},"}",[279,575,348],{"class":296},[269,577,582],{"className":578,"code":579,"filename":580,"language":581,"meta":275,"style":275},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","10:23:45.612 INFO [my-app] POST /api/checkout 200 in 234ms\n  ├─ user: id=1 plan=pro\n  ├─ cart: items=3 total=9999\n  └─ orderId: ord_abc123\n","Output (Pretty)","bash",[239,583,584,596,613,632],{"__ignoreMap":275},[279,585,586,590,593],{"class":281,"line":282},[279,587,589],{"class":588},"sBMFI","10:23:45.612",[279,591,592],{"class":410}," INFO",[279,594,595],{"class":296}," [my-app] POST /api/checkout 200 in 234ms\n",[279,597,598,601,604,607,610],{"class":281,"line":321},[279,599,600],{"class":588},"  ├─",[279,602,603],{"class":410}," user:",[279,605,606],{"class":410}," id=",[279,608,609],{"class":395},"1",[279,611,612],{"class":410}," plan=pro\n",[279,614,615,617,620,623,626,629],{"class":281,"line":328},[279,616,600],{"class":588},[279,618,619],{"class":410}," cart:",[279,621,622],{"class":410}," items=",[279,624,625],{"class":395},"3",[279,627,628],{"class":410}," total=",[279,630,631],{"class":395},"9999\n",[279,633,634,637,640],{"class":281,"line":351},[279,635,636],{"class":588},"  └─",[279,638,639],{"class":410}," orderId:",[279,641,642],{"class":410}," ord_abc123\n",[229,644,647,648,651],{"color":645,"icon":646},"success","i-lucide-check","The logger automatically emits when the request ends. No manual ",[239,649,650],{},"emit()"," call needed.",[653,654,656],"h3",{"id":655},"when-to-use-uselogger-vs-createlogger-vs-log","When to use useLogger vs createLogger vs log",[658,659,660,680],"table",{},[661,662,663],"thead",{},[664,665,666,671,676],"tr",{},[667,668,260,669],"th",{},[239,670,263],{},[667,672,260,673],{},[239,674,675],{},"createLogger()",[667,677,260,678],{},[239,679,245],{},[681,682,683,695,706],"tbody",{},[664,684,685,689,692],{},[686,687,688],"td",{},"API routes, middleware, server plugins",[686,690,691],{},"Scripts, jobs, workers, queues, workflows",[686,693,694],{},"One-off events outside request context",[664,696,697,700,703],{},[686,698,699],{},"When you need to accumulate context in a request",[686,701,702],{},"When you need to accumulate context outside a request",[686,704,705],{},"Quick debugging messages",[664,707,708,711,714],{},[686,709,710],{},"For wide events (one log per request)",[686,712,713],{},"For wide events (one log per operation)",[686,715,716],{},"Client-side logging",[653,718,720],{"id":719},"service-identification","Service Identification",[225,722,723],{},"In multi-service architectures, differentiate which service a log belongs to using either route-based configuration or explicit service names.",[725,726,728],"h4",{"id":727},"route-based-configuration","Route-Based Configuration",[225,730,731,732,384],{},"Configure service names per route pattern in your ",[239,733,734],{},"nuxt.config.ts",[269,736,738],{"className":271,"code":737,"filename":734,"language":274,"meta":275,"style":275},"export default defineNuxtConfig({\n  modules: ['evlog/nuxt'],\n\n  evlog: {\n    env: {\n      service: 'default-service', // Fallback service name\n    },\n    routes: {\n      '/api/auth/**': { service: 'auth-service' },\n      '/api/payment/**': { service: 'payment-service' },\n      '/api/booking/**': { service: 'booking-service' },\n    },\n  },\n})\n",[239,739,740,754,777,781,790,799,818,823,832,861,887,913,917,922],{"__ignoreMap":275},[279,741,742,744,746,749,751],{"class":281,"line":282},[279,743,286],{"class":285},[279,745,289],{"class":285},[279,747,748],{"class":292}," defineNuxtConfig",[279,750,297],{"class":296},[279,752,753],{"class":304},"{\n",[279,755,756,759,761,764,766,769,771,774],{"class":281,"line":321},[279,757,758],{"class":343},"  modules",[279,760,384],{"class":304},[279,762,763],{"class":296}," [",[279,765,414],{"class":304},[279,767,768],{"class":410},"evlog/nuxt",[279,770,414],{"class":304},[279,772,773],{"class":296},"]",[279,775,776],{"class":304},",\n",[279,778,779],{"class":281,"line":328},[279,780,355],{"emptyLinePlaceholder":354},[279,782,783,786,788],{"class":281,"line":351},[279,784,785],{"class":343},"  evlog",[279,787,384],{"class":304},[279,789,318],{"class":304},[279,791,792,795,797],{"class":281,"line":358},[279,793,794],{"class":343},"    env",[279,796,384],{"class":304},[279,798,318],{"class":304},[279,800,801,804,806,808,811,813,815],{"class":281,"line":364},[279,802,803],{"class":343},"      service",[279,805,384],{"class":304},[279,807,407],{"class":304},[279,809,810],{"class":410},"default-service",[279,812,414],{"class":304},[279,814,399],{"class":304},[279,816,817],{"class":324}," // Fallback service name\n",[279,819,820],{"class":281,"line":424},[279,821,822],{"class":304},"    },\n",[279,824,825,828,830],{"class":281,"line":468},[279,826,827],{"class":343},"    routes",[279,829,384],{"class":304},[279,831,318],{"class":304},[279,833,834,837,840,842,844,846,849,851,853,856,858],{"class":281,"line":473},[279,835,836],{"class":304},"      '",[279,838,839],{"class":343},"/api/auth/**",[279,841,414],{"class":304},[279,843,384],{"class":304},[279,845,387],{"class":304},[279,847,848],{"class":343}," service",[279,850,384],{"class":304},[279,852,407],{"class":304},[279,854,855],{"class":410},"auth-service",[279,857,414],{"class":304},[279,859,860],{"class":304}," },\n",[279,862,863,865,868,870,872,874,876,878,880,883,885],{"class":281,"line":479},[279,864,836],{"class":304},[279,866,867],{"class":343},"/api/payment/**",[279,869,414],{"class":304},[279,871,384],{"class":304},[279,873,387],{"class":304},[279,875,848],{"class":343},[279,877,384],{"class":304},[279,879,407],{"class":304},[279,881,882],{"class":410},"payment-service",[279,884,414],{"class":304},[279,886,860],{"class":304},[279,888,889,891,894,896,898,900,902,904,906,909,911],{"class":281,"line":498},[279,890,836],{"class":304},[279,892,893],{"class":343},"/api/booking/**",[279,895,414],{"class":304},[279,897,384],{"class":304},[279,899,387],{"class":304},[279,901,848],{"class":343},[279,903,384],{"class":304},[279,905,407],{"class":304},[279,907,908],{"class":410},"booking-service",[279,910,414],{"class":304},[279,912,860],{"class":304},[279,914,915],{"class":281,"line":527},[279,916,822],{"class":304},[279,918,919],{"class":281,"line":532},[279,920,921],{"class":304},"  },\n",[279,923,924,926],{"class":281,"line":538},[279,925,573],{"class":304},[279,927,348],{"class":296},[225,929,930],{},"Logs from routes matching these patterns will automatically include the configured service name:",[269,932,935],{"className":578,"code":933,"filename":934,"language":581,"meta":275,"style":275},"21:57:10.442 INFO [auth-service] POST /api/auth/login 200 in 1ms\n  ├─ requestId: 88ced16a-bef2-4483-86cb-2b4fb677ea52\n  ├─ user: id=user_123 email=demo@example.com\n  └─ action: login\n","Output",[239,936,937,947,957,969],{"__ignoreMap":275},[279,938,939,942,944],{"class":281,"line":282},[279,940,941],{"class":588},"21:57:10.442",[279,943,592],{"class":410},[279,945,946],{"class":296}," [auth-service] POST /api/auth/login 200 in 1ms\n",[279,948,949,951,954],{"class":281,"line":321},[279,950,600],{"class":588},[279,952,953],{"class":410}," requestId:",[279,955,956],{"class":410}," 88ced16a-bef2-4483-86cb-2b4fb677ea52\n",[279,958,959,961,963,966],{"class":281,"line":328},[279,960,600],{"class":588},[279,962,603],{"class":410},[279,964,965],{"class":410}," id=user_123",[279,967,968],{"class":410}," email=demo@example.com\n",[279,970,971,973,976],{"class":281,"line":351},[279,972,636],{"class":588},[279,974,975],{"class":410}," action:",[279,977,978],{"class":410}," login\n",[725,980,982],{"id":981},"explicit-service-parameter","Explicit Service Parameter",[225,984,985,986,384],{},"Override the service name for specific routes using the second parameter of ",[239,987,241],{},[269,989,992],{"className":271,"code":990,"filename":991,"language":274,"meta":275,"style":275},"export default defineEventHandler((event) => {\n  // Explicitly set service name for this handler\n  const log = useLogger(event, 'legacy-service')\n\n  log.set({ action: 'process_legacy_request' })\n\n  return { success: true }\n})\n","server/api/legacy/process.post.ts",[239,993,994,1014,1019,1044,1048,1076,1080,1094],{"__ignoreMap":275},[279,995,996,998,1000,1002,1004,1006,1008,1010,1012],{"class":281,"line":282},[279,997,286],{"class":285},[279,999,289],{"class":285},[279,1001,293],{"class":292},[279,1003,297],{"class":296},[279,1005,297],{"class":304},[279,1007,309],{"class":308},[279,1009,312],{"class":304},[279,1011,315],{"class":300},[279,1013,318],{"class":304},[279,1015,1016],{"class":281,"line":321},[279,1017,1018],{"class":324},"  // Explicitly set service name for this handler\n",[279,1020,1021,1023,1025,1027,1029,1031,1033,1035,1037,1040,1042],{"class":281,"line":328},[279,1022,331],{"class":300},[279,1024,334],{"class":296},[279,1026,337],{"class":304},[279,1028,340],{"class":292},[279,1030,297],{"class":343},[279,1032,309],{"class":296},[279,1034,399],{"class":304},[279,1036,407],{"class":304},[279,1038,1039],{"class":410},"legacy-service",[279,1041,414],{"class":304},[279,1043,348],{"class":343},[279,1045,1046],{"class":281,"line":351},[279,1047,355],{"emptyLinePlaceholder":354},[279,1049,1050,1052,1054,1056,1058,1060,1063,1065,1067,1070,1072,1074],{"class":281,"line":358},[279,1051,367],{"class":296},[279,1053,370],{"class":304},[279,1055,373],{"class":292},[279,1057,297],{"class":343},[279,1059,378],{"class":304},[279,1061,1062],{"class":343}," action",[279,1064,384],{"class":304},[279,1066,407],{"class":304},[279,1068,1069],{"class":410},"process_legacy_request",[279,1071,414],{"class":304},[279,1073,417],{"class":304},[279,1075,348],{"class":343},[279,1077,1078],{"class":281,"line":364},[279,1079,355],{"emptyLinePlaceholder":354},[279,1081,1082,1084,1086,1088,1090,1092],{"class":281,"line":424},[279,1083,541],{"class":285},[279,1085,387],{"class":304},[279,1087,546],{"class":343},[279,1089,384],{"class":304},[279,1091,552],{"class":551},[279,1093,567],{"class":304},[279,1095,1096,1098],{"class":281,"line":468},[279,1097,573],{"class":304},[279,1099,348],{"class":296},[229,1101,1102,1105,1106,1108,1109,1112],{"color":231,"icon":13},[234,1103,1104],{},"Priority order:"," Explicit ",[239,1107,241],{}," parameter > Route configuration > ",[239,1110,1111],{},"env.service"," > Auto-detected from environment",[254,1114,1116],{"id":1115},"createlogger-standalone","createLogger (Standalone)",[225,1118,260,1119,1121],{},[239,1120,675],{}," when you need a wide event logger outside of an HTTP request context — scripts, background jobs, queue workers, workflows, etc.",[266,1123,1124,1329],{},[269,1125,1128],{"className":271,"code":1126,"filename":1127,"language":274,"meta":275,"style":275},"import { initLogger, createLogger } from 'evlog'\n\ninitLogger({ env: { service: 'sync-worker' } })\n\nconst log = createLogger({ jobId: job.id, queue: 'emails' })\n\nlog.set({ batch: { size: 50 } })\nlog.set({ batch: { processed: 50 } })\nlog.emit() // Manual emit required\n","scripts/sync-job.ts",[239,1129,1130,1158,1162,1195,1199,1246,1250,1283,1314],{"__ignoreMap":275},[279,1131,1132,1135,1137,1140,1142,1145,1147,1150,1152,1155],{"class":281,"line":282},[279,1133,1134],{"class":285},"import",[279,1136,387],{"class":304},[279,1138,1139],{"class":296}," initLogger",[279,1141,399],{"class":304},[279,1143,1144],{"class":296}," createLogger",[279,1146,417],{"class":304},[279,1148,1149],{"class":285}," from",[279,1151,407],{"class":304},[279,1153,1154],{"class":410},"evlog",[279,1156,1157],{"class":304},"'\n",[279,1159,1160],{"class":281,"line":321},[279,1161,355],{"emptyLinePlaceholder":354},[279,1163,1164,1167,1169,1171,1174,1176,1178,1180,1182,1184,1187,1189,1191,1193],{"class":281,"line":328},[279,1165,1166],{"class":292},"initLogger",[279,1168,297],{"class":296},[279,1170,378],{"class":304},[279,1172,1173],{"class":343}," env",[279,1175,384],{"class":304},[279,1177,387],{"class":304},[279,1179,848],{"class":343},[279,1181,384],{"class":304},[279,1183,407],{"class":304},[279,1185,1186],{"class":410},"sync-worker",[279,1188,414],{"class":304},[279,1190,417],{"class":304},[279,1192,417],{"class":304},[279,1194,348],{"class":296},[279,1196,1197],{"class":281,"line":351},[279,1198,355],{"emptyLinePlaceholder":354},[279,1200,1201,1204,1207,1210,1212,1214,1216,1219,1221,1224,1226,1228,1230,1233,1235,1237,1240,1242,1244],{"class":281,"line":358},[279,1202,1203],{"class":300},"const",[279,1205,1206],{"class":296}," log ",[279,1208,1209],{"class":304},"=",[279,1211,1144],{"class":292},[279,1213,297],{"class":296},[279,1215,378],{"class":304},[279,1217,1218],{"class":343}," jobId",[279,1220,384],{"class":304},[279,1222,1223],{"class":296}," job",[279,1225,370],{"class":304},[279,1227,520],{"class":296},[279,1229,399],{"class":304},[279,1231,1232],{"class":343}," queue",[279,1234,384],{"class":304},[279,1236,407],{"class":304},[279,1238,1239],{"class":410},"emails",[279,1241,414],{"class":304},[279,1243,417],{"class":304},[279,1245,348],{"class":296},[279,1247,1248],{"class":281,"line":364},[279,1249,355],{"emptyLinePlaceholder":354},[279,1251,1252,1254,1256,1258,1260,1262,1265,1267,1269,1272,1274,1277,1279,1281],{"class":281,"line":424},[279,1253,245],{"class":296},[279,1255,370],{"class":304},[279,1257,373],{"class":292},[279,1259,297],{"class":296},[279,1261,378],{"class":304},[279,1263,1264],{"class":343}," batch",[279,1266,384],{"class":304},[279,1268,387],{"class":304},[279,1270,1271],{"class":343}," size",[279,1273,384],{"class":304},[279,1275,1276],{"class":395}," 50",[279,1278,417],{"class":304},[279,1280,417],{"class":304},[279,1282,348],{"class":296},[279,1284,1285,1287,1289,1291,1293,1295,1297,1299,1301,1304,1306,1308,1310,1312],{"class":281,"line":468},[279,1286,245],{"class":296},[279,1288,370],{"class":304},[279,1290,373],{"class":292},[279,1292,297],{"class":296},[279,1294,378],{"class":304},[279,1296,1264],{"class":343},[279,1298,384],{"class":304},[279,1300,387],{"class":304},[279,1302,1303],{"class":343}," processed",[279,1305,384],{"class":304},[279,1307,1276],{"class":395},[279,1309,417],{"class":304},[279,1311,417],{"class":304},[279,1313,348],{"class":296},[279,1315,1316,1318,1320,1323,1326],{"class":281,"line":473},[279,1317,245],{"class":296},[279,1319,370],{"class":304},[279,1321,1322],{"class":292},"emit",[279,1324,1325],{"class":296},"() ",[279,1327,1328],{"class":324},"// Manual emit required\n",[269,1330,1332],{"className":578,"code":1331,"filename":580,"language":581,"meta":275,"style":275},"10:23:45.612 INFO [sync-worker] in 1204ms\n  ├─ jobId: job_abc123\n  ├─ queue: emails\n  └─ batch: size=50 processed=50\n",[239,1333,1334,1343,1353,1363],{"__ignoreMap":275},[279,1335,1336,1338,1340],{"class":281,"line":282},[279,1337,589],{"class":588},[279,1339,592],{"class":410},[279,1341,1342],{"class":296}," [sync-worker] in 1204ms\n",[279,1344,1345,1347,1350],{"class":281,"line":321},[279,1346,600],{"class":588},[279,1348,1349],{"class":410}," jobId:",[279,1351,1352],{"class":410}," job_abc123\n",[279,1354,1355,1357,1360],{"class":281,"line":328},[279,1356,600],{"class":588},[279,1358,1359],{"class":410}," queue:",[279,1361,1362],{"class":410}," emails\n",[279,1364,1365,1367,1370,1373,1376,1379],{"class":281,"line":351},[279,1366,636],{"class":588},[279,1368,1369],{"class":410}," batch:",[279,1371,1372],{"class":410}," size=",[279,1374,1375],{"class":395},"50",[279,1377,1378],{"class":410}," processed=",[279,1380,1381],{"class":395},"50\n",[225,1383,1384,1386,1387,1390,1391,242,1393,242,1396,242,1398,242,1401,242,1403,1406],{},[239,1385,675],{}," accepts any initial context as a plain object. It returns the same ",[239,1388,1389],{},"RequestLogger"," interface (",[239,1392,373],{},[239,1394,1395],{},"error",[239,1397,231],{},[239,1399,1400],{},"warn",[239,1402,1322],{},[239,1404,1405],{},"getContext",").",[225,1408,1409,1410,1413,1414,242,1417,1420,1421,384],{},"For HTTP request contexts specifically, use ",[239,1411,1412],{},"createRequestLogger()"," which pre-populates ",[239,1415,1416],{},"method",[239,1418,1419],{},"path",", and ",[239,1422,1423],{},"requestId",[269,1425,1427],{"className":271,"code":1426,"language":274,"meta":275,"style":275},"import { createRequestLogger } from 'evlog'\n\nconst log = createRequestLogger({ method: 'POST', path: '/api/checkout' })\n",[239,1428,1429,1448,1452],{"__ignoreMap":275},[279,1430,1431,1433,1435,1438,1440,1442,1444,1446],{"class":281,"line":282},[279,1432,1134],{"class":285},[279,1434,387],{"class":304},[279,1436,1437],{"class":296}," createRequestLogger",[279,1439,417],{"class":304},[279,1441,1149],{"class":285},[279,1443,407],{"class":304},[279,1445,1154],{"class":410},[279,1447,1157],{"class":304},[279,1449,1450],{"class":281,"line":321},[279,1451,355],{"emptyLinePlaceholder":354},[279,1453,1454,1456,1458,1460,1462,1464,1466,1469,1471,1473,1476,1478,1480,1483,1485,1487,1490,1492,1494],{"class":281,"line":328},[279,1455,1203],{"class":300},[279,1457,1206],{"class":296},[279,1459,1209],{"class":304},[279,1461,1437],{"class":292},[279,1463,297],{"class":296},[279,1465,378],{"class":304},[279,1467,1468],{"class":343}," method",[279,1470,384],{"class":304},[279,1472,407],{"class":304},[279,1474,1475],{"class":410},"POST",[279,1477,414],{"class":304},[279,1479,399],{"class":304},[279,1481,1482],{"class":343}," path",[279,1484,384],{"class":304},[279,1486,407],{"class":304},[279,1488,1489],{"class":410},"/api/checkout",[279,1491,414],{"class":304},[279,1493,417],{"class":304},[279,1495,348],{"class":296},[229,1497,1498,1499,1502,1503,1506,1507,1510],{"color":231,"icon":13},"In standalone mode (both ",[239,1500,1501],{},"createLogger"," and ",[239,1504,1505],{},"createRequestLogger","), you must call ",[239,1508,1509],{},"log.emit()"," manually. In Nuxt/Nitro, this happens automatically at request end.",[254,1512,1514],{"id":1513},"createerror-structured-errors","createError (Structured Errors)",[225,1516,260,1517,1520],{},[239,1518,1519],{},"createError()"," to throw errors with actionable context:",[266,1522,1523,1650],{},[269,1524,1527],{"className":271,"code":1525,"filename":1526,"language":274,"meta":275,"style":275},"// server/api/checkout.post.ts\nimport { createError } from 'evlog'\n\nthrow createError({\n  message: 'Payment failed',\n  status: 402,\n  why: 'Card declined by issuer',\n  fix: 'Try a different payment method',\n  link: 'https://docs.example.com/payments/declined',\n})\n","Code",[239,1528,1529,1534,1553,1557,1568,1584,1596,1612,1628,1644],{"__ignoreMap":275},[279,1530,1531],{"class":281,"line":282},[279,1532,1533],{"class":324},"// server/api/checkout.post.ts\n",[279,1535,1536,1538,1540,1543,1545,1547,1549,1551],{"class":281,"line":321},[279,1537,1134],{"class":285},[279,1539,387],{"class":304},[279,1541,1542],{"class":296}," createError",[279,1544,417],{"class":304},[279,1546,1149],{"class":285},[279,1548,407],{"class":304},[279,1550,1154],{"class":410},[279,1552,1157],{"class":304},[279,1554,1555],{"class":281,"line":328},[279,1556,355],{"emptyLinePlaceholder":354},[279,1558,1559,1562,1564,1566],{"class":281,"line":351},[279,1560,1561],{"class":285},"throw",[279,1563,1542],{"class":292},[279,1565,297],{"class":296},[279,1567,753],{"class":304},[279,1569,1570,1573,1575,1577,1580,1582],{"class":281,"line":358},[279,1571,1572],{"class":343},"  message",[279,1574,384],{"class":304},[279,1576,407],{"class":304},[279,1578,1579],{"class":410},"Payment failed",[279,1581,414],{"class":304},[279,1583,776],{"class":304},[279,1585,1586,1589,1591,1594],{"class":281,"line":364},[279,1587,1588],{"class":343},"  status",[279,1590,384],{"class":304},[279,1592,1593],{"class":395}," 402",[279,1595,776],{"class":304},[279,1597,1598,1601,1603,1605,1608,1610],{"class":281,"line":424},[279,1599,1600],{"class":343},"  why",[279,1602,384],{"class":304},[279,1604,407],{"class":304},[279,1606,1607],{"class":410},"Card declined by issuer",[279,1609,414],{"class":304},[279,1611,776],{"class":304},[279,1613,1614,1617,1619,1621,1624,1626],{"class":281,"line":468},[279,1615,1616],{"class":343},"  fix",[279,1618,384],{"class":304},[279,1620,407],{"class":304},[279,1622,1623],{"class":410},"Try a different payment method",[279,1625,414],{"class":304},[279,1627,776],{"class":304},[279,1629,1630,1633,1635,1637,1640,1642],{"class":281,"line":473},[279,1631,1632],{"class":343},"  link",[279,1634,384],{"class":304},[279,1636,407],{"class":304},[279,1638,1639],{"class":410},"https://docs.example.com/payments/declined",[279,1641,414],{"class":304},[279,1643,776],{"class":304},[279,1645,1646,1648],{"class":281,"line":479},[279,1647,573],{"class":304},[279,1649,348],{"class":296},[269,1651,1656],{"className":1652,"code":1653,"filename":1654,"language":1655,"meta":275,"style":275},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"statusCode\": 402,\n  \"message\": \"Payment failed\",\n  \"data\": {\n    \"why\": \"Card declined by issuer\",\n    \"fix\": \"Try a different payment method\",\n    \"link\": \"https://docs.example.com/payments/declined\"\n  }\n}\n","Response","json",[239,1657,1658,1662,1679,1699,1712,1732,1751,1769,1774],{"__ignoreMap":275},[279,1659,1660],{"class":281,"line":282},[279,1661,753],{"class":304},[279,1663,1664,1667,1670,1673,1675,1677],{"class":281,"line":321},[279,1665,1666],{"class":304},"  \"",[279,1668,1669],{"class":300},"statusCode",[279,1671,1672],{"class":304},"\"",[279,1674,384],{"class":304},[279,1676,1593],{"class":395},[279,1678,776],{"class":304},[279,1680,1681,1683,1686,1688,1690,1693,1695,1697],{"class":281,"line":328},[279,1682,1666],{"class":304},[279,1684,1685],{"class":300},"message",[279,1687,1672],{"class":304},[279,1689,384],{"class":304},[279,1691,1692],{"class":304}," \"",[279,1694,1579],{"class":410},[279,1696,1672],{"class":304},[279,1698,776],{"class":304},[279,1700,1701,1703,1706,1708,1710],{"class":281,"line":351},[279,1702,1666],{"class":304},[279,1704,1705],{"class":300},"data",[279,1707,1672],{"class":304},[279,1709,384],{"class":304},[279,1711,318],{"class":304},[279,1713,1714,1717,1720,1722,1724,1726,1728,1730],{"class":281,"line":358},[279,1715,1716],{"class":304},"    \"",[279,1718,1719],{"class":588},"why",[279,1721,1672],{"class":304},[279,1723,384],{"class":304},[279,1725,1692],{"class":304},[279,1727,1607],{"class":410},[279,1729,1672],{"class":304},[279,1731,776],{"class":304},[279,1733,1734,1736,1739,1741,1743,1745,1747,1749],{"class":281,"line":364},[279,1735,1716],{"class":304},[279,1737,1738],{"class":588},"fix",[279,1740,1672],{"class":304},[279,1742,384],{"class":304},[279,1744,1692],{"class":304},[279,1746,1623],{"class":410},[279,1748,1672],{"class":304},[279,1750,776],{"class":304},[279,1752,1753,1755,1758,1760,1762,1764,1766],{"class":281,"line":424},[279,1754,1716],{"class":304},[279,1756,1757],{"class":588},"link",[279,1759,1672],{"class":304},[279,1761,384],{"class":304},[279,1763,1692],{"class":304},[279,1765,1639],{"class":410},[279,1767,1768],{"class":304},"\"\n",[279,1770,1771],{"class":281,"line":468},[279,1772,1773],{"class":304},"  }\n",[279,1775,1776],{"class":281,"line":473},[279,1777,1778],{"class":304},"}\n",[653,1780,1782],{"id":1781},"error-fields","Error Fields",[658,1784,1785,1798],{},[661,1786,1787],{},[664,1788,1789,1792,1795],{},[667,1790,1791],{},"Field",[667,1793,1794],{},"Required",[667,1796,1797],{},"Description",[681,1799,1800,1812,1825,1836,1847,1858],{},[664,1801,1802,1806,1809],{},[686,1803,1804],{},[239,1805,1685],{},[686,1807,1808],{},"Yes",[686,1810,1811],{},"What happened (user-facing)",[664,1813,1814,1819,1822],{},[686,1815,1816],{},[239,1817,1818],{},"status",[686,1820,1821],{},"No",[686,1823,1824],{},"HTTP status code (default: 500)",[664,1826,1827,1831,1833],{},[686,1828,1829],{},[239,1830,1719],{},[686,1832,1821],{},[686,1834,1835],{},"Technical reason (for debugging)",[664,1837,1838,1842,1844],{},[686,1839,1840],{},[239,1841,1738],{},[686,1843,1821],{},[686,1845,1846],{},"Actionable solution",[664,1848,1849,1853,1855],{},[686,1850,1851],{},[239,1852,1757],{},[686,1854,1821],{},[686,1856,1857],{},"Documentation URL for more info",[664,1859,1860,1865,1867],{},[686,1861,1862],{},[239,1863,1864],{},"cause",[686,1866,1821],{},[686,1868,1869],{},"Original error (if wrapping)",[653,1871,1873],{"id":1872},"frontend-integration","Frontend Integration",[225,1875,260,1876,1879],{},[239,1877,1878],{},"parseError()"," to extract all error fields on the client:",[269,1881,1884],{"className":271,"code":1882,"filename":1883,"language":274,"meta":275,"style":275},"import { parseError } from 'evlog'\n\nexport async function checkout(cart: Cart) {\n  try {\n    await $fetch('/api/checkout', { method: 'POST', body: cart })\n  } catch (err) {\n    const error = parseError(err)\n\n    // Direct access to all fields\n    toast.add({\n      title: error.message,\n      description: error.why,\n      color: 'error',\n      actions: error.link\n        ? [{ label: 'Learn more', onClick: () => window.open(error.link) }]\n        : undefined,\n    })\n\n    if (error.fix) {\n      console.info(`Fix: ${error.fix}`)\n    }\n  }\n}\n","composables/useCheckout.ts",[239,1885,1886,1905,1909,1936,1943,1986,2004,2022,2026,2031,2045,2060,2075,2090,2104,2160,2169,2177,2182,2200,2232,2238,2243],{"__ignoreMap":275},[279,1887,1888,1890,1892,1895,1897,1899,1901,1903],{"class":281,"line":282},[279,1889,1134],{"class":285},[279,1891,387],{"class":304},[279,1893,1894],{"class":296}," parseError",[279,1896,417],{"class":304},[279,1898,1149],{"class":285},[279,1900,407],{"class":304},[279,1902,1154],{"class":410},[279,1904,1157],{"class":304},[279,1906,1907],{"class":281,"line":321},[279,1908,355],{"emptyLinePlaceholder":354},[279,1910,1911,1913,1916,1919,1922,1924,1927,1929,1932,1934],{"class":281,"line":328},[279,1912,286],{"class":285},[279,1914,1915],{"class":300}," async",[279,1917,1918],{"class":300}," function",[279,1920,1921],{"class":292}," checkout",[279,1923,297],{"class":304},[279,1925,1926],{"class":308},"cart",[279,1928,384],{"class":304},[279,1930,1931],{"class":588}," Cart",[279,1933,312],{"class":304},[279,1935,318],{"class":304},[279,1937,1938,1941],{"class":281,"line":351},[279,1939,1940],{"class":285},"  try",[279,1942,318],{"class":304},[279,1944,1945,1948,1951,1953,1955,1957,1959,1961,1963,1965,1967,1969,1971,1973,1975,1978,1980,1982,1984],{"class":281,"line":358},[279,1946,1947],{"class":285},"    await",[279,1949,1950],{"class":292}," $fetch",[279,1952,297],{"class":343},[279,1954,414],{"class":304},[279,1956,1489],{"class":410},[279,1958,414],{"class":304},[279,1960,399],{"class":304},[279,1962,387],{"class":304},[279,1964,1468],{"class":343},[279,1966,384],{"class":304},[279,1968,407],{"class":304},[279,1970,1475],{"class":410},[279,1972,414],{"class":304},[279,1974,399],{"class":304},[279,1976,1977],{"class":343}," body",[279,1979,384],{"class":304},[279,1981,437],{"class":296},[279,1983,417],{"class":304},[279,1985,348],{"class":343},[279,1987,1988,1991,1994,1996,1999,2002],{"class":281,"line":364},[279,1989,1990],{"class":304},"  }",[279,1992,1993],{"class":285}," catch",[279,1995,305],{"class":343},[279,1997,1998],{"class":296},"err",[279,2000,2001],{"class":343},") ",[279,2003,753],{"class":304},[279,2005,2006,2009,2012,2014,2016,2018,2020],{"class":281,"line":424},[279,2007,2008],{"class":300},"    const",[279,2010,2011],{"class":296}," error",[279,2013,337],{"class":304},[279,2015,1894],{"class":292},[279,2017,297],{"class":343},[279,2019,1998],{"class":296},[279,2021,348],{"class":343},[279,2023,2024],{"class":281,"line":468},[279,2025,355],{"emptyLinePlaceholder":354},[279,2027,2028],{"class":281,"line":473},[279,2029,2030],{"class":324},"    // Direct access to all fields\n",[279,2032,2033,2036,2038,2041,2043],{"class":281,"line":479},[279,2034,2035],{"class":296},"    toast",[279,2037,370],{"class":304},[279,2039,2040],{"class":292},"add",[279,2042,297],{"class":343},[279,2044,753],{"class":304},[279,2046,2047,2050,2052,2054,2056,2058],{"class":281,"line":498},[279,2048,2049],{"class":343},"      title",[279,2051,384],{"class":304},[279,2053,2011],{"class":296},[279,2055,370],{"class":304},[279,2057,1685],{"class":296},[279,2059,776],{"class":304},[279,2061,2062,2065,2067,2069,2071,2073],{"class":281,"line":527},[279,2063,2064],{"class":343},"      description",[279,2066,384],{"class":304},[279,2068,2011],{"class":296},[279,2070,370],{"class":304},[279,2072,1719],{"class":296},[279,2074,776],{"class":304},[279,2076,2077,2080,2082,2084,2086,2088],{"class":281,"line":532},[279,2078,2079],{"class":343},"      color",[279,2081,384],{"class":304},[279,2083,407],{"class":304},[279,2085,1395],{"class":410},[279,2087,414],{"class":304},[279,2089,776],{"class":304},[279,2091,2092,2095,2097,2099,2101],{"class":281,"line":538},[279,2093,2094],{"class":343},"      actions",[279,2096,384],{"class":304},[279,2098,2011],{"class":296},[279,2100,370],{"class":304},[279,2102,2103],{"class":296},"link\n",[279,2105,2106,2109,2111,2113,2116,2118,2120,2123,2125,2127,2130,2132,2135,2137,2140,2142,2145,2147,2149,2151,2153,2155,2157],{"class":281,"line":570},[279,2107,2108],{"class":304},"        ?",[279,2110,763],{"class":343},[279,2112,378],{"class":304},[279,2114,2115],{"class":343}," label",[279,2117,384],{"class":304},[279,2119,407],{"class":304},[279,2121,2122],{"class":410},"Learn more",[279,2124,414],{"class":304},[279,2126,399],{"class":304},[279,2128,2129],{"class":292}," onClick",[279,2131,384],{"class":304},[279,2133,2134],{"class":304}," ()",[279,2136,315],{"class":300},[279,2138,2139],{"class":296}," window",[279,2141,370],{"class":304},[279,2143,2144],{"class":292},"open",[279,2146,297],{"class":343},[279,2148,1395],{"class":296},[279,2150,370],{"class":304},[279,2152,1757],{"class":296},[279,2154,2001],{"class":343},[279,2156,573],{"class":304},[279,2158,2159],{"class":343},"]\n",[279,2161,2163,2166],{"class":281,"line":2162},16,[279,2164,2165],{"class":304},"        :",[279,2167,2168],{"class":304}," undefined,\n",[279,2170,2172,2175],{"class":281,"line":2171},17,[279,2173,2174],{"class":304},"    }",[279,2176,348],{"class":343},[279,2178,2180],{"class":281,"line":2179},18,[279,2181,355],{"emptyLinePlaceholder":354},[279,2183,2185,2188,2190,2192,2194,2196,2198],{"class":281,"line":2184},19,[279,2186,2187],{"class":285},"    if",[279,2189,305],{"class":343},[279,2191,1395],{"class":296},[279,2193,370],{"class":304},[279,2195,1738],{"class":296},[279,2197,2001],{"class":343},[279,2199,753],{"class":304},[279,2201,2203,2206,2208,2210,2212,2215,2218,2221,2223,2225,2227,2230],{"class":281,"line":2202},20,[279,2204,2205],{"class":296},"      console",[279,2207,370],{"class":304},[279,2209,231],{"class":292},[279,2211,297],{"class":343},[279,2213,2214],{"class":304},"`",[279,2216,2217],{"class":410},"Fix: ",[279,2219,2220],{"class":304},"${",[279,2222,1395],{"class":296},[279,2224,370],{"class":304},[279,2226,1738],{"class":296},[279,2228,2229],{"class":304},"}`",[279,2231,348],{"class":343},[279,2233,2235],{"class":281,"line":2234},21,[279,2236,2237],{"class":304},"    }\n",[279,2239,2241],{"class":281,"line":2240},22,[279,2242,1773],{"class":304},[279,2244,2246],{"class":281,"line":2245},23,[279,2247,1778],{"class":304},[254,2249,2251],{"id":2250},"log-simple-logging","log (Simple Logging)",[225,2253,2254],{},"For quick one-off logs anywhere in your code:",[266,2256,2257,2364],{},[269,2258,2261],{"className":271,"code":2259,"filename":2260,"language":274,"meta":275,"style":275},"// server/utils/auth.ts\nlog.info('auth', 'User logged in')\nlog.error({ action: 'payment', error: 'card_declined' })\nlog.warn('cache', 'Cache miss')\n","Server",[239,2262,2263,2268,2296,2336],{"__ignoreMap":275},[279,2264,2265],{"class":281,"line":282},[279,2266,2267],{"class":324},"// server/utils/auth.ts\n",[279,2269,2270,2272,2274,2276,2278,2280,2283,2285,2287,2289,2292,2294],{"class":281,"line":321},[279,2271,245],{"class":296},[279,2273,370],{"class":304},[279,2275,231],{"class":292},[279,2277,297],{"class":296},[279,2279,414],{"class":304},[279,2281,2282],{"class":410},"auth",[279,2284,414],{"class":304},[279,2286,399],{"class":304},[279,2288,407],{"class":304},[279,2290,2291],{"class":410},"User logged in",[279,2293,414],{"class":304},[279,2295,348],{"class":296},[279,2297,2298,2300,2302,2304,2306,2308,2310,2312,2314,2317,2319,2321,2323,2325,2327,2330,2332,2334],{"class":281,"line":328},[279,2299,245],{"class":296},[279,2301,370],{"class":304},[279,2303,1395],{"class":292},[279,2305,297],{"class":296},[279,2307,378],{"class":304},[279,2309,1062],{"class":343},[279,2311,384],{"class":304},[279,2313,407],{"class":304},[279,2315,2316],{"class":410},"payment",[279,2318,414],{"class":304},[279,2320,399],{"class":304},[279,2322,2011],{"class":343},[279,2324,384],{"class":304},[279,2326,407],{"class":304},[279,2328,2329],{"class":410},"card_declined",[279,2331,414],{"class":304},[279,2333,417],{"class":304},[279,2335,348],{"class":296},[279,2337,2338,2340,2342,2344,2346,2348,2351,2353,2355,2357,2360,2362],{"class":281,"line":351},[279,2339,245],{"class":296},[279,2341,370],{"class":304},[279,2343,1400],{"class":292},[279,2345,297],{"class":296},[279,2347,414],{"class":304},[279,2349,2350],{"class":410},"cache",[279,2352,414],{"class":304},[279,2354,399],{"class":304},[279,2356,407],{"class":304},[279,2358,2359],{"class":410},"Cache miss",[279,2361,414],{"class":304},[279,2363,348],{"class":296},[269,2365,2367],{"className":578,"code":2366,"filename":934,"language":581,"meta":275,"style":275},"10:23:45.612 [auth] User logged in\n10:23:45.613 ERROR [my-app] action=payment error=card_declined\n10:23:45.614 [cache] Cache miss\n",[239,2368,2369,2376,2398],{"__ignoreMap":275},[279,2370,2371,2373],{"class":281,"line":282},[279,2372,589],{"class":588},[279,2374,2375],{"class":296}," [auth] User logged in\n",[279,2377,2378,2381,2384,2387,2389,2391,2393,2395],{"class":281,"line":321},[279,2379,2380],{"class":588},"10:23:45.613",[279,2382,2383],{"class":410}," ERROR",[279,2385,2386],{"class":296}," [my-app] action",[279,2388,1209],{"class":304},[279,2390,2316],{"class":410},[279,2392,2011],{"class":296},[279,2394,1209],{"class":304},[279,2396,2397],{"class":410},"card_declined\n",[279,2399,2400,2403],{"class":281,"line":328},[279,2401,2402],{"class":588},"10:23:45.614",[279,2404,2405],{"class":296}," [cache] Cache miss\n",[229,2407,2410,2411,2413,2414,2416],{"color":2408,"icon":2409},"warning","i-lucide-lightbulb","Prefer wide events (",[239,2412,241],{},") over simple logs when possible. Use ",[239,2415,245],{}," for truly one-off events that don't belong to a request.",[254,2418,2420],{"id":2419},"log-client-side","log (Client-Side)",[225,2422,2423,2424,2426],{},"The same ",[239,2425,245],{}," API works on the client side, outputting to the browser console:",[266,2428,2429,2657],{},[269,2430,2435],{"className":2431,"code":2432,"filename":2433,"language":2434,"meta":275,"style":275},"language-vue shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u003Cscript setup lang=\"ts\">\nasync function handleCheckout() {\n  log.info('checkout', 'User initiated checkout')\n\n  try {\n    await $fetch('/api/checkout', { method: 'POST' })\n    log.info({ action: 'checkout', status: 'success' })\n  } catch (err) {\n    log.error({ action: 'checkout', error: 'failed' })\n  }\n}\n\u003C/script>\n","components/CheckoutButton.vue","vue",[239,2436,2437,2463,2477,2505,2509,2515,2547,2587,2601,2640,2644,2648],{"__ignoreMap":275},[279,2438,2439,2442,2445,2448,2451,2453,2455,2458,2460],{"class":281,"line":282},[279,2440,2441],{"class":304},"\u003C",[279,2443,2444],{"class":343},"script",[279,2446,2447],{"class":300}," setup",[279,2449,2450],{"class":300}," lang",[279,2452,1209],{"class":304},[279,2454,1672],{"class":304},[279,2456,2457],{"class":410},"ts",[279,2459,1672],{"class":304},[279,2461,2462],{"class":304},">\n",[279,2464,2465,2467,2469,2472,2475],{"class":281,"line":321},[279,2466,301],{"class":300},[279,2468,1918],{"class":300},[279,2470,2471],{"class":292}," handleCheckout",[279,2473,2474],{"class":304},"()",[279,2476,318],{"class":304},[279,2478,2479,2481,2483,2485,2487,2489,2492,2494,2496,2498,2501,2503],{"class":281,"line":328},[279,2480,367],{"class":296},[279,2482,370],{"class":304},[279,2484,231],{"class":292},[279,2486,297],{"class":343},[279,2488,414],{"class":304},[279,2490,2491],{"class":410},"checkout",[279,2493,414],{"class":304},[279,2495,399],{"class":304},[279,2497,407],{"class":304},[279,2499,2500],{"class":410},"User initiated checkout",[279,2502,414],{"class":304},[279,2504,348],{"class":343},[279,2506,2507],{"class":281,"line":351},[279,2508,355],{"emptyLinePlaceholder":354},[279,2510,2511,2513],{"class":281,"line":358},[279,2512,1940],{"class":285},[279,2514,318],{"class":304},[279,2516,2517,2519,2521,2523,2525,2527,2529,2531,2533,2535,2537,2539,2541,2543,2545],{"class":281,"line":364},[279,2518,1947],{"class":285},[279,2520,1950],{"class":292},[279,2522,297],{"class":343},[279,2524,414],{"class":304},[279,2526,1489],{"class":410},[279,2528,414],{"class":304},[279,2530,399],{"class":304},[279,2532,387],{"class":304},[279,2534,1468],{"class":343},[279,2536,384],{"class":304},[279,2538,407],{"class":304},[279,2540,1475],{"class":410},[279,2542,414],{"class":304},[279,2544,417],{"class":304},[279,2546,348],{"class":343},[279,2548,2549,2552,2554,2556,2558,2560,2562,2564,2566,2568,2570,2572,2575,2577,2579,2581,2583,2585],{"class":281,"line":424},[279,2550,2551],{"class":296},"    log",[279,2553,370],{"class":304},[279,2555,231],{"class":292},[279,2557,297],{"class":343},[279,2559,378],{"class":304},[279,2561,1062],{"class":343},[279,2563,384],{"class":304},[279,2565,407],{"class":304},[279,2567,2491],{"class":410},[279,2569,414],{"class":304},[279,2571,399],{"class":304},[279,2573,2574],{"class":343}," status",[279,2576,384],{"class":304},[279,2578,407],{"class":304},[279,2580,645],{"class":410},[279,2582,414],{"class":304},[279,2584,417],{"class":304},[279,2586,348],{"class":343},[279,2588,2589,2591,2593,2595,2597,2599],{"class":281,"line":468},[279,2590,1990],{"class":304},[279,2592,1993],{"class":285},[279,2594,305],{"class":343},[279,2596,1998],{"class":296},[279,2598,2001],{"class":343},[279,2600,753],{"class":304},[279,2602,2603,2605,2607,2609,2611,2613,2615,2617,2619,2621,2623,2625,2627,2629,2631,2634,2636,2638],{"class":281,"line":473},[279,2604,2551],{"class":296},[279,2606,370],{"class":304},[279,2608,1395],{"class":292},[279,2610,297],{"class":343},[279,2612,378],{"class":304},[279,2614,1062],{"class":343},[279,2616,384],{"class":304},[279,2618,407],{"class":304},[279,2620,2491],{"class":410},[279,2622,414],{"class":304},[279,2624,399],{"class":304},[279,2626,2011],{"class":343},[279,2628,384],{"class":304},[279,2630,407],{"class":304},[279,2632,2633],{"class":410},"failed",[279,2635,414],{"class":304},[279,2637,417],{"class":304},[279,2639,348],{"class":343},[279,2641,2642],{"class":281,"line":479},[279,2643,1773],{"class":304},[279,2645,2646],{"class":281,"line":498},[279,2647,1778],{"class":304},[279,2649,2650,2653,2655],{"class":281,"line":527},[279,2651,2652],{"class":304},"\u003C/",[279,2654,2444],{"class":343},[279,2656,2462],{"class":304},[269,2658,2661],{"className":271,"code":2659,"filename":2660,"language":274,"meta":275,"style":275},"export function useAnalytics() {\n  function trackEvent(event: string, data?: Record\u003Cstring, unknown>) {\n    log.info('analytics', `Event: ${event}`)\n    if (data) {\n      log.debug({ event, ...data })\n    }\n  }\n\n  return { trackEvent }\n}\n","composables/useAnalytics.ts",[239,2662,2663,2676,2719,2752,2764,2792,2796,2800,2804,2814],{"__ignoreMap":275},[279,2664,2665,2667,2669,2672,2674],{"class":281,"line":282},[279,2666,286],{"class":285},[279,2668,1918],{"class":300},[279,2670,2671],{"class":292}," useAnalytics",[279,2673,2474],{"class":304},[279,2675,318],{"class":304},[279,2677,2678,2681,2684,2686,2688,2690,2693,2695,2698,2701,2704,2706,2709,2711,2714,2717],{"class":281,"line":321},[279,2679,2680],{"class":300},"  function",[279,2682,2683],{"class":292}," trackEvent",[279,2685,297],{"class":304},[279,2687,309],{"class":308},[279,2689,384],{"class":304},[279,2691,2692],{"class":588}," string",[279,2694,399],{"class":304},[279,2696,2697],{"class":308}," data",[279,2699,2700],{"class":304},"?:",[279,2702,2703],{"class":588}," Record",[279,2705,2441],{"class":304},[279,2707,2708],{"class":588},"string",[279,2710,399],{"class":304},[279,2712,2713],{"class":588}," unknown",[279,2715,2716],{"class":304},">)",[279,2718,318],{"class":304},[279,2720,2721,2723,2725,2727,2729,2731,2734,2736,2738,2741,2744,2746,2748,2750],{"class":281,"line":328},[279,2722,2551],{"class":296},[279,2724,370],{"class":304},[279,2726,231],{"class":292},[279,2728,297],{"class":343},[279,2730,414],{"class":304},[279,2732,2733],{"class":410},"analytics",[279,2735,414],{"class":304},[279,2737,399],{"class":304},[279,2739,2740],{"class":304}," `",[279,2742,2743],{"class":410},"Event: ",[279,2745,2220],{"class":304},[279,2747,309],{"class":296},[279,2749,2229],{"class":304},[279,2751,348],{"class":343},[279,2753,2754,2756,2758,2760,2762],{"class":281,"line":351},[279,2755,2187],{"class":285},[279,2757,305],{"class":343},[279,2759,1705],{"class":296},[279,2761,2001],{"class":343},[279,2763,753],{"class":304},[279,2765,2766,2769,2771,2774,2776,2778,2781,2783,2786,2788,2790],{"class":281,"line":358},[279,2767,2768],{"class":296},"      log",[279,2770,370],{"class":304},[279,2772,2773],{"class":292},"debug",[279,2775,297],{"class":343},[279,2777,378],{"class":304},[279,2779,2780],{"class":296}," event",[279,2782,399],{"class":304},[279,2784,2785],{"class":304}," ...",[279,2787,1705],{"class":296},[279,2789,417],{"class":304},[279,2791,348],{"class":343},[279,2793,2794],{"class":281,"line":364},[279,2795,2237],{"class":304},[279,2797,2798],{"class":281,"line":424},[279,2799,1773],{"class":304},[279,2801,2802],{"class":281,"line":468},[279,2803,355],{"emptyLinePlaceholder":354},[279,2805,2806,2808,2810,2812],{"class":281,"line":473},[279,2807,541],{"class":285},[279,2809,387],{"class":304},[279,2811,2683],{"class":296},[279,2813,567],{"class":304},[279,2815,2816],{"class":281,"line":479},[279,2817,1778],{"class":304},[225,2819,2820],{},"In pretty mode (development), client logs appear with colored tags in the browser console:",[269,2822,2827],{"className":2823,"code":2825,"language":2826},[2824],"language-text","[my-app] info { action: 'checkout', status: 'success' }\n","text",[239,2828,2825],{"__ignoreMap":275},[229,2830,2831,2832,2834],{"color":231,"icon":13},"Client-side ",[239,2833,245],{}," is designed for debugging and development. For production analytics, use dedicated services like Plausible, PostHog, or Mixpanel.",[254,2836,2838],{"id":2837},"wide-event-fields","Wide Event Fields",[225,2840,2841],{},"Every wide event should include context from different layers:",[266,2843,2844,3060],{},[269,2845,2847],{"className":271,"code":2846,"filename":1526,"language":274,"meta":275,"style":275},"// server/api/checkout.post.ts\nconst log = useLogger(event)\n\n// Request context (often auto-populated)\nlog.set({ method: 'POST', path: '/api/checkout' })\n\n// User context\nlog.set({ userId: 1, subscription: 'pro' })\n\n// Business context\nlog.set({ cart: { items: 3, total: 9999 }, coupon: 'SAVE10' })\n\n// Outcome\nlog.set({ status: 200, duration: 234 })\n",[239,2848,2849,2853,2866,2870,2875,2913,2917,2922,2958,2962,2967,3018,3022,3027],{"__ignoreMap":275},[279,2850,2851],{"class":281,"line":282},[279,2852,1533],{"class":324},[279,2854,2855,2857,2859,2861,2863],{"class":281,"line":321},[279,2856,1203],{"class":300},[279,2858,1206],{"class":296},[279,2860,1209],{"class":304},[279,2862,340],{"class":292},[279,2864,2865],{"class":296},"(event)\n",[279,2867,2868],{"class":281,"line":328},[279,2869,355],{"emptyLinePlaceholder":354},[279,2871,2872],{"class":281,"line":351},[279,2873,2874],{"class":324},"// Request context (often auto-populated)\n",[279,2876,2877,2879,2881,2883,2885,2887,2889,2891,2893,2895,2897,2899,2901,2903,2905,2907,2909,2911],{"class":281,"line":358},[279,2878,245],{"class":296},[279,2880,370],{"class":304},[279,2882,373],{"class":292},[279,2884,297],{"class":296},[279,2886,378],{"class":304},[279,2888,1468],{"class":343},[279,2890,384],{"class":304},[279,2892,407],{"class":304},[279,2894,1475],{"class":410},[279,2896,414],{"class":304},[279,2898,399],{"class":304},[279,2900,1482],{"class":343},[279,2902,384],{"class":304},[279,2904,407],{"class":304},[279,2906,1489],{"class":410},[279,2908,414],{"class":304},[279,2910,417],{"class":304},[279,2912,348],{"class":296},[279,2914,2915],{"class":281,"line":364},[279,2916,355],{"emptyLinePlaceholder":354},[279,2918,2919],{"class":281,"line":424},[279,2920,2921],{"class":324},"// User context\n",[279,2923,2924,2926,2928,2930,2932,2934,2937,2939,2941,2943,2946,2948,2950,2952,2954,2956],{"class":281,"line":468},[279,2925,245],{"class":296},[279,2927,370],{"class":304},[279,2929,373],{"class":292},[279,2931,297],{"class":296},[279,2933,378],{"class":304},[279,2935,2936],{"class":343}," userId",[279,2938,384],{"class":304},[279,2940,396],{"class":395},[279,2942,399],{"class":304},[279,2944,2945],{"class":343}," subscription",[279,2947,384],{"class":304},[279,2949,407],{"class":304},[279,2951,411],{"class":410},[279,2953,414],{"class":304},[279,2955,417],{"class":304},[279,2957,348],{"class":296},[279,2959,2960],{"class":281,"line":473},[279,2961,355],{"emptyLinePlaceholder":354},[279,2963,2964],{"class":281,"line":479},[279,2965,2966],{"class":324},"// Business context\n",[279,2968,2969,2971,2973,2975,2977,2979,2981,2983,2985,2987,2989,2991,2993,2995,2997,2999,3002,3005,3007,3009,3012,3014,3016],{"class":281,"line":498},[279,2970,245],{"class":296},[279,2972,370],{"class":304},[279,2974,373],{"class":292},[279,2976,297],{"class":296},[279,2978,378],{"class":304},[279,2980,437],{"class":343},[279,2982,384],{"class":304},[279,2984,387],{"class":304},[279,2986,444],{"class":343},[279,2988,384],{"class":304},[279,2990,449],{"class":395},[279,2992,399],{"class":304},[279,2994,454],{"class":343},[279,2996,384],{"class":304},[279,2998,459],{"class":395},[279,3000,3001],{"class":304}," },",[279,3003,3004],{"class":343}," coupon",[279,3006,384],{"class":304},[279,3008,407],{"class":304},[279,3010,3011],{"class":410},"SAVE10",[279,3013,414],{"class":304},[279,3015,417],{"class":304},[279,3017,348],{"class":296},[279,3019,3020],{"class":281,"line":527},[279,3021,355],{"emptyLinePlaceholder":354},[279,3023,3024],{"class":281,"line":532},[279,3025,3026],{"class":324},"// Outcome\n",[279,3028,3029,3031,3033,3035,3037,3039,3041,3043,3046,3048,3051,3053,3056,3058],{"class":281,"line":538},[279,3030,245],{"class":296},[279,3032,370],{"class":304},[279,3034,373],{"class":292},[279,3036,297],{"class":296},[279,3038,378],{"class":304},[279,3040,2574],{"class":343},[279,3042,384],{"class":304},[279,3044,3045],{"class":395}," 200",[279,3047,399],{"class":304},[279,3049,3050],{"class":343}," duration",[279,3052,384],{"class":304},[279,3054,3055],{"class":395}," 234",[279,3057,417],{"class":304},[279,3059,348],{"class":296},[269,3061,3064],{"className":1652,"code":3062,"filename":3063,"language":1655,"meta":275,"style":275},"{\n  \"level\": \"info\",\n  \"method\": \"POST\",\n  \"path\": \"/api/checkout\",\n  \"userId\": 1,\n  \"subscription\": \"pro\",\n  \"cart\": { \"items\": 3, \"total\": 9999 },\n  \"coupon\": \"SAVE10\",\n  \"status\": 200,\n  \"duration\": 234\n}\n","JSON Output (Production)",[239,3065,3066,3070,3089,3107,3125,3140,3159,3197,3216,3230,3244],{"__ignoreMap":275},[279,3067,3068],{"class":281,"line":282},[279,3069,753],{"class":304},[279,3071,3072,3074,3077,3079,3081,3083,3085,3087],{"class":281,"line":321},[279,3073,1666],{"class":304},[279,3075,3076],{"class":300},"level",[279,3078,1672],{"class":304},[279,3080,384],{"class":304},[279,3082,1692],{"class":304},[279,3084,231],{"class":410},[279,3086,1672],{"class":304},[279,3088,776],{"class":304},[279,3090,3091,3093,3095,3097,3099,3101,3103,3105],{"class":281,"line":328},[279,3092,1666],{"class":304},[279,3094,1416],{"class":300},[279,3096,1672],{"class":304},[279,3098,384],{"class":304},[279,3100,1692],{"class":304},[279,3102,1475],{"class":410},[279,3104,1672],{"class":304},[279,3106,776],{"class":304},[279,3108,3109,3111,3113,3115,3117,3119,3121,3123],{"class":281,"line":351},[279,3110,1666],{"class":304},[279,3112,1419],{"class":300},[279,3114,1672],{"class":304},[279,3116,384],{"class":304},[279,3118,1692],{"class":304},[279,3120,1489],{"class":410},[279,3122,1672],{"class":304},[279,3124,776],{"class":304},[279,3126,3127,3129,3132,3134,3136,3138],{"class":281,"line":358},[279,3128,1666],{"class":304},[279,3130,3131],{"class":300},"userId",[279,3133,1672],{"class":304},[279,3135,384],{"class":304},[279,3137,396],{"class":395},[279,3139,776],{"class":304},[279,3141,3142,3144,3147,3149,3151,3153,3155,3157],{"class":281,"line":364},[279,3143,1666],{"class":304},[279,3145,3146],{"class":300},"subscription",[279,3148,1672],{"class":304},[279,3150,384],{"class":304},[279,3152,1692],{"class":304},[279,3154,411],{"class":410},[279,3156,1672],{"class":304},[279,3158,776],{"class":304},[279,3160,3161,3163,3165,3167,3169,3171,3173,3176,3178,3180,3182,3184,3186,3189,3191,3193,3195],{"class":281,"line":424},[279,3162,1666],{"class":304},[279,3164,1926],{"class":300},[279,3166,1672],{"class":304},[279,3168,384],{"class":304},[279,3170,387],{"class":304},[279,3172,1692],{"class":304},[279,3174,3175],{"class":588},"items",[279,3177,1672],{"class":304},[279,3179,384],{"class":304},[279,3181,449],{"class":395},[279,3183,399],{"class":304},[279,3185,1692],{"class":304},[279,3187,3188],{"class":588},"total",[279,3190,1672],{"class":304},[279,3192,384],{"class":304},[279,3194,459],{"class":395},[279,3196,860],{"class":304},[279,3198,3199,3201,3204,3206,3208,3210,3212,3214],{"class":281,"line":468},[279,3200,1666],{"class":304},[279,3202,3203],{"class":300},"coupon",[279,3205,1672],{"class":304},[279,3207,384],{"class":304},[279,3209,1692],{"class":304},[279,3211,3011],{"class":410},[279,3213,1672],{"class":304},[279,3215,776],{"class":304},[279,3217,3218,3220,3222,3224,3226,3228],{"class":281,"line":473},[279,3219,1666],{"class":304},[279,3221,1818],{"class":300},[279,3223,1672],{"class":304},[279,3225,384],{"class":304},[279,3227,3045],{"class":395},[279,3229,776],{"class":304},[279,3231,3232,3234,3237,3239,3241],{"class":281,"line":479},[279,3233,1666],{"class":304},[279,3235,3236],{"class":300},"duration",[279,3238,1672],{"class":304},[279,3240,384],{"class":304},[279,3242,3243],{"class":395}," 234\n",[279,3245,3246],{"class":281,"line":498},[279,3247,1778],{"class":304},[254,3249,3251],{"id":3250},"next-steps","Next Steps",[3253,3254,3255,3262,3267,3272],"ul",{},[3256,3257,3258,3261],"li",{},[3259,3260,111],"a",{"href":112}," - Learn how to design effective wide events",[3256,3263,3264,3266],{},[3259,3265,126],{"href":127}," - Add compile-time type safety to your wide events",[3256,3268,3269,3271],{},[3259,3270,116],{"href":117}," - Master error handling with evlog",[3256,3273,3274,3276],{},[3259,3275,121],{"href":122}," - Security guidelines and production tips",[3278,3279,3280],"style",{},"html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}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}",{"title":275,"searchDepth":321,"depth":321,"links":3282},[3283,3287,3288,3292,3293,3294,3295],{"id":256,"depth":321,"text":257,"children":3284},[3285,3286],{"id":655,"depth":328,"text":656},{"id":719,"depth":328,"text":720},{"id":1115,"depth":321,"text":1116},{"id":1513,"depth":321,"text":1514,"children":3289},[3290,3291],{"id":1781,"depth":328,"text":1782},{"id":1872,"depth":328,"text":1873},{"id":2250,"depth":321,"text":2251},{"id":2419,"depth":321,"text":2420},{"id":2837,"depth":321,"text":2838},{"id":3250,"depth":321,"text":3251},"Get up and running with evlog in minutes. Learn useLogger, createError, parseError, and the log API for wide events and structured errors.","md",[3299,3302],{"label":111,"icon":114,"to":112,"color":3300,"variant":3301},"neutral","subtle",{"label":116,"icon":119,"to":117,"color":3300,"variant":3301},{},{"icon":23},{"title":20,"description":3296},"FF-l-2egBXVRionhay25VzTyrElaNyafYr1hRJ-4ELM",[3308,3310],{"title":15,"path":16,"stem":17,"description":3309,"icon":18,"children":-1},"Install evlog in your TypeScript project.",{"title":25,"path":26,"stem":27,"description":3311,"icon":28,"children":-1},"AI-assisted code review and evlog adoption using Agent Skills. Let AI review your logging patterns and guide migration to wide events.",1772991600336]