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