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