[{"data":1,"prerenderedAt":4346},["ShallowReactive",2],{"navigation_docs":3,"-getting-started-installation":111,"-getting-started-installation-surround":4341},[4,30,54,94],{"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":49},"Typed Fields","/core-concepts/typed-fields","2.core-concepts/4.typed-fields",{"title":55,"path":56,"stem":57,"children":58,"page":29},"Adapters","/adapters","3.adapters",[59,64,69,74,79,84,89],{"title":60,"path":61,"stem":62,"icon":63},"Overview","/adapters/overview","3.adapters/1.overview","i-custom-plug",{"title":65,"path":66,"stem":67,"icon":68},"Axiom","/adapters/axiom","3.adapters/2.axiom","i-custom-axiom",{"title":70,"path":71,"stem":72,"icon":73},"OTLP","/adapters/otlp","3.adapters/3.otlp","i-simple-icons-opentelemetry",{"title":75,"path":76,"stem":77,"icon":78},"PostHog","/adapters/posthog","3.adapters/4.posthog","i-simple-icons-posthog",{"title":80,"path":81,"stem":82,"icon":83},"Sentry","/adapters/sentry","3.adapters/5.sentry","i-simple-icons-sentry",{"title":85,"path":86,"stem":87,"icon":88},"Custom Adapters","/adapters/custom","3.adapters/6.custom","i-lucide-code",{"title":90,"path":91,"stem":92,"icon":93},"Pipeline","/adapters/pipeline","3.adapters/7.pipeline","i-lucide-workflow",{"title":95,"path":96,"stem":97,"children":98,"page":29},"Enrichers","/enrichers","4.enrichers",[99,102,107],{"title":60,"path":100,"stem":101,"icon":28},"/enrichers/overview","4.enrichers/1.overview",{"title":103,"path":104,"stem":105,"icon":106},"Built-in","/enrichers/built-in","4.enrichers/2.built-in","i-lucide-puzzle",{"title":108,"path":109,"stem":110,"icon":88},"Custom","/enrichers/custom","4.enrichers/3.custom",{"id":112,"title":113,"body":114,"description":4332,"extension":4333,"links":4334,"meta":4337,"navigation":4338,"path":16,"seo":4339,"stem":17,"__hash__":4340},"docs/1.getting-started/2.installation.md","Install evlog",{"type":115,"value":116,"toc":4314},"minimark",[117,121,126,129,201,208,378,383,617,621,630,780,794,798,801,978,981,1002,1014,1017,1020,1025,1032,1173,1188,1192,1199,1357,1364,1368,1375,1560,1582,1586,1597,1790,1796,1826,1851,1855,1861,2159,2163,2166,2377,2453,2456,2553,2560,2563,2577,2676,2680,2709,2723,2729,2875,3070,3077,3081,3083,3133,3140,3184,3188,3191,3507,3510,3528,3531,3554,3566,3570,3572,3622,3625,3888,3895,3899,3917,4280,4288,4292,4295,4299,4303,4310],[118,119,120],"p",{},"evlog supports multiple environments: Nuxt, Nitro, Cloudflare Workers, and standalone TypeScript.",[122,123,125],"h2",{"id":124},"nuxt","Nuxt",[118,127,128],{},"Install evlog via your preferred package manager:",[130,131,132,158,173,187],"code-group",{},[133,134,140],"pre",{"className":135,"code":136,"filename":137,"language":138,"meta":139,"style":139},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","pnpm add evlog\n","pnpm","bash","",[141,142,143],"code",{"__ignoreMap":139},[144,145,148,151,155],"span",{"class":146,"line":147},"line",1,[144,149,137],{"class":150},"sBMFI",[144,152,154],{"class":153},"sfazB"," add",[144,156,157],{"class":153}," evlog\n",[133,159,162],{"className":135,"code":160,"filename":161,"language":138,"meta":139,"style":139},"npm install evlog\n","npm",[141,163,164],{"__ignoreMap":139},[144,165,166,168,171],{"class":146,"line":147},[144,167,161],{"class":150},[144,169,170],{"class":153}," install",[144,172,157],{"class":153},[133,174,177],{"className":135,"code":175,"filename":176,"language":138,"meta":139,"style":139},"yarn add evlog\n","yarn",[141,178,179],{"__ignoreMap":139},[144,180,181,183,185],{"class":146,"line":147},[144,182,176],{"class":150},[144,184,154],{"class":153},[144,186,157],{"class":153},[133,188,191],{"className":135,"code":189,"filename":190,"language":138,"meta":139,"style":139},"bun add evlog\n","bun",[141,192,193],{"__ignoreMap":139},[144,194,195,197,199],{"class":146,"line":147},[144,196,190],{"class":150},[144,198,154],{"class":153},[144,200,157],{"class":153},[118,202,203,204,207],{},"Then add it to your Nuxt config using the ",[141,205,206],{},"evlog/nuxt"," module:",[133,209,214],{"className":210,"code":211,"filename":212,"language":213,"meta":139,"style":139},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","export default defineNuxtConfig({\n  modules: ['evlog/nuxt'],\n  evlog: {\n    env: {\n      service: 'my-app',\n    },\n    // Optional: only log specific routes (supports glob patterns)\n    include: ['/api/**'],\n    // Optional: exclude specific routes from logging\n    exclude: ['/api/_nuxt_icon/**'],\n  },\n})\n","nuxt.config.ts","typescript",[141,215,216,237,263,274,284,302,308,315,336,342,363,369],{"__ignoreMap":139},[144,217,218,222,225,229,233],{"class":146,"line":147},[144,219,221],{"class":220},"s7zQu","export",[144,223,224],{"class":220}," default",[144,226,228],{"class":227},"s2Zo4"," defineNuxtConfig",[144,230,232],{"class":231},"sTEyZ","(",[144,234,236],{"class":235},"sMK4o","{\n",[144,238,240,244,247,250,253,255,257,260],{"class":146,"line":239},2,[144,241,243],{"class":242},"swJcz","  modules",[144,245,246],{"class":235},":",[144,248,249],{"class":231}," [",[144,251,252],{"class":235},"'",[144,254,206],{"class":153},[144,256,252],{"class":235},[144,258,259],{"class":231},"]",[144,261,262],{"class":235},",\n",[144,264,266,269,271],{"class":146,"line":265},3,[144,267,268],{"class":242},"  evlog",[144,270,246],{"class":235},[144,272,273],{"class":235}," {\n",[144,275,277,280,282],{"class":146,"line":276},4,[144,278,279],{"class":242},"    env",[144,281,246],{"class":235},[144,283,273],{"class":235},[144,285,287,290,292,295,298,300],{"class":146,"line":286},5,[144,288,289],{"class":242},"      service",[144,291,246],{"class":235},[144,293,294],{"class":235}," '",[144,296,297],{"class":153},"my-app",[144,299,252],{"class":235},[144,301,262],{"class":235},[144,303,305],{"class":146,"line":304},6,[144,306,307],{"class":235},"    },\n",[144,309,311],{"class":146,"line":310},7,[144,312,314],{"class":313},"sHwdD","    // Optional: only log specific routes (supports glob patterns)\n",[144,316,318,321,323,325,327,330,332,334],{"class":146,"line":317},8,[144,319,320],{"class":242},"    include",[144,322,246],{"class":235},[144,324,249],{"class":231},[144,326,252],{"class":235},[144,328,329],{"class":153},"/api/**",[144,331,252],{"class":235},[144,333,259],{"class":231},[144,335,262],{"class":235},[144,337,339],{"class":146,"line":338},9,[144,340,341],{"class":313},"    // Optional: exclude specific routes from logging\n",[144,343,345,348,350,352,354,357,359,361],{"class":146,"line":344},10,[144,346,347],{"class":242},"    exclude",[144,349,246],{"class":235},[144,351,249],{"class":231},[144,353,252],{"class":235},[144,355,356],{"class":153},"/api/_nuxt_icon/**",[144,358,252],{"class":235},[144,360,259],{"class":231},[144,362,262],{"class":235},[144,364,366],{"class":146,"line":365},11,[144,367,368],{"class":235},"  },\n",[144,370,372,375],{"class":146,"line":371},12,[144,373,374],{"class":235},"}",[144,376,377],{"class":231},")\n",[379,380,382],"h3",{"id":381},"configuration-options","Configuration Options",[384,385,386,405],"table",{},[387,388,389],"thead",{},[390,391,392,396,399,402],"tr",{},[393,394,395],"th",{},"Option",[393,397,398],{},"Type",[393,400,401],{},"Default",[393,403,404],{},"Description",[406,407,408,429,446,469,490,509,530,554,575,598],"tbody",{},[390,409,410,416,421,426],{},[411,412,413],"td",{},[141,414,415],{},"env.service",[411,417,418],{},[141,419,420],{},"string",[411,422,423],{},[141,424,425],{},"'app'",[411,427,428],{},"Service name shown in logs",[390,430,431,436,440,443],{},[411,432,433],{},[141,434,435],{},"env.environment",[411,437,438],{},[141,439,420],{},[411,441,442],{},"Auto-detected",[411,444,445],{},"Environment name",[390,447,448,453,458,463],{},[411,449,450],{},[141,451,452],{},"include",[411,454,455],{},[141,456,457],{},"string[]",[411,459,460],{},[141,461,462],{},"undefined",[411,464,465,466,468],{},"Route patterns to log. Supports glob (",[141,467,329],{},"). If not set, all routes are logged",[390,470,471,476,480,484],{},[411,472,473],{},[141,474,475],{},"exclude",[411,477,478],{},[141,479,457],{},[411,481,482],{},[141,483,462],{},[411,485,486,487,489],{},"Route patterns to exclude from logging. Supports glob (",[141,488,356],{},"). Exclusions take precedence over inclusions",[390,491,492,497,502,506],{},[411,493,494],{},[141,495,496],{},"routes",[411,498,499],{},[141,500,501],{},"Record\u003Cstring, RouteConfig>",[411,503,504],{},[141,505,462],{},[411,507,508],{},"Route-specific service configuration. Allows setting different service names for different routes using glob patterns",[390,510,511,516,521,527],{},[411,512,513],{},[141,514,515],{},"pretty",[411,517,518],{},[141,519,520],{},"boolean",[411,522,523,526],{},[141,524,525],{},"true"," in dev",[411,528,529],{},"Pretty print with tree formatting",[390,531,532,537,542,546],{},[411,533,534],{},[141,535,536],{},"sampling.rates",[411,538,539],{},[141,540,541],{},"object",[411,543,544],{},[141,545,462],{},[411,547,548,549],{},"Head sampling rates per log level (0-100%). See ",[550,551,553],"a",{"href":552},"#sampling","Sampling",[390,555,556,561,566,570],{},[411,557,558],{},[141,559,560],{},"sampling.keep",[411,562,563],{},[141,564,565],{},"array",[411,567,568],{},[141,569,462],{},[411,571,572,573],{},"Tail sampling conditions to force-keep logs. See ",[550,574,553],{"href":552},[390,576,577,582,586,591],{},[411,578,579],{},[141,580,581],{},"transport.enabled",[411,583,584],{},[141,585,520],{},[411,587,588],{},[141,589,590],{},"false",[411,592,593,594],{},"Enable sending client logs to the server. See ",[550,595,597],{"href":596},"#client-transport","Client Transport",[390,599,600,605,609,614],{},[411,601,602],{},[141,603,604],{},"transport.endpoint",[411,606,607],{},[141,608,420],{},[411,610,611],{},[141,612,613],{},"'/api/_evlog/ingest'",[411,615,616],{},"API endpoint for client log ingestion",[379,618,620],{"id":619},"route-filtering","Route Filtering",[118,622,623,624,626,627,629],{},"Use ",[141,625,452],{}," and ",[141,628,475],{}," to control which routes are logged. Both support glob patterns.",[133,631,633],{"className":210,"code":632,"filename":212,"language":213,"meta":139,"style":139},"export default defineNuxtConfig({\n  modules: ['evlog/nuxt'],\n  evlog: {\n    // Log all API and auth routes...\n    include: ['/api/**', '/auth/**'],\n    // ...except internal/noisy routes\n    exclude: [\n      '/api/_nuxt_icon/**',  // Nuxt Icon requests\n      '/api/_content/**',    // Nuxt Content queries\n      '/api/health',         // Health checks\n    ],\n  },\n})\n",[141,634,635,647,665,673,678,706,711,720,734,748,762,769,773],{"__ignoreMap":139},[144,636,637,639,641,643,645],{"class":146,"line":147},[144,638,221],{"class":220},[144,640,224],{"class":220},[144,642,228],{"class":227},[144,644,232],{"class":231},[144,646,236],{"class":235},[144,648,649,651,653,655,657,659,661,663],{"class":146,"line":239},[144,650,243],{"class":242},[144,652,246],{"class":235},[144,654,249],{"class":231},[144,656,252],{"class":235},[144,658,206],{"class":153},[144,660,252],{"class":235},[144,662,259],{"class":231},[144,664,262],{"class":235},[144,666,667,669,671],{"class":146,"line":265},[144,668,268],{"class":242},[144,670,246],{"class":235},[144,672,273],{"class":235},[144,674,675],{"class":146,"line":276},[144,676,677],{"class":313},"    // Log all API and auth routes...\n",[144,679,680,682,684,686,688,690,692,695,697,700,702,704],{"class":146,"line":286},[144,681,320],{"class":242},[144,683,246],{"class":235},[144,685,249],{"class":231},[144,687,252],{"class":235},[144,689,329],{"class":153},[144,691,252],{"class":235},[144,693,694],{"class":235},",",[144,696,294],{"class":235},[144,698,699],{"class":153},"/auth/**",[144,701,252],{"class":235},[144,703,259],{"class":231},[144,705,262],{"class":235},[144,707,708],{"class":146,"line":304},[144,709,710],{"class":313},"    // ...except internal/noisy routes\n",[144,712,713,715,717],{"class":146,"line":310},[144,714,347],{"class":242},[144,716,246],{"class":235},[144,718,719],{"class":231}," [\n",[144,721,722,725,727,729,731],{"class":146,"line":317},[144,723,724],{"class":235},"      '",[144,726,356],{"class":153},[144,728,252],{"class":235},[144,730,694],{"class":235},[144,732,733],{"class":313},"  // Nuxt Icon requests\n",[144,735,736,738,741,743,745],{"class":146,"line":338},[144,737,724],{"class":235},[144,739,740],{"class":153},"/api/_content/**",[144,742,252],{"class":235},[144,744,694],{"class":235},[144,746,747],{"class":313},"    // Nuxt Content queries\n",[144,749,750,752,755,757,759],{"class":146,"line":344},[144,751,724],{"class":235},[144,753,754],{"class":153},"/api/health",[144,756,252],{"class":235},[144,758,694],{"class":235},[144,760,761],{"class":313},"         // Health checks\n",[144,763,764,767],{"class":146,"line":365},[144,765,766],{"class":231},"    ]",[144,768,262],{"class":235},[144,770,771],{"class":146,"line":371},[144,772,368],{"class":235},[144,774,776,778],{"class":146,"line":775},13,[144,777,374],{"class":235},[144,779,377],{"class":231},[781,782,784,788,789,626,791,793],"callout",{"color":783,"icon":13},"info",[785,786,787],"strong",{},"Exclusions take precedence."," If a path matches both ",[141,790,452],{},[141,792,475],{},", it will be excluded.",[379,795,797],{"id":796},"route-based-service-configuration","Route-Based Service Configuration",[118,799,800],{},"In multi-service architectures, configure different service names for different routes:",[133,802,804],{"className":210,"code":803,"filename":212,"language":213,"meta":139,"style":139},"export default defineNuxtConfig({\n  modules: ['evlog/nuxt'],\n  evlog: {\n    env: {\n      service: 'default-service', // Fallback for unmatched routes\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",[141,805,806,818,836,844,852,870,874,883,912,938,964,968,972],{"__ignoreMap":139},[144,807,808,810,812,814,816],{"class":146,"line":147},[144,809,221],{"class":220},[144,811,224],{"class":220},[144,813,228],{"class":227},[144,815,232],{"class":231},[144,817,236],{"class":235},[144,819,820,822,824,826,828,830,832,834],{"class":146,"line":239},[144,821,243],{"class":242},[144,823,246],{"class":235},[144,825,249],{"class":231},[144,827,252],{"class":235},[144,829,206],{"class":153},[144,831,252],{"class":235},[144,833,259],{"class":231},[144,835,262],{"class":235},[144,837,838,840,842],{"class":146,"line":265},[144,839,268],{"class":242},[144,841,246],{"class":235},[144,843,273],{"class":235},[144,845,846,848,850],{"class":146,"line":276},[144,847,279],{"class":242},[144,849,246],{"class":235},[144,851,273],{"class":235},[144,853,854,856,858,860,863,865,867],{"class":146,"line":286},[144,855,289],{"class":242},[144,857,246],{"class":235},[144,859,294],{"class":235},[144,861,862],{"class":153},"default-service",[144,864,252],{"class":235},[144,866,694],{"class":235},[144,868,869],{"class":313}," // Fallback for unmatched routes\n",[144,871,872],{"class":146,"line":304},[144,873,307],{"class":235},[144,875,876,879,881],{"class":146,"line":310},[144,877,878],{"class":242},"    routes",[144,880,246],{"class":235},[144,882,273],{"class":235},[144,884,885,887,890,892,894,897,900,902,904,907,909],{"class":146,"line":317},[144,886,724],{"class":235},[144,888,889],{"class":242},"/api/auth/**",[144,891,252],{"class":235},[144,893,246],{"class":235},[144,895,896],{"class":235}," {",[144,898,899],{"class":242}," service",[144,901,246],{"class":235},[144,903,294],{"class":235},[144,905,906],{"class":153},"auth-service",[144,908,252],{"class":235},[144,910,911],{"class":235}," },\n",[144,913,914,916,919,921,923,925,927,929,931,934,936],{"class":146,"line":338},[144,915,724],{"class":235},[144,917,918],{"class":242},"/api/payment/**",[144,920,252],{"class":235},[144,922,246],{"class":235},[144,924,896],{"class":235},[144,926,899],{"class":242},[144,928,246],{"class":235},[144,930,294],{"class":235},[144,932,933],{"class":153},"payment-service",[144,935,252],{"class":235},[144,937,911],{"class":235},[144,939,940,942,945,947,949,951,953,955,957,960,962],{"class":146,"line":344},[144,941,724],{"class":235},[144,943,944],{"class":242},"/api/booking/**",[144,946,252],{"class":235},[144,948,246],{"class":235},[144,950,896],{"class":235},[144,952,899],{"class":242},[144,954,246],{"class":235},[144,956,294],{"class":235},[144,958,959],{"class":153},"booking-service",[144,961,252],{"class":235},[144,963,911],{"class":235},[144,965,966],{"class":146,"line":365},[144,967,307],{"class":235},[144,969,970],{"class":146,"line":371},[144,971,368],{"class":235},[144,973,974,976],{"class":146,"line":775},[144,975,374],{"class":235},[144,977,377],{"class":231},[118,979,980],{},"All logs from matching routes will automatically include the configured service name. This is especially useful when:",[982,983,984,988,991],"ul",{},[985,986,987],"li",{},"Running multiple microservices behind a single Nuxt server",[985,989,990],{},"Organizing logs by business domain (auth, payment, inventory)",[985,992,993,994,997,998,1001],{},"Differentiating between API versions (",[141,995,996],{},"/api/v1/**",", ",[141,999,1000],{},"/api/v2/**",")",[118,1003,1004,1005,1008,1009,1013],{},"You can also override the service name per handler using ",[141,1006,1007],{},"useLogger(event, 'service-name')",". See ",[550,1010,1012],{"href":1011},"/getting-started/quick-start#service-identification","Quick Start - Service Identification"," for details.",[379,1015,553],{"id":1016},"sampling",[118,1018,1019],{},"At scale, logging everything can become expensive. evlog supports two sampling strategies:",[1021,1022,1024],"h4",{"id":1023},"head-sampling-rates","Head Sampling (rates)",[118,1026,1027,1028,1031],{},"Random sampling based on log level, decided ",[785,1029,1030],{},"before"," the request completes:",[133,1033,1035],{"className":210,"code":1034,"filename":212,"language":213,"meta":139,"style":139},"export default defineNuxtConfig({\n  modules: ['evlog/nuxt'],\n  evlog: {\n    sampling: {\n      rates: {\n        info: 10,    // Keep 10% of info logs\n        warn: 50,    // Keep 50% of warning logs\n        debug: 5,    // Keep 5% of debug logs\n        error: 100,  // Always keep errors (default)\n      },\n    },\n  },\n})\n",[141,1036,1037,1049,1067,1075,1084,1093,1109,1124,1139,1154,1159,1163,1167],{"__ignoreMap":139},[144,1038,1039,1041,1043,1045,1047],{"class":146,"line":147},[144,1040,221],{"class":220},[144,1042,224],{"class":220},[144,1044,228],{"class":227},[144,1046,232],{"class":231},[144,1048,236],{"class":235},[144,1050,1051,1053,1055,1057,1059,1061,1063,1065],{"class":146,"line":239},[144,1052,243],{"class":242},[144,1054,246],{"class":235},[144,1056,249],{"class":231},[144,1058,252],{"class":235},[144,1060,206],{"class":153},[144,1062,252],{"class":235},[144,1064,259],{"class":231},[144,1066,262],{"class":235},[144,1068,1069,1071,1073],{"class":146,"line":265},[144,1070,268],{"class":242},[144,1072,246],{"class":235},[144,1074,273],{"class":235},[144,1076,1077,1080,1082],{"class":146,"line":276},[144,1078,1079],{"class":242},"    sampling",[144,1081,246],{"class":235},[144,1083,273],{"class":235},[144,1085,1086,1089,1091],{"class":146,"line":286},[144,1087,1088],{"class":242},"      rates",[144,1090,246],{"class":235},[144,1092,273],{"class":235},[144,1094,1095,1098,1100,1104,1106],{"class":146,"line":304},[144,1096,1097],{"class":242},"        info",[144,1099,246],{"class":235},[144,1101,1103],{"class":1102},"sbssI"," 10",[144,1105,694],{"class":235},[144,1107,1108],{"class":313},"    // Keep 10% of info logs\n",[144,1110,1111,1114,1116,1119,1121],{"class":146,"line":310},[144,1112,1113],{"class":242},"        warn",[144,1115,246],{"class":235},[144,1117,1118],{"class":1102}," 50",[144,1120,694],{"class":235},[144,1122,1123],{"class":313},"    // Keep 50% of warning logs\n",[144,1125,1126,1129,1131,1134,1136],{"class":146,"line":317},[144,1127,1128],{"class":242},"        debug",[144,1130,246],{"class":235},[144,1132,1133],{"class":1102}," 5",[144,1135,694],{"class":235},[144,1137,1138],{"class":313},"    // Keep 5% of debug logs\n",[144,1140,1141,1144,1146,1149,1151],{"class":146,"line":338},[144,1142,1143],{"class":242},"        error",[144,1145,246],{"class":235},[144,1147,1148],{"class":1102}," 100",[144,1150,694],{"class":235},[144,1152,1153],{"class":313},"  // Always keep errors (default)\n",[144,1155,1156],{"class":146,"line":344},[144,1157,1158],{"class":235},"      },\n",[144,1160,1161],{"class":146,"line":365},[144,1162,307],{"class":235},[144,1164,1165],{"class":146,"line":371},[144,1166,368],{"class":235},[144,1168,1169,1171],{"class":146,"line":775},[144,1170,374],{"class":235},[144,1172,377],{"class":231},[781,1174,1176,1179,1180,1183,1184,1187],{"color":1175,"icon":49},"success",[785,1177,1178],{},"Errors are always logged by default."," Even if you don't specify ",[141,1181,1182],{},"error: 100",", error logs are never sampled out unless you explicitly set ",[141,1185,1186],{},"error: 0",".",[1021,1189,1191],{"id":1190},"tail-sampling-keep","Tail Sampling (keep)",[118,1193,1194,1195,1198],{},"Force-keep logs based on request outcome, evaluated ",[785,1196,1197],{},"after"," the request completes. Useful to always capture slow requests or critical paths even when head sampling would drop them:",[133,1200,1202],{"className":210,"code":1201,"filename":212,"language":213,"meta":139,"style":139},"export default defineNuxtConfig({\n  modules: ['evlog/nuxt'],\n  evlog: {\n    sampling: {\n      rates: { info: 10 },  // Only 10% of info logs\n      keep: [\n        { duration: 1000 },           // Always keep if duration >= 1000ms\n        { status: 400 },              // Always keep if status >= 400\n        { path: '/api/critical/**' }, // Always keep critical paths\n      ],\n    },\n  },\n})\n",[141,1203,1204,1216,1234,1242,1250,1271,1280,1298,1315,1336,1343,1347,1351],{"__ignoreMap":139},[144,1205,1206,1208,1210,1212,1214],{"class":146,"line":147},[144,1207,221],{"class":220},[144,1209,224],{"class":220},[144,1211,228],{"class":227},[144,1213,232],{"class":231},[144,1215,236],{"class":235},[144,1217,1218,1220,1222,1224,1226,1228,1230,1232],{"class":146,"line":239},[144,1219,243],{"class":242},[144,1221,246],{"class":235},[144,1223,249],{"class":231},[144,1225,252],{"class":235},[144,1227,206],{"class":153},[144,1229,252],{"class":235},[144,1231,259],{"class":231},[144,1233,262],{"class":235},[144,1235,1236,1238,1240],{"class":146,"line":265},[144,1237,268],{"class":242},[144,1239,246],{"class":235},[144,1241,273],{"class":235},[144,1243,1244,1246,1248],{"class":146,"line":276},[144,1245,1079],{"class":242},[144,1247,246],{"class":235},[144,1249,273],{"class":235},[144,1251,1252,1254,1256,1258,1261,1263,1265,1268],{"class":146,"line":286},[144,1253,1088],{"class":242},[144,1255,246],{"class":235},[144,1257,896],{"class":235},[144,1259,1260],{"class":242}," info",[144,1262,246],{"class":235},[144,1264,1103],{"class":1102},[144,1266,1267],{"class":235}," },",[144,1269,1270],{"class":313},"  // Only 10% of info logs\n",[144,1272,1273,1276,1278],{"class":146,"line":304},[144,1274,1275],{"class":242},"      keep",[144,1277,246],{"class":235},[144,1279,719],{"class":231},[144,1281,1282,1285,1288,1290,1293,1295],{"class":146,"line":310},[144,1283,1284],{"class":235},"        {",[144,1286,1287],{"class":242}," duration",[144,1289,246],{"class":235},[144,1291,1292],{"class":1102}," 1000",[144,1294,1267],{"class":235},[144,1296,1297],{"class":313},"           // Always keep if duration >= 1000ms\n",[144,1299,1300,1302,1305,1307,1310,1312],{"class":146,"line":317},[144,1301,1284],{"class":235},[144,1303,1304],{"class":242}," status",[144,1306,246],{"class":235},[144,1308,1309],{"class":1102}," 400",[144,1311,1267],{"class":235},[144,1313,1314],{"class":313},"              // Always keep if status >= 400\n",[144,1316,1317,1319,1322,1324,1326,1329,1331,1333],{"class":146,"line":338},[144,1318,1284],{"class":235},[144,1320,1321],{"class":242}," path",[144,1323,246],{"class":235},[144,1325,294],{"class":235},[144,1327,1328],{"class":153},"/api/critical/**",[144,1330,252],{"class":235},[144,1332,1267],{"class":235},[144,1334,1335],{"class":313}," // Always keep critical paths\n",[144,1337,1338,1341],{"class":146,"line":344},[144,1339,1340],{"class":231},"      ]",[144,1342,262],{"class":235},[144,1344,1345],{"class":146,"line":365},[144,1346,307],{"class":235},[144,1348,1349],{"class":146,"line":371},[144,1350,368],{"class":235},[144,1352,1353,1355],{"class":146,"line":775},[144,1354,374],{"class":235},[144,1356,377],{"class":231},[118,1358,1359,1360,1363],{},"Conditions use ",[141,1361,1362],{},">="," comparison and follow OR logic (any match = keep).",[1021,1365,1367],{"id":1366},"custom-tail-sampling-hook","Custom Tail Sampling Hook",[118,1369,1370,1371,1374],{},"For business-specific conditions (premium users, feature flags, etc.), use the ",[141,1372,1373],{},"evlog:emit:keep"," Nitro hook:",[133,1376,1379],{"className":210,"code":1377,"filename":1378,"language":213,"meta":139,"style":139},"export default defineNitroPlugin((nitroApp) => {\n  nitroApp.hooks.hook('evlog:emit:keep', (ctx) => {\n    // Access user from accumulated context\n    const user = ctx.context.user as { premium?: boolean } | undefined\n\n    // Force-keep logs for premium users regardless of sampling rate\n    if (user?.premium) {\n      ctx.shouldKeep = true\n    }\n  })\n})\n","server/plugins/evlog-custom.ts",[141,1380,1381,1406,1443,1448,1495,1501,1506,1526,1542,1547,1554],{"__ignoreMap":139},[144,1382,1383,1385,1387,1390,1392,1394,1398,1400,1404],{"class":146,"line":147},[144,1384,221],{"class":220},[144,1386,224],{"class":220},[144,1388,1389],{"class":227}," defineNitroPlugin",[144,1391,232],{"class":231},[144,1393,232],{"class":235},[144,1395,1397],{"class":1396},"sHdIc","nitroApp",[144,1399,1001],{"class":235},[144,1401,1403],{"class":1402},"spNyl"," =>",[144,1405,273],{"class":235},[144,1407,1408,1411,1413,1416,1418,1421,1423,1425,1427,1429,1431,1434,1437,1439,1441],{"class":146,"line":239},[144,1409,1410],{"class":231},"  nitroApp",[144,1412,1187],{"class":235},[144,1414,1415],{"class":231},"hooks",[144,1417,1187],{"class":235},[144,1419,1420],{"class":227},"hook",[144,1422,232],{"class":242},[144,1424,252],{"class":235},[144,1426,1373],{"class":153},[144,1428,252],{"class":235},[144,1430,694],{"class":235},[144,1432,1433],{"class":235}," (",[144,1435,1436],{"class":1396},"ctx",[144,1438,1001],{"class":235},[144,1440,1403],{"class":1402},[144,1442,273],{"class":235},[144,1444,1445],{"class":146,"line":265},[144,1446,1447],{"class":313},"    // Access user from accumulated context\n",[144,1449,1450,1453,1456,1459,1462,1464,1467,1469,1472,1475,1477,1480,1483,1486,1489,1492],{"class":146,"line":276},[144,1451,1452],{"class":1402},"    const",[144,1454,1455],{"class":231}," user",[144,1457,1458],{"class":235}," =",[144,1460,1461],{"class":231}," ctx",[144,1463,1187],{"class":235},[144,1465,1466],{"class":231},"context",[144,1468,1187],{"class":235},[144,1470,1471],{"class":231},"user",[144,1473,1474],{"class":220}," as",[144,1476,896],{"class":235},[144,1478,1479],{"class":242}," premium",[144,1481,1482],{"class":235},"?:",[144,1484,1485],{"class":150}," boolean",[144,1487,1488],{"class":235}," }",[144,1490,1491],{"class":235}," |",[144,1493,1494],{"class":150}," undefined\n",[144,1496,1497],{"class":146,"line":286},[144,1498,1500],{"emptyLinePlaceholder":1499},true,"\n",[144,1502,1503],{"class":146,"line":304},[144,1504,1505],{"class":313},"    // Force-keep logs for premium users regardless of sampling rate\n",[144,1507,1508,1511,1513,1515,1518,1521,1524],{"class":146,"line":310},[144,1509,1510],{"class":220},"    if",[144,1512,1433],{"class":242},[144,1514,1471],{"class":231},[144,1516,1517],{"class":235},"?.",[144,1519,1520],{"class":231},"premium",[144,1522,1523],{"class":242},") ",[144,1525,236],{"class":235},[144,1527,1528,1531,1533,1536,1538],{"class":146,"line":317},[144,1529,1530],{"class":231},"      ctx",[144,1532,1187],{"class":235},[144,1534,1535],{"class":231},"shouldKeep",[144,1537,1458],{"class":235},[144,1539,1541],{"class":1540},"sfNiH"," true\n",[144,1543,1544],{"class":146,"line":338},[144,1545,1546],{"class":235},"    }\n",[144,1548,1549,1552],{"class":146,"line":344},[144,1550,1551],{"class":235},"  }",[144,1553,377],{"class":242},[144,1555,1556,1558],{"class":146,"line":365},[144,1557,374],{"class":235},[144,1559,377],{"class":231},[118,1561,1562,1563,1566,1567,997,1570,997,1573,997,1576,1579,1580,1187],{},"The hook receives a ",[141,1564,1565],{},"TailSamplingContext"," with ",[141,1568,1569],{},"status",[141,1571,1572],{},"duration",[141,1574,1575],{},"path",[141,1577,1578],{},"method",", and the full accumulated ",[141,1581,1466],{},[379,1583,1585],{"id":1584},"log-draining","Log Draining",[118,1587,1588,1589,1592,1593,1596],{},"Send logs to external services like Axiom, Loki, or custom endpoints using the ",[141,1590,1591],{},"evlog:drain"," hook. The hook is called in ",[785,1594,1595],{},"fire-and-forget"," mode, meaning it never blocks the HTTP response.",[133,1598,1601],{"className":210,"code":1599,"filename":1600,"language":213,"meta":139,"style":139},"export default defineNitroPlugin((nitroApp) => {\n  nitroApp.hooks.hook('evlog:drain', async (ctx) => {\n    // Send wide event to Axiom (fire-and-forget, never blocks response)\n    await fetch('https://api.axiom.co/v1/datasets/logs/ingest', {\n      method: 'POST',\n      headers: { Authorization: `Bearer ${process.env.AXIOM_TOKEN}` },\n      body: JSON.stringify([ctx.event]),\n    })\n  })\n})\n","server/plugins/evlog-axiom.ts",[141,1602,1603,1623,1658,1663,1684,1700,1741,1771,1778,1784],{"__ignoreMap":139},[144,1604,1605,1607,1609,1611,1613,1615,1617,1619,1621],{"class":146,"line":147},[144,1606,221],{"class":220},[144,1608,224],{"class":220},[144,1610,1389],{"class":227},[144,1612,232],{"class":231},[144,1614,232],{"class":235},[144,1616,1397],{"class":1396},[144,1618,1001],{"class":235},[144,1620,1403],{"class":1402},[144,1622,273],{"class":235},[144,1624,1625,1627,1629,1631,1633,1635,1637,1639,1641,1643,1645,1648,1650,1652,1654,1656],{"class":146,"line":239},[144,1626,1410],{"class":231},[144,1628,1187],{"class":235},[144,1630,1415],{"class":231},[144,1632,1187],{"class":235},[144,1634,1420],{"class":227},[144,1636,232],{"class":242},[144,1638,252],{"class":235},[144,1640,1591],{"class":153},[144,1642,252],{"class":235},[144,1644,694],{"class":235},[144,1646,1647],{"class":1402}," async",[144,1649,1433],{"class":235},[144,1651,1436],{"class":1396},[144,1653,1001],{"class":235},[144,1655,1403],{"class":1402},[144,1657,273],{"class":235},[144,1659,1660],{"class":146,"line":265},[144,1661,1662],{"class":313},"    // Send wide event to Axiom (fire-and-forget, never blocks response)\n",[144,1664,1665,1668,1671,1673,1675,1678,1680,1682],{"class":146,"line":276},[144,1666,1667],{"class":220},"    await",[144,1669,1670],{"class":227}," fetch",[144,1672,232],{"class":242},[144,1674,252],{"class":235},[144,1676,1677],{"class":153},"https://api.axiom.co/v1/datasets/logs/ingest",[144,1679,252],{"class":235},[144,1681,694],{"class":235},[144,1683,273],{"class":235},[144,1685,1686,1689,1691,1693,1696,1698],{"class":146,"line":286},[144,1687,1688],{"class":242},"      method",[144,1690,246],{"class":235},[144,1692,294],{"class":235},[144,1694,1695],{"class":153},"POST",[144,1697,252],{"class":235},[144,1699,262],{"class":235},[144,1701,1702,1705,1707,1709,1712,1714,1717,1720,1723,1726,1728,1731,1733,1736,1739],{"class":146,"line":304},[144,1703,1704],{"class":242},"      headers",[144,1706,246],{"class":235},[144,1708,896],{"class":235},[144,1710,1711],{"class":242}," Authorization",[144,1713,246],{"class":235},[144,1715,1716],{"class":235}," `",[144,1718,1719],{"class":153},"Bearer ",[144,1721,1722],{"class":235},"${",[144,1724,1725],{"class":231},"process",[144,1727,1187],{"class":235},[144,1729,1730],{"class":231},"env",[144,1732,1187],{"class":235},[144,1734,1735],{"class":231},"AXIOM_TOKEN",[144,1737,1738],{"class":235},"}`",[144,1740,911],{"class":235},[144,1742,1743,1746,1748,1751,1753,1756,1759,1761,1763,1766,1769],{"class":146,"line":310},[144,1744,1745],{"class":242},"      body",[144,1747,246],{"class":235},[144,1749,1750],{"class":231}," JSON",[144,1752,1187],{"class":235},[144,1754,1755],{"class":227},"stringify",[144,1757,1758],{"class":242},"([",[144,1760,1436],{"class":231},[144,1762,1187],{"class":235},[144,1764,1765],{"class":231},"event",[144,1767,1768],{"class":242},"])",[144,1770,262],{"class":235},[144,1772,1773,1776],{"class":146,"line":317},[144,1774,1775],{"class":235},"    }",[144,1777,377],{"class":242},[144,1779,1780,1782],{"class":146,"line":338},[144,1781,1551],{"class":235},[144,1783,377],{"class":242},[144,1785,1786,1788],{"class":146,"line":344},[144,1787,374],{"class":235},[144,1789,377],{"class":231},[118,1791,1562,1792,1795],{},[141,1793,1794],{},"DrainContext"," with:",[982,1797,1798,1807,1820],{},[985,1799,1800,1802,1803,1806],{},[141,1801,1765],{},": The complete ",[141,1804,1805],{},"WideEvent"," (timestamp, level, service, and all accumulated context)",[985,1808,1809,1812,1813,997,1815,997,1817,1001],{},[141,1810,1811],{},"request",": Optional request metadata (",[141,1814,1578],{},[141,1816,1575],{},[141,1818,1819],{},"requestId",[985,1821,1822,1825],{},[141,1823,1824],{},"headers",": HTTP headers from the original request (useful for correlation with external services)",[781,1827,1828,1831,1832,997,1835,997,1838,997,1841,997,1844,997,1847,1850],{"color":1175,"icon":49},[785,1829,1830],{},"Security:"," Sensitive headers (",[141,1833,1834],{},"authorization",[141,1836,1837],{},"cookie",[141,1839,1840],{},"set-cookie",[141,1842,1843],{},"x-api-key",[141,1845,1846],{},"x-auth-token",[141,1848,1849],{},"proxy-authorization",") are automatically filtered out and never passed to the drain hook.",[1021,1852,1854],{"id":1853},"using-headers-for-external-service-correlation","Using Headers for External Service Correlation",[118,1856,1857,1858,1860],{},"The ",[141,1859,1824],{}," field allows you to correlate logs with external services like PostHog, Sentry, or custom analytics:",[133,1862,1865],{"className":210,"code":1863,"filename":1864,"language":213,"meta":139,"style":139},"export default defineNitroPlugin((nitroApp) => {\n  const posthog = usePostHog()\n\n  nitroApp.hooks.hook('evlog:drain', (ctx) => {\n    if (!posthog) return\n\n    // Extract correlation headers sent from the client\n    // These headers are safe (sensitive headers like Authorization are filtered)\n    const sessionId = ctx.headers?.['x-posthog-session-id']\n    const distinctId = ctx.headers?.['x-posthog-distinct-id']\n\n    if (!distinctId) return\n\n    // Correlate server logs with client sessions in PostHog\n    posthog.capture({\n      distinctId,\n      event: 'server_log',\n      properties: {\n        ...ctx.event,\n        $session_id: sessionId,\n      },\n    })\n  })\n})\n","server/plugins/evlog-posthog.ts",[141,1866,1867,1887,1903,1907,1939,1956,1960,1965,1970,2000,2028,2032,2047,2051,2057,2072,2080,2097,2107,2121,2133,2138,2145,2152],{"__ignoreMap":139},[144,1868,1869,1871,1873,1875,1877,1879,1881,1883,1885],{"class":146,"line":147},[144,1870,221],{"class":220},[144,1872,224],{"class":220},[144,1874,1389],{"class":227},[144,1876,232],{"class":231},[144,1878,232],{"class":235},[144,1880,1397],{"class":1396},[144,1882,1001],{"class":235},[144,1884,1403],{"class":1402},[144,1886,273],{"class":235},[144,1888,1889,1892,1895,1897,1900],{"class":146,"line":239},[144,1890,1891],{"class":1402},"  const",[144,1893,1894],{"class":231}," posthog",[144,1896,1458],{"class":235},[144,1898,1899],{"class":227}," usePostHog",[144,1901,1902],{"class":242},"()\n",[144,1904,1905],{"class":146,"line":265},[144,1906,1500],{"emptyLinePlaceholder":1499},[144,1908,1909,1911,1913,1915,1917,1919,1921,1923,1925,1927,1929,1931,1933,1935,1937],{"class":146,"line":276},[144,1910,1410],{"class":231},[144,1912,1187],{"class":235},[144,1914,1415],{"class":231},[144,1916,1187],{"class":235},[144,1918,1420],{"class":227},[144,1920,232],{"class":242},[144,1922,252],{"class":235},[144,1924,1591],{"class":153},[144,1926,252],{"class":235},[144,1928,694],{"class":235},[144,1930,1433],{"class":235},[144,1932,1436],{"class":1396},[144,1934,1001],{"class":235},[144,1936,1403],{"class":1402},[144,1938,273],{"class":235},[144,1940,1941,1943,1945,1948,1951,1953],{"class":146,"line":286},[144,1942,1510],{"class":220},[144,1944,1433],{"class":242},[144,1946,1947],{"class":235},"!",[144,1949,1950],{"class":231},"posthog",[144,1952,1523],{"class":242},[144,1954,1955],{"class":220},"return\n",[144,1957,1958],{"class":146,"line":304},[144,1959,1500],{"emptyLinePlaceholder":1499},[144,1961,1962],{"class":146,"line":310},[144,1963,1964],{"class":313},"    // Extract correlation headers sent from the client\n",[144,1966,1967],{"class":146,"line":317},[144,1968,1969],{"class":313},"    // These headers are safe (sensitive headers like Authorization are filtered)\n",[144,1971,1972,1974,1977,1979,1981,1983,1985,1987,1990,1992,1995,1997],{"class":146,"line":338},[144,1973,1452],{"class":1402},[144,1975,1976],{"class":231}," sessionId",[144,1978,1458],{"class":235},[144,1980,1461],{"class":231},[144,1982,1187],{"class":235},[144,1984,1824],{"class":231},[144,1986,1517],{"class":235},[144,1988,1989],{"class":242},"[",[144,1991,252],{"class":235},[144,1993,1994],{"class":153},"x-posthog-session-id",[144,1996,252],{"class":235},[144,1998,1999],{"class":242},"]\n",[144,2001,2002,2004,2007,2009,2011,2013,2015,2017,2019,2021,2024,2026],{"class":146,"line":344},[144,2003,1452],{"class":1402},[144,2005,2006],{"class":231}," distinctId",[144,2008,1458],{"class":235},[144,2010,1461],{"class":231},[144,2012,1187],{"class":235},[144,2014,1824],{"class":231},[144,2016,1517],{"class":235},[144,2018,1989],{"class":242},[144,2020,252],{"class":235},[144,2022,2023],{"class":153},"x-posthog-distinct-id",[144,2025,252],{"class":235},[144,2027,1999],{"class":242},[144,2029,2030],{"class":146,"line":365},[144,2031,1500],{"emptyLinePlaceholder":1499},[144,2033,2034,2036,2038,2040,2043,2045],{"class":146,"line":371},[144,2035,1510],{"class":220},[144,2037,1433],{"class":242},[144,2039,1947],{"class":235},[144,2041,2042],{"class":231},"distinctId",[144,2044,1523],{"class":242},[144,2046,1955],{"class":220},[144,2048,2049],{"class":146,"line":775},[144,2050,1500],{"emptyLinePlaceholder":1499},[144,2052,2054],{"class":146,"line":2053},14,[144,2055,2056],{"class":313},"    // Correlate server logs with client sessions in PostHog\n",[144,2058,2060,2063,2065,2068,2070],{"class":146,"line":2059},15,[144,2061,2062],{"class":231},"    posthog",[144,2064,1187],{"class":235},[144,2066,2067],{"class":227},"capture",[144,2069,232],{"class":242},[144,2071,236],{"class":235},[144,2073,2075,2078],{"class":146,"line":2074},16,[144,2076,2077],{"class":231},"      distinctId",[144,2079,262],{"class":235},[144,2081,2083,2086,2088,2090,2093,2095],{"class":146,"line":2082},17,[144,2084,2085],{"class":242},"      event",[144,2087,246],{"class":235},[144,2089,294],{"class":235},[144,2091,2092],{"class":153},"server_log",[144,2094,252],{"class":235},[144,2096,262],{"class":235},[144,2098,2100,2103,2105],{"class":146,"line":2099},18,[144,2101,2102],{"class":242},"      properties",[144,2104,246],{"class":235},[144,2106,273],{"class":235},[144,2108,2110,2113,2115,2117,2119],{"class":146,"line":2109},19,[144,2111,2112],{"class":235},"        ...",[144,2114,1436],{"class":231},[144,2116,1187],{"class":235},[144,2118,1765],{"class":231},[144,2120,262],{"class":235},[144,2122,2124,2127,2129,2131],{"class":146,"line":2123},20,[144,2125,2126],{"class":242},"        $session_id",[144,2128,246],{"class":235},[144,2130,1976],{"class":231},[144,2132,262],{"class":235},[144,2134,2136],{"class":146,"line":2135},21,[144,2137,1158],{"class":235},[144,2139,2141,2143],{"class":146,"line":2140},22,[144,2142,1775],{"class":235},[144,2144,377],{"class":242},[144,2146,2148,2150],{"class":146,"line":2147},23,[144,2149,1551],{"class":235},[144,2151,377],{"class":242},[144,2153,2155,2157],{"class":146,"line":2154},24,[144,2156,374],{"class":235},[144,2158,377],{"class":231},[379,2160,2162],{"id":2161},"event-enrichment","Event Enrichment",[118,2164,2165],{},"Enrich your wide events with derived context like user agent, geo data, request size, and trace context. Enrichers run after emit, before drain.",[133,2167,2170],{"className":210,"code":2168,"filename":2169,"language":213,"meta":139,"style":139},"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",[141,2171,2172,2179,2186,2193,2200,2207,2222,2226,2246,2257,2267,2276,2285,2294,2299,2303,2336,2365,2371],{"__ignoreMap":139},[144,2173,2174,2177],{"class":146,"line":147},[144,2175,2176],{"class":220},"import",[144,2178,273],{"class":235},[144,2180,2181,2184],{"class":146,"line":239},[144,2182,2183],{"class":231},"  createUserAgentEnricher",[144,2185,262],{"class":235},[144,2187,2188,2191],{"class":146,"line":265},[144,2189,2190],{"class":231},"  createGeoEnricher",[144,2192,262],{"class":235},[144,2194,2195,2198],{"class":146,"line":276},[144,2196,2197],{"class":231},"  createRequestSizeEnricher",[144,2199,262],{"class":235},[144,2201,2202,2205],{"class":146,"line":286},[144,2203,2204],{"class":231},"  createTraceContextEnricher",[144,2206,262],{"class":235},[144,2208,2209,2211,2214,2216,2219],{"class":146,"line":304},[144,2210,374],{"class":235},[144,2212,2213],{"class":220}," from",[144,2215,294],{"class":235},[144,2217,2218],{"class":153},"evlog/enrichers",[144,2220,2221],{"class":235},"'\n",[144,2223,2224],{"class":146,"line":310},[144,2225,1500],{"emptyLinePlaceholder":1499},[144,2227,2228,2230,2232,2234,2236,2238,2240,2242,2244],{"class":146,"line":317},[144,2229,221],{"class":220},[144,2231,224],{"class":220},[144,2233,1389],{"class":227},[144,2235,232],{"class":231},[144,2237,232],{"class":235},[144,2239,1397],{"class":1396},[144,2241,1001],{"class":235},[144,2243,1403],{"class":1402},[144,2245,273],{"class":235},[144,2247,2248,2250,2253,2255],{"class":146,"line":338},[144,2249,1891],{"class":1402},[144,2251,2252],{"class":231}," enrichers",[144,2254,1458],{"class":235},[144,2256,719],{"class":242},[144,2258,2259,2262,2265],{"class":146,"line":344},[144,2260,2261],{"class":227},"    createUserAgentEnricher",[144,2263,2264],{"class":242},"()",[144,2266,262],{"class":235},[144,2268,2269,2272,2274],{"class":146,"line":365},[144,2270,2271],{"class":227},"    createGeoEnricher",[144,2273,2264],{"class":242},[144,2275,262],{"class":235},[144,2277,2278,2281,2283],{"class":146,"line":371},[144,2279,2280],{"class":227},"    createRequestSizeEnricher",[144,2282,2264],{"class":242},[144,2284,262],{"class":235},[144,2286,2287,2290,2292],{"class":146,"line":775},[144,2288,2289],{"class":227},"    createTraceContextEnricher",[144,2291,2264],{"class":242},[144,2293,262],{"class":235},[144,2295,2296],{"class":146,"line":2053},[144,2297,2298],{"class":242},"  ]\n",[144,2300,2301],{"class":146,"line":2059},[144,2302,1500],{"emptyLinePlaceholder":1499},[144,2304,2305,2307,2309,2311,2313,2315,2317,2319,2322,2324,2326,2328,2330,2332,2334],{"class":146,"line":2074},[144,2306,1410],{"class":231},[144,2308,1187],{"class":235},[144,2310,1415],{"class":231},[144,2312,1187],{"class":235},[144,2314,1420],{"class":227},[144,2316,232],{"class":242},[144,2318,252],{"class":235},[144,2320,2321],{"class":153},"evlog:enrich",[144,2323,252],{"class":235},[144,2325,694],{"class":235},[144,2327,1433],{"class":235},[144,2329,1436],{"class":1396},[144,2331,1001],{"class":235},[144,2333,1403],{"class":1402},[144,2335,273],{"class":235},[144,2337,2338,2341,2343,2346,2349,2352,2354,2356,2359,2361,2363],{"class":146,"line":2082},[144,2339,2340],{"class":220},"    for",[144,2342,1433],{"class":242},[144,2344,2345],{"class":1402},"const",[144,2347,2348],{"class":231}," enricher",[144,2350,2351],{"class":235}," of",[144,2353,2252],{"class":231},[144,2355,1523],{"class":242},[144,2357,2358],{"class":227},"enricher",[144,2360,232],{"class":242},[144,2362,1436],{"class":231},[144,2364,377],{"class":242},[144,2366,2367,2369],{"class":146,"line":2099},[144,2368,1551],{"class":235},[144,2370,377],{"class":242},[144,2372,2373,2375],{"class":146,"line":2109},[144,2374,374],{"class":235},[144,2376,377],{"class":231},[384,2378,2379,2391],{},[387,2380,2381],{},[390,2382,2383,2386,2389],{},[393,2384,2385],{},"Enricher",[393,2387,2388],{},"Event Field",[393,2390,404],{},[406,2392,2393,2408,2423,2438],{},[390,2394,2395,2400,2405],{},[411,2396,2397],{},[141,2398,2399],{},"createUserAgentEnricher()",[411,2401,2402],{},[141,2403,2404],{},"userAgent",[411,2406,2407],{},"Browser, OS, device type from User-Agent header",[390,2409,2410,2415,2420],{},[411,2411,2412],{},[141,2413,2414],{},"createGeoEnricher()",[411,2416,2417],{},[141,2418,2419],{},"geo",[411,2421,2422],{},"Country, region, city from platform headers (Vercel, Cloudflare)",[390,2424,2425,2430,2435],{},[411,2426,2427],{},[141,2428,2429],{},"createRequestSizeEnricher()",[411,2431,2432],{},[141,2433,2434],{},"requestSize",[411,2436,2437],{},"Request/response payload sizes from Content-Length",[390,2439,2440,2445,2450],{},[411,2441,2442],{},[141,2443,2444],{},"createTraceContextEnricher()",[411,2446,2447],{},[141,2448,2449],{},"traceContext",[411,2451,2452],{},"W3C trace context (traceId, spanId) from traceparent header",[118,2454,2455],{},"You can also write custom enrichers to add any derived context:",[133,2457,2459],{"className":210,"code":2458,"filename":2169,"language":213,"meta":139,"style":139},"export default defineNitroPlugin((nitroApp) => {\n  nitroApp.hooks.hook('evlog:enrich', (ctx) => {\n    ctx.event.deploymentId = process.env.DEPLOYMENT_ID\n  })\n})\n",[141,2460,2461,2481,2513,2541,2547],{"__ignoreMap":139},[144,2462,2463,2465,2467,2469,2471,2473,2475,2477,2479],{"class":146,"line":147},[144,2464,221],{"class":220},[144,2466,224],{"class":220},[144,2468,1389],{"class":227},[144,2470,232],{"class":231},[144,2472,232],{"class":235},[144,2474,1397],{"class":1396},[144,2476,1001],{"class":235},[144,2478,1403],{"class":1402},[144,2480,273],{"class":235},[144,2482,2483,2485,2487,2489,2491,2493,2495,2497,2499,2501,2503,2505,2507,2509,2511],{"class":146,"line":239},[144,2484,1410],{"class":231},[144,2486,1187],{"class":235},[144,2488,1415],{"class":231},[144,2490,1187],{"class":235},[144,2492,1420],{"class":227},[144,2494,232],{"class":242},[144,2496,252],{"class":235},[144,2498,2321],{"class":153},[144,2500,252],{"class":235},[144,2502,694],{"class":235},[144,2504,1433],{"class":235},[144,2506,1436],{"class":1396},[144,2508,1001],{"class":235},[144,2510,1403],{"class":1402},[144,2512,273],{"class":235},[144,2514,2515,2518,2520,2522,2524,2527,2529,2532,2534,2536,2538],{"class":146,"line":265},[144,2516,2517],{"class":231},"    ctx",[144,2519,1187],{"class":235},[144,2521,1765],{"class":231},[144,2523,1187],{"class":235},[144,2525,2526],{"class":231},"deploymentId",[144,2528,1458],{"class":235},[144,2530,2531],{"class":231}," process",[144,2533,1187],{"class":235},[144,2535,1730],{"class":231},[144,2537,1187],{"class":235},[144,2539,2540],{"class":231},"DEPLOYMENT_ID\n",[144,2542,2543,2545],{"class":146,"line":276},[144,2544,1551],{"class":235},[144,2546,377],{"class":242},[144,2548,2549,2551],{"class":146,"line":286},[144,2550,374],{"class":235},[144,2552,377],{"class":231},[118,2554,2555,2556,2559],{},"See the ",[550,2557,2558],{"href":100},"Enrichers guide"," for full documentation.",[379,2561,597],{"id":2562},"client-transport",[118,2564,2565,2566,997,2569,2572,2573,2576],{},"Send browser logs to your server for centralized logging. When enabled, client-side ",[141,2567,2568],{},"log.info()",[141,2570,2571],{},"log.error()",", etc. calls are automatically sent to the server via the ",[141,2574,2575],{},"/api/_evlog/ingest"," endpoint.",[133,2578,2580],{"className":210,"code":2579,"filename":212,"language":213,"meta":139,"style":139},"export default defineNuxtConfig({\n  modules: ['evlog/nuxt'],\n  evlog: {\n    transport: {\n      enabled: true,  // Enable client log transport\n      endpoint: '/api/_evlog/ingest',  // default\n    },\n  },\n})\n",[141,2581,2582,2594,2612,2620,2629,2644,2662,2666,2670],{"__ignoreMap":139},[144,2583,2584,2586,2588,2590,2592],{"class":146,"line":147},[144,2585,221],{"class":220},[144,2587,224],{"class":220},[144,2589,228],{"class":227},[144,2591,232],{"class":231},[144,2593,236],{"class":235},[144,2595,2596,2598,2600,2602,2604,2606,2608,2610],{"class":146,"line":239},[144,2597,243],{"class":242},[144,2599,246],{"class":235},[144,2601,249],{"class":231},[144,2603,252],{"class":235},[144,2605,206],{"class":153},[144,2607,252],{"class":235},[144,2609,259],{"class":231},[144,2611,262],{"class":235},[144,2613,2614,2616,2618],{"class":146,"line":265},[144,2615,268],{"class":242},[144,2617,246],{"class":235},[144,2619,273],{"class":235},[144,2621,2622,2625,2627],{"class":146,"line":276},[144,2623,2624],{"class":242},"    transport",[144,2626,246],{"class":235},[144,2628,273],{"class":235},[144,2630,2631,2634,2636,2639,2641],{"class":146,"line":286},[144,2632,2633],{"class":242},"      enabled",[144,2635,246],{"class":235},[144,2637,2638],{"class":1540}," true",[144,2640,694],{"class":235},[144,2642,2643],{"class":313},"  // Enable client log transport\n",[144,2645,2646,2649,2651,2653,2655,2657,2659],{"class":146,"line":304},[144,2647,2648],{"class":242},"      endpoint",[144,2650,246],{"class":235},[144,2652,294],{"class":235},[144,2654,2575],{"class":153},[144,2656,252],{"class":235},[144,2658,694],{"class":235},[144,2660,2661],{"class":313},"  // default\n",[144,2663,2664],{"class":146,"line":310},[144,2665,307],{"class":235},[144,2667,2668],{"class":146,"line":317},[144,2669,368],{"class":235},[144,2671,2672,2674],{"class":146,"line":338},[144,2673,374],{"class":235},[144,2675,377],{"class":231},[1021,2677,2679],{"id":2678},"how-it-works","How it works",[2681,2682,2683,2689,2695,2698,2706],"ol",{},[985,2684,2685,2686],{},"Client calls ",[141,2687,2688],{},"log.info({ action: 'click', button: 'submit' })",[985,2690,2691,2692,2694],{},"Log is sent to ",[141,2693,2575],{}," via POST",[985,2696,2697],{},"Server enriches with environment context (service, version, region, etc.)",[985,2699,2700,2702,2703],{},[141,2701,1591],{}," hook is called with ",[141,2704,2705],{},"source: 'client'",[985,2707,2708],{},"External services receive the log (Axiom, Loki, etc.)",[781,2710,2711,2712,997,2715,2718,2719,2722],{"color":783,"icon":13},"Client logs are automatically enriched with the server's environment context. You don't need to send ",[141,2713,2714],{},"service",[141,2716,2717],{},"environment",", or ",[141,2720,2721],{},"version"," from the client.",[118,2724,2725,2726,2728],{},"In your drain hook, you can identify client logs by the ",[141,2727,2705],{}," field:",[133,2730,2733],{"className":210,"code":2731,"filename":2732,"language":213,"meta":139,"style":139},"export default defineNitroPlugin((nitroApp) => {\n  nitroApp.hooks.hook('evlog:drain', async (ctx) => {\n    if (ctx.event.source === 'client') {\n      // Handle client logs specifically\n      console.log('[CLIENT]', ctx.event)\n    }\n    // Send to external service...\n  })\n})\n","server/plugins/evlog-drain.ts",[141,2734,2735,2755,2789,2820,2825,2854,2858,2863,2869],{"__ignoreMap":139},[144,2736,2737,2739,2741,2743,2745,2747,2749,2751,2753],{"class":146,"line":147},[144,2738,221],{"class":220},[144,2740,224],{"class":220},[144,2742,1389],{"class":227},[144,2744,232],{"class":231},[144,2746,232],{"class":235},[144,2748,1397],{"class":1396},[144,2750,1001],{"class":235},[144,2752,1403],{"class":1402},[144,2754,273],{"class":235},[144,2756,2757,2759,2761,2763,2765,2767,2769,2771,2773,2775,2777,2779,2781,2783,2785,2787],{"class":146,"line":239},[144,2758,1410],{"class":231},[144,2760,1187],{"class":235},[144,2762,1415],{"class":231},[144,2764,1187],{"class":235},[144,2766,1420],{"class":227},[144,2768,232],{"class":242},[144,2770,252],{"class":235},[144,2772,1591],{"class":153},[144,2774,252],{"class":235},[144,2776,694],{"class":235},[144,2778,1647],{"class":1402},[144,2780,1433],{"class":235},[144,2782,1436],{"class":1396},[144,2784,1001],{"class":235},[144,2786,1403],{"class":1402},[144,2788,273],{"class":235},[144,2790,2791,2793,2795,2797,2799,2801,2803,2806,2809,2811,2814,2816,2818],{"class":146,"line":265},[144,2792,1510],{"class":220},[144,2794,1433],{"class":242},[144,2796,1436],{"class":231},[144,2798,1187],{"class":235},[144,2800,1765],{"class":231},[144,2802,1187],{"class":235},[144,2804,2805],{"class":231},"source",[144,2807,2808],{"class":235}," ===",[144,2810,294],{"class":235},[144,2812,2813],{"class":153},"client",[144,2815,252],{"class":235},[144,2817,1523],{"class":242},[144,2819,236],{"class":235},[144,2821,2822],{"class":146,"line":276},[144,2823,2824],{"class":313},"      // Handle client logs specifically\n",[144,2826,2827,2830,2832,2835,2837,2839,2842,2844,2846,2848,2850,2852],{"class":146,"line":286},[144,2828,2829],{"class":231},"      console",[144,2831,1187],{"class":235},[144,2833,2834],{"class":227},"log",[144,2836,232],{"class":242},[144,2838,252],{"class":235},[144,2840,2841],{"class":153},"[CLIENT]",[144,2843,252],{"class":235},[144,2845,694],{"class":235},[144,2847,1461],{"class":231},[144,2849,1187],{"class":235},[144,2851,1765],{"class":231},[144,2853,377],{"class":242},[144,2855,2856],{"class":146,"line":304},[144,2857,1546],{"class":235},[144,2859,2860],{"class":146,"line":310},[144,2861,2862],{"class":313},"    // Send to external service...\n",[144,2864,2865,2867],{"class":146,"line":317},[144,2866,1551],{"class":235},[144,2868,377],{"class":242},[144,2870,2871,2873],{"class":146,"line":338},[144,2872,374],{"class":235},[144,2874,377],{"class":231},[781,2876,2878,2888],{"color":783,"icon":2877},"i-lucide-lightbulb",[118,2879,2880,2883,2884,2887],{},[785,2881,2882],{},"Tip:"," Use Nuxt's ",[141,2885,2886],{},"$production"," override to sample only in production while keeping full visibility in development:",[133,2889,2891],{"className":210,"code":2890,"filename":212,"language":213,"meta":139,"style":139},"export default defineNuxtConfig({\n  modules: ['evlog/nuxt'],\n  evlog: {\n    env: { service: 'my-app' },\n  },\n  $production: {\n    evlog: {\n      sampling: {\n        rates: { info: 10, warn: 50, debug: 0 },\n        keep: [{ duration: 1000 }, { status: 400 }],\n      },\n    },\n  },\n})\n",[141,2892,2893,2905,2923,2931,2951,2955,2964,2973,2982,3018,3052,3056,3060,3064],{"__ignoreMap":139},[144,2894,2895,2897,2899,2901,2903],{"class":146,"line":147},[144,2896,221],{"class":220},[144,2898,224],{"class":220},[144,2900,228],{"class":227},[144,2902,232],{"class":231},[144,2904,236],{"class":235},[144,2906,2907,2909,2911,2913,2915,2917,2919,2921],{"class":146,"line":239},[144,2908,243],{"class":242},[144,2910,246],{"class":235},[144,2912,249],{"class":231},[144,2914,252],{"class":235},[144,2916,206],{"class":153},[144,2918,252],{"class":235},[144,2920,259],{"class":231},[144,2922,262],{"class":235},[144,2924,2925,2927,2929],{"class":146,"line":265},[144,2926,268],{"class":242},[144,2928,246],{"class":235},[144,2930,273],{"class":235},[144,2932,2933,2935,2937,2939,2941,2943,2945,2947,2949],{"class":146,"line":276},[144,2934,279],{"class":242},[144,2936,246],{"class":235},[144,2938,896],{"class":235},[144,2940,899],{"class":242},[144,2942,246],{"class":235},[144,2944,294],{"class":235},[144,2946,297],{"class":153},[144,2948,252],{"class":235},[144,2950,911],{"class":235},[144,2952,2953],{"class":146,"line":286},[144,2954,368],{"class":235},[144,2956,2957,2960,2962],{"class":146,"line":304},[144,2958,2959],{"class":242},"  $production",[144,2961,246],{"class":235},[144,2963,273],{"class":235},[144,2965,2966,2969,2971],{"class":146,"line":310},[144,2967,2968],{"class":242},"    evlog",[144,2970,246],{"class":235},[144,2972,273],{"class":235},[144,2974,2975,2978,2980],{"class":146,"line":317},[144,2976,2977],{"class":242},"      sampling",[144,2979,246],{"class":235},[144,2981,273],{"class":235},[144,2983,2984,2987,2989,2991,2993,2995,2997,2999,3002,3004,3006,3008,3011,3013,3016],{"class":146,"line":338},[144,2985,2986],{"class":242},"        rates",[144,2988,246],{"class":235},[144,2990,896],{"class":235},[144,2992,1260],{"class":242},[144,2994,246],{"class":235},[144,2996,1103],{"class":1102},[144,2998,694],{"class":235},[144,3000,3001],{"class":242}," warn",[144,3003,246],{"class":235},[144,3005,1118],{"class":1102},[144,3007,694],{"class":235},[144,3009,3010],{"class":242}," debug",[144,3012,246],{"class":235},[144,3014,3015],{"class":1102}," 0",[144,3017,911],{"class":235},[144,3019,3020,3023,3025,3027,3030,3032,3034,3036,3038,3040,3042,3044,3046,3048,3050],{"class":146,"line":344},[144,3021,3022],{"class":242},"        keep",[144,3024,246],{"class":235},[144,3026,249],{"class":231},[144,3028,3029],{"class":235},"{",[144,3031,1287],{"class":242},[144,3033,246],{"class":235},[144,3035,1292],{"class":1102},[144,3037,1267],{"class":235},[144,3039,896],{"class":235},[144,3041,1304],{"class":242},[144,3043,246],{"class":235},[144,3045,1309],{"class":1102},[144,3047,1488],{"class":235},[144,3049,259],{"class":231},[144,3051,262],{"class":235},[144,3053,3054],{"class":146,"line":365},[144,3055,1158],{"class":235},[144,3057,3058],{"class":146,"line":371},[144,3059,307],{"class":235},[144,3061,3062],{"class":146,"line":775},[144,3063,368],{"class":235},[144,3065,3066,3068],{"class":146,"line":2053},[144,3067,374],{"class":235},[144,3069,377],{"class":231},[118,3071,3072,3073,3076],{},"That's it! You can now use ",[141,3074,3075],{},"useLogger(event)"," in any API route.",[122,3078,3080],{"id":3079},"nitro","Nitro",[118,3082,128],{},[130,3084,3085,3097,3109,3121],{},[133,3086,3087],{"className":135,"code":136,"filename":137,"language":138,"meta":139,"style":139},[141,3088,3089],{"__ignoreMap":139},[144,3090,3091,3093,3095],{"class":146,"line":147},[144,3092,137],{"class":150},[144,3094,154],{"class":153},[144,3096,157],{"class":153},[133,3098,3099],{"className":135,"code":160,"filename":161,"language":138,"meta":139,"style":139},[141,3100,3101],{"__ignoreMap":139},[144,3102,3103,3105,3107],{"class":146,"line":147},[144,3104,161],{"class":150},[144,3106,170],{"class":153},[144,3108,157],{"class":153},[133,3110,3111],{"className":135,"code":175,"filename":176,"language":138,"meta":139,"style":139},[141,3112,3113],{"__ignoreMap":139},[144,3114,3115,3117,3119],{"class":146,"line":147},[144,3116,176],{"class":150},[144,3118,154],{"class":153},[144,3120,157],{"class":153},[133,3122,3123],{"className":135,"code":189,"filename":190,"language":138,"meta":139,"style":139},[141,3124,3125],{"__ignoreMap":139},[144,3126,3127,3129,3131],{"class":146,"line":147},[144,3128,190],{"class":150},[144,3130,154],{"class":153},[144,3132,157],{"class":153},[118,3134,3135,3136,3139],{},"Then, add evlog as a Nitro plugin (without Nuxt) using the ",[141,3137,3138],{},"evlog/nitro"," plugin:",[133,3141,3144],{"className":210,"code":3142,"filename":3143,"language":213,"meta":139,"style":139},"export default defineNitroConfig({\n  plugins: ['evlog/nitro'],\n})\n","nitro.config.ts",[141,3145,3146,3159,3178],{"__ignoreMap":139},[144,3147,3148,3150,3152,3155,3157],{"class":146,"line":147},[144,3149,221],{"class":220},[144,3151,224],{"class":220},[144,3153,3154],{"class":227}," defineNitroConfig",[144,3156,232],{"class":231},[144,3158,236],{"class":235},[144,3160,3161,3164,3166,3168,3170,3172,3174,3176],{"class":146,"line":239},[144,3162,3163],{"class":242},"  plugins",[144,3165,246],{"class":235},[144,3167,249],{"class":231},[144,3169,252],{"class":235},[144,3171,3138],{"class":153},[144,3173,252],{"class":235},[144,3175,259],{"class":231},[144,3177,262],{"class":235},[144,3179,3180,3182],{"class":146,"line":265},[144,3181,374],{"class":235},[144,3183,377],{"class":231},[122,3185,3187],{"id":3186},"cloudflare-workers","Cloudflare Workers",[118,3189,3190],{},"Use the Workers adapter for structured logs and correct platform severity.",[133,3192,3195],{"className":210,"code":3193,"filename":3194,"language":213,"meta":139,"style":139},"import { initWorkersLogger, createWorkersLogger } from 'evlog/workers'\n\ninitWorkersLogger({\n  env: { service: 'edge-api' },\n})\n\nexport default {\n  async fetch(request: Request) {\n    const log = createWorkersLogger(request)\n\n    try {\n      log.set({ route: 'health' })\n      const response = new Response('ok', { status: 200 })\n      log.emit({ status: response.status })\n      return response\n    } catch (error) {\n      log.error(error as Error)\n      log.emit({ status: 500 })\n      throw error\n    }\n  },\n}\n","src/index.ts",[141,3196,3197,3222,3226,3235,3257,3263,3267,3275,3295,3312,3316,3323,3353,3393,3420,3428,3444,3463,3486,3494,3498,3502],{"__ignoreMap":139},[144,3198,3199,3201,3203,3206,3208,3211,3213,3215,3217,3220],{"class":146,"line":147},[144,3200,2176],{"class":220},[144,3202,896],{"class":235},[144,3204,3205],{"class":231}," initWorkersLogger",[144,3207,694],{"class":235},[144,3209,3210],{"class":231}," createWorkersLogger",[144,3212,1488],{"class":235},[144,3214,2213],{"class":220},[144,3216,294],{"class":235},[144,3218,3219],{"class":153},"evlog/workers",[144,3221,2221],{"class":235},[144,3223,3224],{"class":146,"line":239},[144,3225,1500],{"emptyLinePlaceholder":1499},[144,3227,3228,3231,3233],{"class":146,"line":265},[144,3229,3230],{"class":227},"initWorkersLogger",[144,3232,232],{"class":231},[144,3234,236],{"class":235},[144,3236,3237,3240,3242,3244,3246,3248,3250,3253,3255],{"class":146,"line":276},[144,3238,3239],{"class":242},"  env",[144,3241,246],{"class":235},[144,3243,896],{"class":235},[144,3245,899],{"class":242},[144,3247,246],{"class":235},[144,3249,294],{"class":235},[144,3251,3252],{"class":153},"edge-api",[144,3254,252],{"class":235},[144,3256,911],{"class":235},[144,3258,3259,3261],{"class":146,"line":286},[144,3260,374],{"class":235},[144,3262,377],{"class":231},[144,3264,3265],{"class":146,"line":304},[144,3266,1500],{"emptyLinePlaceholder":1499},[144,3268,3269,3271,3273],{"class":146,"line":310},[144,3270,221],{"class":220},[144,3272,224],{"class":220},[144,3274,273],{"class":235},[144,3276,3277,3280,3282,3284,3286,3288,3291,3293],{"class":146,"line":317},[144,3278,3279],{"class":1402},"  async",[144,3281,1670],{"class":242},[144,3283,232],{"class":235},[144,3285,1811],{"class":1396},[144,3287,246],{"class":235},[144,3289,3290],{"class":150}," Request",[144,3292,1001],{"class":235},[144,3294,273],{"class":235},[144,3296,3297,3299,3302,3304,3306,3308,3310],{"class":146,"line":338},[144,3298,1452],{"class":1402},[144,3300,3301],{"class":231}," log",[144,3303,1458],{"class":235},[144,3305,3210],{"class":227},[144,3307,232],{"class":242},[144,3309,1811],{"class":231},[144,3311,377],{"class":242},[144,3313,3314],{"class":146,"line":344},[144,3315,1500],{"emptyLinePlaceholder":1499},[144,3317,3318,3321],{"class":146,"line":365},[144,3319,3320],{"class":220},"    try",[144,3322,273],{"class":235},[144,3324,3325,3328,3330,3333,3335,3337,3340,3342,3344,3347,3349,3351],{"class":146,"line":371},[144,3326,3327],{"class":231},"      log",[144,3329,1187],{"class":235},[144,3331,3332],{"class":227},"set",[144,3334,232],{"class":242},[144,3336,3029],{"class":235},[144,3338,3339],{"class":242}," route",[144,3341,246],{"class":235},[144,3343,294],{"class":235},[144,3345,3346],{"class":153},"health",[144,3348,252],{"class":235},[144,3350,1488],{"class":235},[144,3352,377],{"class":242},[144,3354,3355,3358,3361,3363,3366,3369,3371,3373,3376,3378,3380,3382,3384,3386,3389,3391],{"class":146,"line":775},[144,3356,3357],{"class":1402},"      const",[144,3359,3360],{"class":231}," response",[144,3362,1458],{"class":235},[144,3364,3365],{"class":235}," new",[144,3367,3368],{"class":227}," Response",[144,3370,232],{"class":242},[144,3372,252],{"class":235},[144,3374,3375],{"class":153},"ok",[144,3377,252],{"class":235},[144,3379,694],{"class":235},[144,3381,896],{"class":235},[144,3383,1304],{"class":242},[144,3385,246],{"class":235},[144,3387,3388],{"class":1102}," 200",[144,3390,1488],{"class":235},[144,3392,377],{"class":242},[144,3394,3395,3397,3399,3402,3404,3406,3408,3410,3412,3414,3416,3418],{"class":146,"line":2053},[144,3396,3327],{"class":231},[144,3398,1187],{"class":235},[144,3400,3401],{"class":227},"emit",[144,3403,232],{"class":242},[144,3405,3029],{"class":235},[144,3407,1304],{"class":242},[144,3409,246],{"class":235},[144,3411,3360],{"class":231},[144,3413,1187],{"class":235},[144,3415,1569],{"class":231},[144,3417,1488],{"class":235},[144,3419,377],{"class":242},[144,3421,3422,3425],{"class":146,"line":2059},[144,3423,3424],{"class":220},"      return",[144,3426,3427],{"class":231}," response\n",[144,3429,3430,3432,3435,3437,3440,3442],{"class":146,"line":2074},[144,3431,1775],{"class":235},[144,3433,3434],{"class":220}," catch",[144,3436,1433],{"class":242},[144,3438,3439],{"class":231},"error",[144,3441,1523],{"class":242},[144,3443,236],{"class":235},[144,3445,3446,3448,3450,3452,3454,3456,3458,3461],{"class":146,"line":2082},[144,3447,3327],{"class":231},[144,3449,1187],{"class":235},[144,3451,3439],{"class":227},[144,3453,232],{"class":242},[144,3455,3439],{"class":231},[144,3457,1474],{"class":220},[144,3459,3460],{"class":150}," Error",[144,3462,377],{"class":242},[144,3464,3465,3467,3469,3471,3473,3475,3477,3479,3482,3484],{"class":146,"line":2099},[144,3466,3327],{"class":231},[144,3468,1187],{"class":235},[144,3470,3401],{"class":227},[144,3472,232],{"class":242},[144,3474,3029],{"class":235},[144,3476,1304],{"class":242},[144,3478,246],{"class":235},[144,3480,3481],{"class":1102}," 500",[144,3483,1488],{"class":235},[144,3485,377],{"class":242},[144,3487,3488,3491],{"class":146,"line":2109},[144,3489,3490],{"class":220},"      throw",[144,3492,3493],{"class":231}," error\n",[144,3495,3496],{"class":146,"line":2123},[144,3497,1546],{"class":235},[144,3499,3500],{"class":146,"line":2135},[144,3501,368],{"class":235},[144,3503,3504],{"class":146,"line":2140},[144,3505,3506],{"class":235},"}\n",[118,3508,3509],{},"Disable invocation logs to avoid duplicate request logs:",[133,3511,3516],{"className":3512,"code":3513,"filename":3514,"language":3515,"meta":139,"style":139},"language-toml shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","[observability.logs]\ninvocation_logs = false\n","wrangler.toml","toml",[141,3517,3518,3523],{"__ignoreMap":139},[144,3519,3520],{"class":146,"line":147},[144,3521,3522],{},"[observability.logs]\n",[144,3524,3525],{"class":146,"line":239},[144,3526,3527],{},"invocation_logs = false\n",[118,3529,3530],{},"Notes:",[982,3532,3533,3542,3548],{},[985,3534,3535,3537,3538,3541],{},[141,3536,1819],{}," defaults to ",[141,3539,3540],{},"cf-ray"," when available",[985,3543,3544,3547],{},[141,3545,3546],{},"request.cf"," is included (colo, country, asn) unless disabled",[985,3549,623,3550,3553],{},[141,3551,3552],{},"headerAllowlist"," to avoid logging sensitive headers",[781,3555,3558,3559,3565],{"color":3556,"icon":3557},"neutral","i-lucide-arrow-right","See the full ",[550,3560,3564],{"href":3561,"rel":3562},"https://github.com/HugoRCD/evlog/tree/main/examples/workers",[3563],"nofollow","workers example"," for a complete working project.",[122,3567,3569],{"id":3568},"standalone-typescript","Standalone TypeScript",[118,3571,128],{},[130,3573,3574,3586,3598,3610],{},[133,3575,3576],{"className":135,"code":136,"filename":137,"language":138,"meta":139,"style":139},[141,3577,3578],{"__ignoreMap":139},[144,3579,3580,3582,3584],{"class":146,"line":147},[144,3581,137],{"class":150},[144,3583,154],{"class":153},[144,3585,157],{"class":153},[133,3587,3588],{"className":135,"code":160,"filename":161,"language":138,"meta":139,"style":139},[141,3589,3590],{"__ignoreMap":139},[144,3591,3592,3594,3596],{"class":146,"line":147},[144,3593,161],{"class":150},[144,3595,170],{"class":153},[144,3597,157],{"class":153},[133,3599,3600],{"className":135,"code":175,"filename":176,"language":138,"meta":139,"style":139},[141,3601,3602],{"__ignoreMap":139},[144,3603,3604,3606,3608],{"class":146,"line":147},[144,3605,176],{"class":150},[144,3607,154],{"class":153},[144,3609,157],{"class":153},[133,3611,3612],{"className":135,"code":189,"filename":190,"language":138,"meta":139,"style":139},[141,3613,3614],{"__ignoreMap":139},[144,3615,3616,3618,3620],{"class":146,"line":147},[144,3617,190],{"class":150},[144,3619,154],{"class":153},[144,3621,157],{"class":153},[118,3623,3624],{},"Then, use it as any other TypeScript library within your scripts, CLI tools, workers, or apps:",[133,3626,3629],{"className":210,"code":3627,"filename":3628,"language":213,"meta":139,"style":139},"import { initLogger, createRequestLogger } from 'evlog'\n\n// Initialize once at startup\ninitLogger({\n  env: {\n    service: 'my-worker',\n    environment: 'production',\n  },\n  // Optional: sample logs\n  sampling: {\n    rates: { info: 10, debug: 5 },\n  },\n})\n\n// Create a logger for each operation\nconst log = createRequestLogger({ jobId: job.id })\nlog.set({ source: job.source, target: job.target })\nlog.set({ recordsSynced: 150 })\nlog.emit() // Manual emit required in standalone mode\n","scripts/sync-job.ts",[141,3630,3631,3656,3660,3665,3674,3682,3698,3714,3718,3723,3732,3757,3761,3767,3771,3776,3809,3850,3874],{"__ignoreMap":139},[144,3632,3633,3635,3637,3640,3642,3645,3647,3649,3651,3654],{"class":146,"line":147},[144,3634,2176],{"class":220},[144,3636,896],{"class":235},[144,3638,3639],{"class":231}," initLogger",[144,3641,694],{"class":235},[144,3643,3644],{"class":231}," createRequestLogger",[144,3646,1488],{"class":235},[144,3648,2213],{"class":220},[144,3650,294],{"class":235},[144,3652,3653],{"class":153},"evlog",[144,3655,2221],{"class":235},[144,3657,3658],{"class":146,"line":239},[144,3659,1500],{"emptyLinePlaceholder":1499},[144,3661,3662],{"class":146,"line":265},[144,3663,3664],{"class":313},"// Initialize once at startup\n",[144,3666,3667,3670,3672],{"class":146,"line":276},[144,3668,3669],{"class":227},"initLogger",[144,3671,232],{"class":231},[144,3673,236],{"class":235},[144,3675,3676,3678,3680],{"class":146,"line":286},[144,3677,3239],{"class":242},[144,3679,246],{"class":235},[144,3681,273],{"class":235},[144,3683,3684,3687,3689,3691,3694,3696],{"class":146,"line":304},[144,3685,3686],{"class":242},"    service",[144,3688,246],{"class":235},[144,3690,294],{"class":235},[144,3692,3693],{"class":153},"my-worker",[144,3695,252],{"class":235},[144,3697,262],{"class":235},[144,3699,3700,3703,3705,3707,3710,3712],{"class":146,"line":310},[144,3701,3702],{"class":242},"    environment",[144,3704,246],{"class":235},[144,3706,294],{"class":235},[144,3708,3709],{"class":153},"production",[144,3711,252],{"class":235},[144,3713,262],{"class":235},[144,3715,3716],{"class":146,"line":317},[144,3717,368],{"class":235},[144,3719,3720],{"class":146,"line":338},[144,3721,3722],{"class":313},"  // Optional: sample logs\n",[144,3724,3725,3728,3730],{"class":146,"line":344},[144,3726,3727],{"class":242},"  sampling",[144,3729,246],{"class":235},[144,3731,273],{"class":235},[144,3733,3734,3737,3739,3741,3743,3745,3747,3749,3751,3753,3755],{"class":146,"line":365},[144,3735,3736],{"class":242},"    rates",[144,3738,246],{"class":235},[144,3740,896],{"class":235},[144,3742,1260],{"class":242},[144,3744,246],{"class":235},[144,3746,1103],{"class":1102},[144,3748,694],{"class":235},[144,3750,3010],{"class":242},[144,3752,246],{"class":235},[144,3754,1133],{"class":1102},[144,3756,911],{"class":235},[144,3758,3759],{"class":146,"line":371},[144,3760,368],{"class":235},[144,3762,3763,3765],{"class":146,"line":775},[144,3764,374],{"class":235},[144,3766,377],{"class":231},[144,3768,3769],{"class":146,"line":2053},[144,3770,1500],{"emptyLinePlaceholder":1499},[144,3772,3773],{"class":146,"line":2059},[144,3774,3775],{"class":313},"// Create a logger for each operation\n",[144,3777,3778,3780,3783,3786,3788,3790,3792,3795,3797,3800,3802,3805,3807],{"class":146,"line":2074},[144,3779,2345],{"class":1402},[144,3781,3782],{"class":231}," log ",[144,3784,3785],{"class":235},"=",[144,3787,3644],{"class":227},[144,3789,232],{"class":231},[144,3791,3029],{"class":235},[144,3793,3794],{"class":242}," jobId",[144,3796,246],{"class":235},[144,3798,3799],{"class":231}," job",[144,3801,1187],{"class":235},[144,3803,3804],{"class":231},"id ",[144,3806,374],{"class":235},[144,3808,377],{"class":231},[144,3810,3811,3813,3815,3817,3819,3821,3824,3826,3828,3830,3832,3834,3837,3839,3841,3843,3846,3848],{"class":146,"line":2082},[144,3812,2834],{"class":231},[144,3814,1187],{"class":235},[144,3816,3332],{"class":227},[144,3818,232],{"class":231},[144,3820,3029],{"class":235},[144,3822,3823],{"class":242}," source",[144,3825,246],{"class":235},[144,3827,3799],{"class":231},[144,3829,1187],{"class":235},[144,3831,2805],{"class":231},[144,3833,694],{"class":235},[144,3835,3836],{"class":242}," target",[144,3838,246],{"class":235},[144,3840,3799],{"class":231},[144,3842,1187],{"class":235},[144,3844,3845],{"class":231},"target ",[144,3847,374],{"class":235},[144,3849,377],{"class":231},[144,3851,3852,3854,3856,3858,3860,3862,3865,3867,3870,3872],{"class":146,"line":2099},[144,3853,2834],{"class":231},[144,3855,1187],{"class":235},[144,3857,3332],{"class":227},[144,3859,232],{"class":231},[144,3861,3029],{"class":235},[144,3863,3864],{"class":242}," recordsSynced",[144,3866,246],{"class":235},[144,3868,3869],{"class":1102}," 150",[144,3871,1488],{"class":235},[144,3873,377],{"class":231},[144,3875,3876,3878,3880,3882,3885],{"class":146,"line":2109},[144,3877,2834],{"class":231},[144,3879,1187],{"class":235},[144,3881,3401],{"class":227},[144,3883,3884],{"class":231},"() ",[144,3886,3887],{"class":313},"// Manual emit required in standalone mode\n",[781,3889,3890,3891,3894],{"color":783,"icon":13},"In standalone mode, you must call ",[141,3892,3893],{},"log.emit()"," manually. In Nuxt/Nitro, this happens automatically at request end.",[379,3896,3898],{"id":3897},"draining-logs-to-external-services","Draining Logs to External Services",[118,3900,3901,3902,3905,3906,3908,3909,3912,3913,3916],{},"Use the ",[141,3903,3904],{},"drain"," option in ",[141,3907,3669],{}," to automatically send every emitted event to an external service. This works with all built-in ",[550,3910,3911],{"href":61},"adapters"," and the ",[550,3914,3915],{"href":91},"pipeline"," for batching and retry.",[133,3918,3920],{"className":210,"code":3919,"filename":3628,"language":213,"meta":139,"style":139},"import type { DrainContext } from 'evlog'\nimport { initLogger, log, createRequestLogger } from 'evlog'\nimport { createAxiomDrain } from 'evlog/axiom'\nimport { createDrainPipeline } from 'evlog/pipeline'\n\nconst pipeline = createDrainPipeline\u003CDrainContext>({ batch: { size: 10 } })\nconst drain = pipeline(createAxiomDrain())\n\ninitLogger({\n  env: { service: 'my-script', environment: 'production' },\n  drain,\n})\n\n// Every log is automatically drained\nlog.info({ action: 'sync_started' })\n\nconst reqLog = createRequestLogger({ method: 'POST', path: '/sync' })\nreqLog.set({ recordsSynced: 150 })\nreqLog.emit() // drained automatically\n\n// Flush remaining events before exit\nawait drain.flush()\n",[141,3921,3922,3944,3970,3990,4010,4014,4057,4077,4081,4089,4123,4130,4136,4140,4145,4173,4177,4220,4243,4256,4260,4265],{"__ignoreMap":139},[144,3923,3924,3926,3929,3931,3934,3936,3938,3940,3942],{"class":146,"line":147},[144,3925,2176],{"class":220},[144,3927,3928],{"class":220}," type",[144,3930,896],{"class":235},[144,3932,3933],{"class":231}," DrainContext",[144,3935,1488],{"class":235},[144,3937,2213],{"class":220},[144,3939,294],{"class":235},[144,3941,3653],{"class":153},[144,3943,2221],{"class":235},[144,3945,3946,3948,3950,3952,3954,3956,3958,3960,3962,3964,3966,3968],{"class":146,"line":239},[144,3947,2176],{"class":220},[144,3949,896],{"class":235},[144,3951,3639],{"class":231},[144,3953,694],{"class":235},[144,3955,3301],{"class":231},[144,3957,694],{"class":235},[144,3959,3644],{"class":231},[144,3961,1488],{"class":235},[144,3963,2213],{"class":220},[144,3965,294],{"class":235},[144,3967,3653],{"class":153},[144,3969,2221],{"class":235},[144,3971,3972,3974,3976,3979,3981,3983,3985,3988],{"class":146,"line":265},[144,3973,2176],{"class":220},[144,3975,896],{"class":235},[144,3977,3978],{"class":231}," createAxiomDrain",[144,3980,1488],{"class":235},[144,3982,2213],{"class":220},[144,3984,294],{"class":235},[144,3986,3987],{"class":153},"evlog/axiom",[144,3989,2221],{"class":235},[144,3991,3992,3994,3996,3999,4001,4003,4005,4008],{"class":146,"line":276},[144,3993,2176],{"class":220},[144,3995,896],{"class":235},[144,3997,3998],{"class":231}," createDrainPipeline",[144,4000,1488],{"class":235},[144,4002,2213],{"class":220},[144,4004,294],{"class":235},[144,4006,4007],{"class":153},"evlog/pipeline",[144,4009,2221],{"class":235},[144,4011,4012],{"class":146,"line":286},[144,4013,1500],{"emptyLinePlaceholder":1499},[144,4015,4016,4018,4021,4023,4025,4028,4030,4033,4035,4037,4040,4042,4044,4047,4049,4051,4053,4055],{"class":146,"line":304},[144,4017,2345],{"class":1402},[144,4019,4020],{"class":231}," pipeline ",[144,4022,3785],{"class":235},[144,4024,3998],{"class":227},[144,4026,4027],{"class":235},"\u003C",[144,4029,1794],{"class":150},[144,4031,4032],{"class":235},">",[144,4034,232],{"class":231},[144,4036,3029],{"class":235},[144,4038,4039],{"class":242}," batch",[144,4041,246],{"class":235},[144,4043,896],{"class":235},[144,4045,4046],{"class":242}," size",[144,4048,246],{"class":235},[144,4050,1103],{"class":1102},[144,4052,1488],{"class":235},[144,4054,1488],{"class":235},[144,4056,377],{"class":231},[144,4058,4059,4061,4064,4066,4069,4071,4074],{"class":146,"line":310},[144,4060,2345],{"class":1402},[144,4062,4063],{"class":231}," drain ",[144,4065,3785],{"class":235},[144,4067,4068],{"class":227}," pipeline",[144,4070,232],{"class":231},[144,4072,4073],{"class":227},"createAxiomDrain",[144,4075,4076],{"class":231},"())\n",[144,4078,4079],{"class":146,"line":317},[144,4080,1500],{"emptyLinePlaceholder":1499},[144,4082,4083,4085,4087],{"class":146,"line":338},[144,4084,3669],{"class":227},[144,4086,232],{"class":231},[144,4088,236],{"class":235},[144,4090,4091,4093,4095,4097,4099,4101,4103,4106,4108,4110,4113,4115,4117,4119,4121],{"class":146,"line":344},[144,4092,3239],{"class":242},[144,4094,246],{"class":235},[144,4096,896],{"class":235},[144,4098,899],{"class":242},[144,4100,246],{"class":235},[144,4102,294],{"class":235},[144,4104,4105],{"class":153},"my-script",[144,4107,252],{"class":235},[144,4109,694],{"class":235},[144,4111,4112],{"class":242}," environment",[144,4114,246],{"class":235},[144,4116,294],{"class":235},[144,4118,3709],{"class":153},[144,4120,252],{"class":235},[144,4122,911],{"class":235},[144,4124,4125,4128],{"class":146,"line":365},[144,4126,4127],{"class":231},"  drain",[144,4129,262],{"class":235},[144,4131,4132,4134],{"class":146,"line":371},[144,4133,374],{"class":235},[144,4135,377],{"class":231},[144,4137,4138],{"class":146,"line":775},[144,4139,1500],{"emptyLinePlaceholder":1499},[144,4141,4142],{"class":146,"line":2053},[144,4143,4144],{"class":313},"// Every log is automatically drained\n",[144,4146,4147,4149,4151,4153,4155,4157,4160,4162,4164,4167,4169,4171],{"class":146,"line":2059},[144,4148,2834],{"class":231},[144,4150,1187],{"class":235},[144,4152,783],{"class":227},[144,4154,232],{"class":231},[144,4156,3029],{"class":235},[144,4158,4159],{"class":242}," action",[144,4161,246],{"class":235},[144,4163,294],{"class":235},[144,4165,4166],{"class":153},"sync_started",[144,4168,252],{"class":235},[144,4170,1488],{"class":235},[144,4172,377],{"class":231},[144,4174,4175],{"class":146,"line":2074},[144,4176,1500],{"emptyLinePlaceholder":1499},[144,4178,4179,4181,4184,4186,4188,4190,4192,4195,4197,4199,4201,4203,4205,4207,4209,4211,4214,4216,4218],{"class":146,"line":2082},[144,4180,2345],{"class":1402},[144,4182,4183],{"class":231}," reqLog ",[144,4185,3785],{"class":235},[144,4187,3644],{"class":227},[144,4189,232],{"class":231},[144,4191,3029],{"class":235},[144,4193,4194],{"class":242}," method",[144,4196,246],{"class":235},[144,4198,294],{"class":235},[144,4200,1695],{"class":153},[144,4202,252],{"class":235},[144,4204,694],{"class":235},[144,4206,1321],{"class":242},[144,4208,246],{"class":235},[144,4210,294],{"class":235},[144,4212,4213],{"class":153},"/sync",[144,4215,252],{"class":235},[144,4217,1488],{"class":235},[144,4219,377],{"class":231},[144,4221,4222,4225,4227,4229,4231,4233,4235,4237,4239,4241],{"class":146,"line":2099},[144,4223,4224],{"class":231},"reqLog",[144,4226,1187],{"class":235},[144,4228,3332],{"class":227},[144,4230,232],{"class":231},[144,4232,3029],{"class":235},[144,4234,3864],{"class":242},[144,4236,246],{"class":235},[144,4238,3869],{"class":1102},[144,4240,1488],{"class":235},[144,4242,377],{"class":231},[144,4244,4245,4247,4249,4251,4253],{"class":146,"line":2109},[144,4246,4224],{"class":231},[144,4248,1187],{"class":235},[144,4250,3401],{"class":227},[144,4252,3884],{"class":231},[144,4254,4255],{"class":313},"// drained automatically\n",[144,4257,4258],{"class":146,"line":2123},[144,4259,1500],{"emptyLinePlaceholder":1499},[144,4261,4262],{"class":146,"line":2135},[144,4263,4264],{"class":313},"// Flush remaining events before exit\n",[144,4266,4267,4270,4273,4275,4278],{"class":146,"line":2140},[144,4268,4269],{"class":220},"await",[144,4271,4272],{"class":231}," drain",[144,4274,1187],{"class":235},[144,4276,4277],{"class":227},"flush",[144,4279,1902],{"class":231},[781,4281,3558,4282,4287],{"color":3556,"icon":3557},[550,4283,4286],{"href":4284,"rel":4285},"https://github.com/HugoRCD/evlog/tree/main/examples/bun-script",[3563],"bun-script example"," for a complete working script.",[122,4289,4291],{"id":4290},"typescript-configuration","TypeScript Configuration",[118,4293,4294],{},"evlog ships with full TypeScript type definitions. No additional configuration is required.",[781,4296,4298],{"color":1175,"icon":4297},"i-lucide-check","evlog requires TypeScript 5.0 or higher for optimal type inference.",[122,4300,4302],{"id":4301},"next-steps","Next Steps",[982,4304,4305],{},[985,4306,4307,4309],{},[550,4308,20],{"href":21}," - Learn the core concepts and start using evlog",[4311,4312,4313],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}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 .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 .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}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}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}",{"title":139,"searchDepth":239,"depth":239,"links":4315},[4316,4325,4326,4327,4330,4331],{"id":124,"depth":239,"text":125,"children":4317},[4318,4319,4320,4321,4322,4323,4324],{"id":381,"depth":265,"text":382},{"id":619,"depth":265,"text":620},{"id":796,"depth":265,"text":797},{"id":1016,"depth":265,"text":553},{"id":1584,"depth":265,"text":1585},{"id":2161,"depth":265,"text":2162},{"id":2562,"depth":265,"text":597},{"id":3079,"depth":239,"text":3080},{"id":3186,"depth":239,"text":3187},{"id":3568,"depth":239,"text":3569,"children":4328},[4329],{"id":3897,"depth":265,"text":3898},{"id":4290,"depth":239,"text":4291},{"id":4301,"depth":239,"text":4302},"Install evlog in your Nuxt, Nitro, Cloudflare Workers, or standalone TypeScript project. Configure sampling, log draining, and client transport.","md",[4335],{"label":20,"icon":23,"to":21,"color":3556,"variant":4336},"subtle",{},{"title":15,"icon":18},{"title":113,"description":4332},"v_GlE0HFiwH2WA8YjgWCcl98yzhehAj5t2lMG_kmgM8",[4342,4344],{"title":10,"path":11,"stem":12,"description":4343,"icon":13,"children":-1},"A TypeScript logging library focused on wide events and structured error handling. Replace scattered logs with one comprehensive event per request.",{"title":20,"path":21,"stem":22,"description":4345,"icon":23,"children":-1},"Get up and running with evlog in minutes. Learn useLogger, createError, parseError, and the log API for wide events and structured errors.",1770759838274]