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