[{"data":1,"prerenderedAt":1615},["ShallowReactive",2],{"navigation_docs":3,"-enrichers-built-in":166,"-enrichers-built-in-surround":1610},[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],{"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",{"id":167,"title":168,"body":169,"description":1598,"extension":1599,"links":1600,"meta":1606,"navigation":1607,"path":115,"seo":1608,"stem":116,"__hash__":1609},"docs/4.enrichers/2.built-in.md","Built-in Enrichers",{"type":170,"value":171,"toc":1590},"minimark",[172,185,259,264,271,281,305,310,471,476,665,671,677,681,684,691,709,713,804,809,871,908,912,919,926,944,948,990,994,1054,1064,1068,1078,1091,1109,1113,1179,1183,1307,1314,1327,1331,1334,1567,1571,1586],[173,174,175,176,180,181,184],"p",{},"All built-in enrichers are exported from ",[177,178,179],"code",{},"evlog/enrichers",". Each enricher is a factory function that returns an ",[177,182,183],{},"(ctx: EnrichContext) => void"," callback.",[186,187,192],"pre",{"className":188,"code":189,"language":190,"meta":191,"style":191},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import {\n  createUserAgentEnricher,\n  createGeoEnricher,\n  createRequestSizeEnricher,\n  createTraceContextEnricher,\n} from 'evlog/enrichers'\n","typescript","",[177,193,194,207,217,225,233,241],{"__ignoreMap":191},[195,196,199,203],"span",{"class":197,"line":198},"line",1,[195,200,202],{"class":201},"s7zQu","import",[195,204,206],{"class":205},"sMK4o"," {\n",[195,208,210,214],{"class":197,"line":209},2,[195,211,213],{"class":212},"sTEyZ","  createUserAgentEnricher",[195,215,216],{"class":205},",\n",[195,218,220,223],{"class":197,"line":219},3,[195,221,222],{"class":212},"  createGeoEnricher",[195,224,216],{"class":205},[195,226,228,231],{"class":197,"line":227},4,[195,229,230],{"class":212},"  createRequestSizeEnricher",[195,232,216],{"class":205},[195,234,236,239],{"class":197,"line":235},5,[195,237,238],{"class":212},"  createTraceContextEnricher",[195,240,216],{"class":205},[195,242,244,247,250,253,256],{"class":197,"line":243},6,[195,245,246],{"class":205},"}",[195,248,249],{"class":201}," from",[195,251,252],{"class":205}," '",[195,254,179],{"class":255},"sfazB",[195,257,258],{"class":205},"'\n",[260,261,263],"h2",{"id":262},"user-agent","User Agent",[173,265,266,267,270],{},"Parse browser, OS, and device type from the ",[177,268,269],{},"User-Agent"," header.",[173,272,273,277,278],{},[274,275,276],"strong",{},"Sets:"," ",[177,279,280],{},"event.userAgent",[186,282,284],{"className":188,"code":283,"language":190,"meta":191,"style":191},"const enrich = createUserAgentEnricher()\n",[177,285,286],{"__ignoreMap":191},[195,287,288,292,295,298,302],{"class":197,"line":198},[195,289,291],{"class":290},"spNyl","const",[195,293,294],{"class":212}," enrich ",[195,296,297],{"class":205},"=",[195,299,301],{"class":300},"s2Zo4"," createUserAgentEnricher",[195,303,304],{"class":212},"()\n",[173,306,307],{},[274,308,309],{},"Output shape:",[186,311,313],{"className":188,"code":312,"language":190,"meta":191,"style":191},"interface UserAgentInfo {\n  raw: string                                      // Original User-Agent string\n  browser?: { name: string; version?: string }     // Chrome, Firefox, Safari, Edge\n  os?: { name: string; version?: string }          // Windows, macOS, iOS, Android, Linux\n  device?: { type: 'mobile' | 'tablet' | 'desktop' | 'bot' | 'unknown' }\n}\n",[177,314,315,326,342,376,404,466],{"__ignoreMap":191},[195,316,317,320,324],{"class":197,"line":198},[195,318,319],{"class":290},"interface",[195,321,323],{"class":322},"sBMFI"," UserAgentInfo",[195,325,206],{"class":205},[195,327,328,332,335,338],{"class":197,"line":209},[195,329,331],{"class":330},"swJcz","  raw",[195,333,334],{"class":205},":",[195,336,337],{"class":322}," string",[195,339,341],{"class":340},"sHwdD","                                      // Original User-Agent string\n",[195,343,344,347,350,353,356,358,360,363,366,368,370,373],{"class":197,"line":219},[195,345,346],{"class":330},"  browser",[195,348,349],{"class":205},"?:",[195,351,352],{"class":205}," {",[195,354,355],{"class":330}," name",[195,357,334],{"class":205},[195,359,337],{"class":322},[195,361,362],{"class":205},";",[195,364,365],{"class":330}," version",[195,367,349],{"class":205},[195,369,337],{"class":322},[195,371,372],{"class":205}," }",[195,374,375],{"class":340},"     // Chrome, Firefox, Safari, Edge\n",[195,377,378,381,383,385,387,389,391,393,395,397,399,401],{"class":197,"line":227},[195,379,380],{"class":330},"  os",[195,382,349],{"class":205},[195,384,352],{"class":205},[195,386,355],{"class":330},[195,388,334],{"class":205},[195,390,337],{"class":322},[195,392,362],{"class":205},[195,394,365],{"class":330},[195,396,349],{"class":205},[195,398,337],{"class":322},[195,400,372],{"class":205},[195,402,403],{"class":340},"          // Windows, macOS, iOS, Android, Linux\n",[195,405,406,409,411,413,416,418,420,423,426,429,431,434,436,438,440,443,445,447,449,452,454,456,458,461,463],{"class":197,"line":235},[195,407,408],{"class":330},"  device",[195,410,349],{"class":205},[195,412,352],{"class":205},[195,414,415],{"class":330}," type",[195,417,334],{"class":205},[195,419,252],{"class":205},[195,421,422],{"class":255},"mobile",[195,424,425],{"class":205},"'",[195,427,428],{"class":205}," |",[195,430,252],{"class":205},[195,432,433],{"class":255},"tablet",[195,435,425],{"class":205},[195,437,428],{"class":205},[195,439,252],{"class":205},[195,441,442],{"class":255},"desktop",[195,444,425],{"class":205},[195,446,428],{"class":205},[195,448,252],{"class":205},[195,450,451],{"class":255},"bot",[195,453,425],{"class":205},[195,455,428],{"class":205},[195,457,252],{"class":205},[195,459,460],{"class":255},"unknown",[195,462,425],{"class":205},[195,464,465],{"class":205}," }\n",[195,467,468],{"class":197,"line":243},[195,469,470],{"class":205},"}\n",[173,472,473],{},[274,474,475],{},"Example output:",[186,477,481],{"className":478,"code":479,"language":480,"meta":191,"style":191},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"userAgent\": {\n    \"raw\": \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 Chrome/120.0.0.0\",\n    \"browser\": { \"name\": \"Chrome\", \"version\": \"120.0.0.0\" },\n    \"os\": { \"name\": \"macOS\", \"version\": \"10.15.7\" },\n    \"device\": { \"type\": \"desktop\" }\n  }\n}\n","json",[177,482,483,488,503,525,577,624,654,660],{"__ignoreMap":191},[195,484,485],{"class":197,"line":198},[195,486,487],{"class":205},"{\n",[195,489,490,493,496,499,501],{"class":197,"line":209},[195,491,492],{"class":205},"  \"",[195,494,495],{"class":290},"userAgent",[195,497,498],{"class":205},"\"",[195,500,334],{"class":205},[195,502,206],{"class":205},[195,504,505,508,511,513,515,518,521,523],{"class":197,"line":219},[195,506,507],{"class":205},"    \"",[195,509,510],{"class":322},"raw",[195,512,498],{"class":205},[195,514,334],{"class":205},[195,516,517],{"class":205}," \"",[195,519,520],{"class":255},"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 Chrome/120.0.0.0",[195,522,498],{"class":205},[195,524,216],{"class":205},[195,526,527,529,532,534,536,538,540,544,546,548,550,553,555,558,560,563,565,567,569,572,574],{"class":197,"line":227},[195,528,507],{"class":205},[195,530,531],{"class":322},"browser",[195,533,498],{"class":205},[195,535,334],{"class":205},[195,537,352],{"class":205},[195,539,517],{"class":205},[195,541,543],{"class":542},"sbssI","name",[195,545,498],{"class":205},[195,547,334],{"class":205},[195,549,517],{"class":205},[195,551,552],{"class":255},"Chrome",[195,554,498],{"class":205},[195,556,557],{"class":205},",",[195,559,517],{"class":205},[195,561,562],{"class":542},"version",[195,564,498],{"class":205},[195,566,334],{"class":205},[195,568,517],{"class":205},[195,570,571],{"class":255},"120.0.0.0",[195,573,498],{"class":205},[195,575,576],{"class":205}," },\n",[195,578,579,581,584,586,588,590,592,594,596,598,600,603,605,607,609,611,613,615,617,620,622],{"class":197,"line":235},[195,580,507],{"class":205},[195,582,583],{"class":322},"os",[195,585,498],{"class":205},[195,587,334],{"class":205},[195,589,352],{"class":205},[195,591,517],{"class":205},[195,593,543],{"class":542},[195,595,498],{"class":205},[195,597,334],{"class":205},[195,599,517],{"class":205},[195,601,602],{"class":255},"macOS",[195,604,498],{"class":205},[195,606,557],{"class":205},[195,608,517],{"class":205},[195,610,562],{"class":542},[195,612,498],{"class":205},[195,614,334],{"class":205},[195,616,517],{"class":205},[195,618,619],{"class":255},"10.15.7",[195,621,498],{"class":205},[195,623,576],{"class":205},[195,625,626,628,631,633,635,637,639,642,644,646,648,650,652],{"class":197,"line":243},[195,627,507],{"class":205},[195,629,630],{"class":322},"device",[195,632,498],{"class":205},[195,634,334],{"class":205},[195,636,352],{"class":205},[195,638,517],{"class":205},[195,640,641],{"class":542},"type",[195,643,498],{"class":205},[195,645,334],{"class":205},[195,647,517],{"class":205},[195,649,442],{"class":255},[195,651,498],{"class":205},[195,653,465],{"class":205},[195,655,657],{"class":197,"line":656},7,[195,658,659],{"class":205},"  }\n",[195,661,663],{"class":197,"line":662},8,[195,664,470],{"class":205},[173,666,667,670],{},[274,668,669],{},"Detected browsers:"," Edge, Chrome, Firefox, Safari (checked in order, Edge before Chrome to avoid false matches).",[173,672,673,676],{},[274,674,675],{},"Detected devices:"," Bot (crawlers, spiders), Tablet (iPad), Mobile (iPhone, Android phones), Desktop (fallback).",[260,678,680],{"id":679},"geo","Geo",[173,682,683],{},"Extract geographic data from platform-injected headers.",[173,685,686,277,688],{},[274,687,276],{},[177,689,690],{},"event.geo",[186,692,694],{"className":188,"code":693,"language":190,"meta":191,"style":191},"const enrich = createGeoEnricher()\n",[177,695,696],{"__ignoreMap":191},[195,697,698,700,702,704,707],{"class":197,"line":198},[195,699,291],{"class":290},[195,701,294],{"class":212},[195,703,297],{"class":205},[195,705,706],{"class":300}," createGeoEnricher",[195,708,304],{"class":212},[173,710,711],{},[274,712,309],{},[186,714,716],{"className":188,"code":715,"language":190,"meta":191,"style":191},"interface GeoInfo {\n  country?: string      // ISO country code (e.g., \"US\", \"FR\")\n  region?: string       // Region/state name\n  regionCode?: string   // Region code\n  city?: string         // City name\n  latitude?: number     // Decimal latitude\n  longitude?: number    // Decimal longitude\n}\n",[177,717,718,727,739,751,763,775,788,800],{"__ignoreMap":191},[195,719,720,722,725],{"class":197,"line":198},[195,721,319],{"class":290},[195,723,724],{"class":322}," GeoInfo",[195,726,206],{"class":205},[195,728,729,732,734,736],{"class":197,"line":209},[195,730,731],{"class":330},"  country",[195,733,349],{"class":205},[195,735,337],{"class":322},[195,737,738],{"class":340},"      // ISO country code (e.g., \"US\", \"FR\")\n",[195,740,741,744,746,748],{"class":197,"line":219},[195,742,743],{"class":330},"  region",[195,745,349],{"class":205},[195,747,337],{"class":322},[195,749,750],{"class":340},"       // Region/state name\n",[195,752,753,756,758,760],{"class":197,"line":227},[195,754,755],{"class":330},"  regionCode",[195,757,349],{"class":205},[195,759,337],{"class":322},[195,761,762],{"class":340},"   // Region code\n",[195,764,765,768,770,772],{"class":197,"line":235},[195,766,767],{"class":330},"  city",[195,769,349],{"class":205},[195,771,337],{"class":322},[195,773,774],{"class":340},"         // City name\n",[195,776,777,780,782,785],{"class":197,"line":243},[195,778,779],{"class":330},"  latitude",[195,781,349],{"class":205},[195,783,784],{"class":322}," number",[195,786,787],{"class":340},"     // Decimal latitude\n",[195,789,790,793,795,797],{"class":197,"line":656},[195,791,792],{"class":330},"  longitude",[195,794,349],{"class":205},[195,796,784],{"class":322},[195,798,799],{"class":340},"    // Decimal longitude\n",[195,801,802],{"class":197,"line":662},[195,803,470],{"class":205},[173,805,806],{},[274,807,808],{},"Supported platforms:",[810,811,812,828],"table",{},[813,814,815],"thead",{},[816,817,818,822,825],"tr",{},[819,820,821],"th",{},"Platform",[819,823,824],{},"Headers",[819,826,827],{},"Coverage",[829,830,831,858],"tbody",{},[816,832,833,837,855],{},[834,835,836],"td",{},"Vercel",[834,838,839,842,843,842,846,842,849,842,852],{},[177,840,841],{},"x-vercel-ip-country",", ",[177,844,845],{},"x-vercel-ip-country-region",[177,847,848],{},"x-vercel-ip-city",[177,850,851],{},"x-vercel-ip-latitude",[177,853,854],{},"x-vercel-ip-longitude",[834,856,857],{},"Full",[816,859,860,863,868],{},[834,861,862],{},"Cloudflare",[834,864,865],{},[177,866,867],{},"cf-ipcountry",[834,869,870],{},"Country only",[872,873,875,878,879,881,882,842,885,842,888,891,892,895,896,900,901,903,904,907],"callout",{"color":874,"icon":13},"info",[274,876,877],{},"Cloudflare note:"," Only ",[177,880,867],{}," is a standard Cloudflare HTTP header. Other geo fields (",[177,883,884],{},"city",[177,886,887],{},"region",[177,889,890],{},"latitude",", etc.) are properties of ",[177,893,894],{},"request.cf",", which is not exposed as headers. For full Cloudflare geo data, write a ",[897,898,899],"a",{"href":120},"custom enricher"," that reads ",[177,902,894],{},", or use a Workers middleware to copy ",[177,905,906],{},"cf"," properties into custom headers.",[260,909,911],{"id":910},"request-size","Request Size",[173,913,914,915,918],{},"Capture request and response payload sizes from ",[177,916,917],{},"Content-Length"," headers.",[173,920,921,277,923],{},[274,922,276],{},[177,924,925],{},"event.requestSize",[186,927,929],{"className":188,"code":928,"language":190,"meta":191,"style":191},"const enrich = createRequestSizeEnricher()\n",[177,930,931],{"__ignoreMap":191},[195,932,933,935,937,939,942],{"class":197,"line":198},[195,934,291],{"class":290},[195,936,294],{"class":212},[195,938,297],{"class":205},[195,940,941],{"class":300}," createRequestSizeEnricher",[195,943,304],{"class":212},[173,945,946],{},[274,947,309],{},[186,949,951],{"className":188,"code":950,"language":190,"meta":191,"style":191},"interface RequestSizeInfo {\n  requestBytes?: number    // Request Content-Length\n  responseBytes?: number   // Response Content-Length\n}\n",[177,952,953,962,974,986],{"__ignoreMap":191},[195,954,955,957,960],{"class":197,"line":198},[195,956,319],{"class":290},[195,958,959],{"class":322}," RequestSizeInfo",[195,961,206],{"class":205},[195,963,964,967,969,971],{"class":197,"line":209},[195,965,966],{"class":330},"  requestBytes",[195,968,349],{"class":205},[195,970,784],{"class":322},[195,972,973],{"class":340},"    // Request Content-Length\n",[195,975,976,979,981,983],{"class":197,"line":219},[195,977,978],{"class":330},"  responseBytes",[195,980,349],{"class":205},[195,982,784],{"class":322},[195,984,985],{"class":340},"   // Response Content-Length\n",[195,987,988],{"class":197,"line":227},[195,989,470],{"class":205},[173,991,992],{},[274,993,475],{},[186,995,997],{"className":478,"code":996,"language":480,"meta":191,"style":191},"{\n  \"requestSize\": {\n    \"requestBytes\": 1234,\n    \"responseBytes\": 5678\n  }\n}\n",[177,998,999,1003,1016,1032,1046,1050],{"__ignoreMap":191},[195,1000,1001],{"class":197,"line":198},[195,1002,487],{"class":205},[195,1004,1005,1007,1010,1012,1014],{"class":197,"line":209},[195,1006,492],{"class":205},[195,1008,1009],{"class":290},"requestSize",[195,1011,498],{"class":205},[195,1013,334],{"class":205},[195,1015,206],{"class":205},[195,1017,1018,1020,1023,1025,1027,1030],{"class":197,"line":219},[195,1019,507],{"class":205},[195,1021,1022],{"class":322},"requestBytes",[195,1024,498],{"class":205},[195,1026,334],{"class":205},[195,1028,1029],{"class":542}," 1234",[195,1031,216],{"class":205},[195,1033,1034,1036,1039,1041,1043],{"class":197,"line":227},[195,1035,507],{"class":205},[195,1037,1038],{"class":322},"responseBytes",[195,1040,498],{"class":205},[195,1042,334],{"class":205},[195,1044,1045],{"class":542}," 5678\n",[195,1047,1048],{"class":197,"line":235},[195,1049,659],{"class":205},[195,1051,1052],{"class":197,"line":243},[195,1053,470],{"class":205},[872,1055,1056,1057,1059,1060,1063],{"color":874,"icon":13},"This enricher reads the ",[177,1058,917],{}," header from both the request and response. If the header is missing (e.g., for chunked transfer encoding), the corresponding field will be ",[177,1061,1062],{},"undefined",".",[260,1065,1067],{"id":1066},"trace-context","Trace Context",[173,1069,1070,1071,1074,1075,918],{},"Extract W3C trace context from the ",[177,1072,1073],{},"traceparent"," and ",[177,1076,1077],{},"tracestate",[173,1079,1080,277,1082,842,1085,842,1088],{},[274,1081,276],{},[177,1083,1084],{},"event.traceContext",[177,1086,1087],{},"event.traceId",[177,1089,1090],{},"event.spanId",[186,1092,1094],{"className":188,"code":1093,"language":190,"meta":191,"style":191},"const enrich = createTraceContextEnricher()\n",[177,1095,1096],{"__ignoreMap":191},[195,1097,1098,1100,1102,1104,1107],{"class":197,"line":198},[195,1099,291],{"class":290},[195,1101,294],{"class":212},[195,1103,297],{"class":205},[195,1105,1106],{"class":300}," createTraceContextEnricher",[195,1108,304],{"class":212},[173,1110,1111],{},[274,1112,309],{},[186,1114,1116],{"className":188,"code":1115,"language":190,"meta":191,"style":191},"interface TraceContextInfo {\n  traceparent?: string   // Full traceparent header value\n  tracestate?: string    // Full tracestate header value\n  traceId?: string       // 32-char hex trace ID (parsed from traceparent)\n  spanId?: string        // 16-char hex span ID (parsed from traceparent)\n}\n",[177,1117,1118,1127,1139,1151,1163,1175],{"__ignoreMap":191},[195,1119,1120,1122,1125],{"class":197,"line":198},[195,1121,319],{"class":290},[195,1123,1124],{"class":322}," TraceContextInfo",[195,1126,206],{"class":205},[195,1128,1129,1132,1134,1136],{"class":197,"line":209},[195,1130,1131],{"class":330},"  traceparent",[195,1133,349],{"class":205},[195,1135,337],{"class":322},[195,1137,1138],{"class":340},"   // Full traceparent header value\n",[195,1140,1141,1144,1146,1148],{"class":197,"line":219},[195,1142,1143],{"class":330},"  tracestate",[195,1145,349],{"class":205},[195,1147,337],{"class":322},[195,1149,1150],{"class":340},"    // Full tracestate header value\n",[195,1152,1153,1156,1158,1160],{"class":197,"line":227},[195,1154,1155],{"class":330},"  traceId",[195,1157,349],{"class":205},[195,1159,337],{"class":322},[195,1161,1162],{"class":340},"       // 32-char hex trace ID (parsed from traceparent)\n",[195,1164,1165,1168,1170,1172],{"class":197,"line":235},[195,1166,1167],{"class":330},"  spanId",[195,1169,349],{"class":205},[195,1171,337],{"class":322},[195,1173,1174],{"class":340},"        // 16-char hex span ID (parsed from traceparent)\n",[195,1176,1177],{"class":197,"line":243},[195,1178,470],{"class":205},[173,1180,1181],{},[274,1182,475],{},[186,1184,1186],{"className":478,"code":1185,"language":480,"meta":191,"style":191},"{\n  \"traceContext\": {\n    \"traceparent\": \"00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01\",\n    \"traceId\": \"4bf92f3577b34da6a3ce929d0e0e4736\",\n    \"spanId\": \"00f067aa0ba902b7\"\n  },\n  \"traceId\": \"4bf92f3577b34da6a3ce929d0e0e4736\",\n  \"spanId\": \"00f067aa0ba902b7\"\n}\n",[177,1187,1188,1192,1205,1224,1244,1263,1268,1286,1302],{"__ignoreMap":191},[195,1189,1190],{"class":197,"line":198},[195,1191,487],{"class":205},[195,1193,1194,1196,1199,1201,1203],{"class":197,"line":209},[195,1195,492],{"class":205},[195,1197,1198],{"class":290},"traceContext",[195,1200,498],{"class":205},[195,1202,334],{"class":205},[195,1204,206],{"class":205},[195,1206,1207,1209,1211,1213,1215,1217,1220,1222],{"class":197,"line":219},[195,1208,507],{"class":205},[195,1210,1073],{"class":322},[195,1212,498],{"class":205},[195,1214,334],{"class":205},[195,1216,517],{"class":205},[195,1218,1219],{"class":255},"00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01",[195,1221,498],{"class":205},[195,1223,216],{"class":205},[195,1225,1226,1228,1231,1233,1235,1237,1240,1242],{"class":197,"line":227},[195,1227,507],{"class":205},[195,1229,1230],{"class":322},"traceId",[195,1232,498],{"class":205},[195,1234,334],{"class":205},[195,1236,517],{"class":205},[195,1238,1239],{"class":255},"4bf92f3577b34da6a3ce929d0e0e4736",[195,1241,498],{"class":205},[195,1243,216],{"class":205},[195,1245,1246,1248,1251,1253,1255,1257,1260],{"class":197,"line":235},[195,1247,507],{"class":205},[195,1249,1250],{"class":322},"spanId",[195,1252,498],{"class":205},[195,1254,334],{"class":205},[195,1256,517],{"class":205},[195,1258,1259],{"class":255},"00f067aa0ba902b7",[195,1261,1262],{"class":205},"\"\n",[195,1264,1265],{"class":197,"line":243},[195,1266,1267],{"class":205},"  },\n",[195,1269,1270,1272,1274,1276,1278,1280,1282,1284],{"class":197,"line":656},[195,1271,492],{"class":205},[195,1273,1230],{"class":290},[195,1275,498],{"class":205},[195,1277,334],{"class":205},[195,1279,517],{"class":205},[195,1281,1239],{"class":255},[195,1283,498],{"class":205},[195,1285,216],{"class":205},[195,1287,1288,1290,1292,1294,1296,1298,1300],{"class":197,"line":662},[195,1289,492],{"class":205},[195,1291,1250],{"class":290},[195,1293,498],{"class":205},[195,1295,334],{"class":205},[195,1297,517],{"class":205},[195,1299,1259],{"class":255},[195,1301,1262],{"class":205},[195,1303,1305],{"class":197,"line":1304},9,[195,1306,470],{"class":205},[173,1308,1309,1074,1311,1313],{},[177,1310,1230],{},[177,1312,1250],{}," are also set at the top level of the event for easy querying and correlation.",[872,1315,1316,1317,1323,1324,1063],{"color":874,"icon":13},"The traceparent format follows the ",[897,1318,1322],{"href":1319,"rel":1320},"https://www.w3.org/TR/trace-context/",[1321],"nofollow","W3C Trace Context"," specification: ",[177,1325,1326],{},"{version}-{traceId}-{spanId}-{flags}",[260,1328,1330],{"id":1329},"full-setup-example","Full Setup Example",[173,1332,1333],{},"Use all built-in enrichers together:",[186,1335,1338],{"className":188,"code":1336,"filename":1337,"language":190,"meta":191,"style":191},"import {\n  createUserAgentEnricher,\n  createGeoEnricher,\n  createRequestSizeEnricher,\n  createTraceContextEnricher,\n} from 'evlog/enrichers'\n\nexport default defineNitroPlugin((nitroApp) => {\n  const enrichers = [\n    createUserAgentEnricher(),\n    createGeoEnricher(),\n    createRequestSizeEnricher(),\n    createTraceContextEnricher(),\n  ]\n\n  nitroApp.hooks.hook('evlog:enrich', (ctx) => {\n    for (const enricher of enrichers) enricher(ctx)\n  })\n})\n","server/plugins/evlog-enrich.ts",[177,1339,1340,1346,1352,1358,1364,1370,1382,1388,1416,1430,1441,1451,1461,1471,1477,1482,1521,1552,1560],{"__ignoreMap":191},[195,1341,1342,1344],{"class":197,"line":198},[195,1343,202],{"class":201},[195,1345,206],{"class":205},[195,1347,1348,1350],{"class":197,"line":209},[195,1349,213],{"class":212},[195,1351,216],{"class":205},[195,1353,1354,1356],{"class":197,"line":219},[195,1355,222],{"class":212},[195,1357,216],{"class":205},[195,1359,1360,1362],{"class":197,"line":227},[195,1361,230],{"class":212},[195,1363,216],{"class":205},[195,1365,1366,1368],{"class":197,"line":235},[195,1367,238],{"class":212},[195,1369,216],{"class":205},[195,1371,1372,1374,1376,1378,1380],{"class":197,"line":243},[195,1373,246],{"class":205},[195,1375,249],{"class":201},[195,1377,252],{"class":205},[195,1379,179],{"class":255},[195,1381,258],{"class":205},[195,1383,1384],{"class":197,"line":656},[195,1385,1387],{"emptyLinePlaceholder":1386},true,"\n",[195,1389,1390,1393,1396,1399,1402,1404,1408,1411,1414],{"class":197,"line":662},[195,1391,1392],{"class":201},"export",[195,1394,1395],{"class":201}," default",[195,1397,1398],{"class":300}," defineNitroPlugin",[195,1400,1401],{"class":212},"(",[195,1403,1401],{"class":205},[195,1405,1407],{"class":1406},"sHdIc","nitroApp",[195,1409,1410],{"class":205},")",[195,1412,1413],{"class":290}," =>",[195,1415,206],{"class":205},[195,1417,1418,1421,1424,1427],{"class":197,"line":1304},[195,1419,1420],{"class":290},"  const",[195,1422,1423],{"class":212}," enrichers",[195,1425,1426],{"class":205}," =",[195,1428,1429],{"class":330}," [\n",[195,1431,1433,1436,1439],{"class":197,"line":1432},10,[195,1434,1435],{"class":300},"    createUserAgentEnricher",[195,1437,1438],{"class":330},"()",[195,1440,216],{"class":205},[195,1442,1444,1447,1449],{"class":197,"line":1443},11,[195,1445,1446],{"class":300},"    createGeoEnricher",[195,1448,1438],{"class":330},[195,1450,216],{"class":205},[195,1452,1454,1457,1459],{"class":197,"line":1453},12,[195,1455,1456],{"class":300},"    createRequestSizeEnricher",[195,1458,1438],{"class":330},[195,1460,216],{"class":205},[195,1462,1464,1467,1469],{"class":197,"line":1463},13,[195,1465,1466],{"class":300},"    createTraceContextEnricher",[195,1468,1438],{"class":330},[195,1470,216],{"class":205},[195,1472,1474],{"class":197,"line":1473},14,[195,1475,1476],{"class":330},"  ]\n",[195,1478,1480],{"class":197,"line":1479},15,[195,1481,1387],{"emptyLinePlaceholder":1386},[195,1483,1485,1488,1490,1493,1495,1498,1500,1502,1505,1507,1509,1512,1515,1517,1519],{"class":197,"line":1484},16,[195,1486,1487],{"class":212},"  nitroApp",[195,1489,1063],{"class":205},[195,1491,1492],{"class":212},"hooks",[195,1494,1063],{"class":205},[195,1496,1497],{"class":300},"hook",[195,1499,1401],{"class":330},[195,1501,425],{"class":205},[195,1503,1504],{"class":255},"evlog:enrich",[195,1506,425],{"class":205},[195,1508,557],{"class":205},[195,1510,1511],{"class":205}," (",[195,1513,1514],{"class":1406},"ctx",[195,1516,1410],{"class":205},[195,1518,1413],{"class":290},[195,1520,206],{"class":205},[195,1522,1524,1527,1529,1531,1534,1537,1539,1542,1545,1547,1549],{"class":197,"line":1523},17,[195,1525,1526],{"class":201},"    for",[195,1528,1511],{"class":330},[195,1530,291],{"class":290},[195,1532,1533],{"class":212}," enricher",[195,1535,1536],{"class":205}," of",[195,1538,1423],{"class":212},[195,1540,1541],{"class":330},") ",[195,1543,1544],{"class":300},"enricher",[195,1546,1401],{"class":330},[195,1548,1514],{"class":212},[195,1550,1551],{"class":330},")\n",[195,1553,1555,1558],{"class":197,"line":1554},18,[195,1556,1557],{"class":205},"  }",[195,1559,1551],{"class":330},[195,1561,1563,1565],{"class":197,"line":1562},19,[195,1564,246],{"class":205},[195,1566,1551],{"class":212},[260,1568,1570],{"id":1569},"next-steps","Next Steps",[1572,1573,1574,1581],"ul",{},[1575,1576,1577,1580],"li",{},[897,1578,1579],{"href":120},"Custom Enrichers"," - Write your own enricher",[1575,1582,1583,1585],{},[897,1584,56],{"href":62}," - Send enriched events to external services",[1587,1588,1589],"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 .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}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 .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}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 .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}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}",{"title":191,"searchDepth":209,"depth":209,"links":1591},[1592,1593,1594,1595,1596,1597],{"id":262,"depth":209,"text":263},{"id":679,"depth":209,"text":680},{"id":910,"depth":209,"text":911},{"id":1066,"depth":209,"text":1067},{"id":1329,"depth":209,"text":1330},{"id":1569,"depth":209,"text":1570},"Reference for all built-in evlog enrichers. Parse user agents, extract geo data, measure request sizes, and capture trace context automatically.","md",[1601,1604],{"label":1579,"icon":94,"to":120,"color":1602,"variant":1603},"neutral","subtle",{"label":1605,"icon":28,"to":111,"color":1602,"variant":1603},"Enrichers Overview",{},{"title":114,"icon":117},{"title":168,"description":1598},"beX8ZJ1SlKZQyHEvusMCZM-4HfqGXuM63oRWwHb3nmQ",[1611,1613],{"title":61,"path":111,"stem":112,"description":1612,"icon":28,"children":-1},"Enrich your wide events with derived context like user agent, geo data, request size, and trace context. Built-in enrichers and custom enricher support.",{"title":119,"path":120,"stem":121,"description":1614,"icon":94,"children":-1},"Write custom enrichers to add derived context to your wide events. Add deployment metadata, tenant IDs, feature flags, or any computed data.",1772879912588]