[{"data":1,"prerenderedAt":6194},["ShallowReactive",2],{"navigation_docs":3,"-getting-started-installation":122,"-getting-started-installation-surround":6189},[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":6180,"extension":6181,"links":6182,"meta":6185,"navigation":6186,"path":16,"seo":6187,"stem":17,"__hash__":6188},"docs/1.getting-started/2.installation.md","Install evlog",{"type":126,"value":127,"toc":6157},"minimark",[128,132,137,209,213,218,221,337,352,356,363,492,498,652,656,662,772,776,906,931,935,938,1274,1277,1295,1298,1325,1338,1342,1345,1835,1842,1846,1849,2056,2063,2068,2086,2450,2458,2462,2469,2680,2695,2699,2706,3089,3100,3104,3107,3617,3629,3632,3635,3639,3646,4053,4067,4071,4078,4187,4194,4198,4205,4366,4385,4389,4400,4582,4587,4615,4640,4644,4650,4920,4924,4927,5134,5210,5213,5310,5317,5321,5335,5430,5434,5463,5477,5483,5616,5620,5627,5728,5736,5739,5798,5802,5805,5942,6131,6135,6138,6142,6146,6153],[129,130,131],"p",{},"evlog supports multiple environments: Nuxt, Nitro, Cloudflare Workers, and standalone TypeScript.",[133,134,136],"h2",{"id":135},"install","Install",[138,139,140,166,181,195],"code-group",{},[141,142,148],"pre",{"className":143,"code":144,"filename":145,"language":146,"meta":147,"style":147},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","pnpm add evlog\n","pnpm","bash","",[149,150,151],"code",{"__ignoreMap":147},[152,153,156,159,163],"span",{"class":154,"line":155},"line",1,[152,157,145],{"class":158},"sBMFI",[152,160,162],{"class":161},"sfazB"," add",[152,164,165],{"class":161}," evlog\n",[141,167,170],{"className":143,"code":168,"filename":169,"language":146,"meta":147,"style":147},"npm install evlog\n","npm",[149,171,172],{"__ignoreMap":147},[152,173,174,176,179],{"class":154,"line":155},[152,175,169],{"class":158},[152,177,178],{"class":161}," install",[152,180,165],{"class":161},[141,182,185],{"className":143,"code":183,"filename":184,"language":146,"meta":147,"style":147},"yarn add evlog\n","yarn",[149,186,187],{"__ignoreMap":147},[152,188,189,191,193],{"class":154,"line":155},[152,190,184],{"class":158},[152,192,162],{"class":161},[152,194,165],{"class":161},[141,196,199],{"className":143,"code":197,"filename":198,"language":146,"meta":147,"style":147},"bun add evlog\n","bun",[149,200,201],{"__ignoreMap":147},[152,202,203,205,207],{"class":154,"line":155},[152,204,198],{"class":158},[152,206,162],{"class":161},[152,208,165],{"class":161},[133,210,212],{"id":211},"setup","Setup",[214,215,217],"h3",{"id":216},"nuxt","Nuxt",[129,219,220],{},"Add evlog to your Nuxt config:",[141,222,227],{"className":223,"code":224,"filename":225,"language":226,"meta":147,"style":147},"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  },\n})\n","nuxt.config.ts","typescript",[149,228,229,250,277,288,298,316,322,328],{"__ignoreMap":147},[152,230,231,235,238,242,246],{"class":154,"line":155},[152,232,234],{"class":233},"s7zQu","export",[152,236,237],{"class":233}," default",[152,239,241],{"class":240},"s2Zo4"," defineNuxtConfig",[152,243,245],{"class":244},"sTEyZ","(",[152,247,249],{"class":248},"sMK4o","{\n",[152,251,253,257,260,263,266,269,271,274],{"class":154,"line":252},2,[152,254,256],{"class":255},"swJcz","  modules",[152,258,259],{"class":248},":",[152,261,262],{"class":244}," [",[152,264,265],{"class":248},"'",[152,267,268],{"class":161},"evlog/nuxt",[152,270,265],{"class":248},[152,272,273],{"class":244},"]",[152,275,276],{"class":248},",\n",[152,278,280,283,285],{"class":154,"line":279},3,[152,281,282],{"class":255},"  evlog",[152,284,259],{"class":248},[152,286,287],{"class":248}," {\n",[152,289,291,294,296],{"class":154,"line":290},4,[152,292,293],{"class":255},"    env",[152,295,259],{"class":248},[152,297,287],{"class":248},[152,299,301,304,306,309,312,314],{"class":154,"line":300},5,[152,302,303],{"class":255},"      service",[152,305,259],{"class":248},[152,307,308],{"class":248}," '",[152,310,311],{"class":161},"my-app",[152,313,265],{"class":248},[152,315,276],{"class":248},[152,317,319],{"class":154,"line":318},6,[152,320,321],{"class":248},"    },\n",[152,323,325],{"class":154,"line":324},7,[152,326,327],{"class":248},"  },\n",[152,329,331,334],{"class":154,"line":330},8,[152,332,333],{"class":248},"}",[152,335,336],{"class":244},")\n",[129,338,339,340,343,344,347,348,351],{},"That's it. ",[149,341,342],{},"useLogger",", ",[149,345,346],{},"createError",", and ",[149,349,350],{},"parseError"," are auto-imported.",[214,353,355],{"id":354},"nitro-v3","Nitro v3",[129,357,358,359,362],{},"Register evlog as a Nitro module using the ",[149,360,361],{},"nitro"," package:",[141,364,367],{"className":223,"code":365,"filename":366,"language":226,"meta":147,"style":147},"import { defineConfig } from 'nitro'\nimport evlog from 'evlog/nitro/v3'\n\nexport default defineConfig({\n  modules: [\n    evlog({\n      env: { service: 'my-api' },\n    })\n  ],\n})\n","nitro.config.ts",[149,368,369,393,410,416,428,437,446,470,477,485],{"__ignoreMap":147},[152,370,371,374,377,380,383,386,388,390],{"class":154,"line":155},[152,372,373],{"class":233},"import",[152,375,376],{"class":248}," {",[152,378,379],{"class":244}," defineConfig",[152,381,382],{"class":248}," }",[152,384,385],{"class":233}," from",[152,387,308],{"class":248},[152,389,361],{"class":161},[152,391,392],{"class":248},"'\n",[152,394,395,397,400,403,405,408],{"class":154,"line":252},[152,396,373],{"class":233},[152,398,399],{"class":244}," evlog ",[152,401,402],{"class":233},"from",[152,404,308],{"class":248},[152,406,407],{"class":161},"evlog/nitro/v3",[152,409,392],{"class":248},[152,411,412],{"class":154,"line":279},[152,413,415],{"emptyLinePlaceholder":414},true,"\n",[152,417,418,420,422,424,426],{"class":154,"line":290},[152,419,234],{"class":233},[152,421,237],{"class":233},[152,423,379],{"class":240},[152,425,245],{"class":244},[152,427,249],{"class":248},[152,429,430,432,434],{"class":154,"line":300},[152,431,256],{"class":255},[152,433,259],{"class":248},[152,435,436],{"class":244}," [\n",[152,438,439,442,444],{"class":154,"line":318},[152,440,441],{"class":240},"    evlog",[152,443,245],{"class":244},[152,445,249],{"class":248},[152,447,448,451,453,455,458,460,462,465,467],{"class":154,"line":324},[152,449,450],{"class":255},"      env",[152,452,259],{"class":248},[152,454,376],{"class":248},[152,456,457],{"class":255}," service",[152,459,259],{"class":248},[152,461,308],{"class":248},[152,463,464],{"class":161},"my-api",[152,466,265],{"class":248},[152,468,469],{"class":248}," },\n",[152,471,472,475],{"class":154,"line":330},[152,473,474],{"class":248},"    }",[152,476,336],{"class":244},[152,478,480,483],{"class":154,"line":479},9,[152,481,482],{"class":244},"  ]",[152,484,276],{"class":248},[152,486,488,490],{"class":154,"line":487},10,[152,489,333],{"class":248},[152,491,336],{"class":244},[129,493,494,495,497],{},"Then use ",[149,496,342],{}," in your routes:",[141,499,502],{"className":223,"code":500,"filename":501,"language":226,"meta":147,"style":147},"import { defineHandler } from 'nitro/h3'\nimport { useLogger } from 'evlog/nitro/v3'\n\nexport default defineHandler(async (event) => {\n  const log = useLogger(event)\n  log.set({ action: 'hello' })\n  return { ok: true }\n})\n","routes/api/hello.ts",[149,503,504,524,543,547,576,595,627,646],{"__ignoreMap":147},[152,505,506,508,510,513,515,517,519,522],{"class":154,"line":155},[152,507,373],{"class":233},[152,509,376],{"class":248},[152,511,512],{"class":244}," defineHandler",[152,514,382],{"class":248},[152,516,385],{"class":233},[152,518,308],{"class":248},[152,520,521],{"class":161},"nitro/h3",[152,523,392],{"class":248},[152,525,526,528,530,533,535,537,539,541],{"class":154,"line":252},[152,527,373],{"class":233},[152,529,376],{"class":248},[152,531,532],{"class":244}," useLogger",[152,534,382],{"class":248},[152,536,385],{"class":233},[152,538,308],{"class":248},[152,540,407],{"class":161},[152,542,392],{"class":248},[152,544,545],{"class":154,"line":279},[152,546,415],{"emptyLinePlaceholder":414},[152,548,549,551,553,555,557,561,564,568,571,574],{"class":154,"line":290},[152,550,234],{"class":233},[152,552,237],{"class":233},[152,554,512],{"class":240},[152,556,245],{"class":244},[152,558,560],{"class":559},"spNyl","async",[152,562,563],{"class":248}," (",[152,565,567],{"class":566},"sHdIc","event",[152,569,570],{"class":248},")",[152,572,573],{"class":559}," =>",[152,575,287],{"class":248},[152,577,578,581,584,587,589,591,593],{"class":154,"line":300},[152,579,580],{"class":559},"  const",[152,582,583],{"class":244}," log",[152,585,586],{"class":248}," =",[152,588,532],{"class":240},[152,590,245],{"class":255},[152,592,567],{"class":244},[152,594,336],{"class":255},[152,596,597,600,603,606,608,611,614,616,618,621,623,625],{"class":154,"line":318},[152,598,599],{"class":244},"  log",[152,601,602],{"class":248},".",[152,604,605],{"class":240},"set",[152,607,245],{"class":255},[152,609,610],{"class":248},"{",[152,612,613],{"class":255}," action",[152,615,259],{"class":248},[152,617,308],{"class":248},[152,619,620],{"class":161},"hello",[152,622,265],{"class":248},[152,624,382],{"class":248},[152,626,336],{"class":255},[152,628,629,632,634,637,639,643],{"class":154,"line":324},[152,630,631],{"class":233},"  return",[152,633,376],{"class":248},[152,635,636],{"class":255}," ok",[152,638,259],{"class":248},[152,640,642],{"class":641},"sfNiH"," true",[152,644,645],{"class":248}," }\n",[152,647,648,650],{"class":154,"line":330},[152,649,333],{"class":248},[152,651,336],{"class":244},[214,653,655],{"id":654},"nitro-v2","Nitro v2",[129,657,658,659,259],{},"Same approach with ",[149,660,661],{},"nitropack",[141,663,665],{"className":223,"code":664,"filename":366,"language":226,"meta":147,"style":147},"import { defineNitroConfig } from 'nitropack/config'\nimport evlog from 'evlog/nitro'\n\nexport default defineNitroConfig({\n  modules: [\n    evlog({\n      env: { service: 'my-api' },\n    })\n  ],\n})\n",[149,666,667,687,702,706,718,726,734,754,760,766],{"__ignoreMap":147},[152,668,669,671,673,676,678,680,682,685],{"class":154,"line":155},[152,670,373],{"class":233},[152,672,376],{"class":248},[152,674,675],{"class":244}," defineNitroConfig",[152,677,382],{"class":248},[152,679,385],{"class":233},[152,681,308],{"class":248},[152,683,684],{"class":161},"nitropack/config",[152,686,392],{"class":248},[152,688,689,691,693,695,697,700],{"class":154,"line":252},[152,690,373],{"class":233},[152,692,399],{"class":244},[152,694,402],{"class":233},[152,696,308],{"class":248},[152,698,699],{"class":161},"evlog/nitro",[152,701,392],{"class":248},[152,703,704],{"class":154,"line":279},[152,705,415],{"emptyLinePlaceholder":414},[152,707,708,710,712,714,716],{"class":154,"line":290},[152,709,234],{"class":233},[152,711,237],{"class":233},[152,713,675],{"class":240},[152,715,245],{"class":244},[152,717,249],{"class":248},[152,719,720,722,724],{"class":154,"line":300},[152,721,256],{"class":255},[152,723,259],{"class":248},[152,725,436],{"class":244},[152,727,728,730,732],{"class":154,"line":318},[152,729,441],{"class":240},[152,731,245],{"class":244},[152,733,249],{"class":248},[152,735,736,738,740,742,744,746,748,750,752],{"class":154,"line":324},[152,737,450],{"class":255},[152,739,259],{"class":248},[152,741,376],{"class":248},[152,743,457],{"class":255},[152,745,259],{"class":248},[152,747,308],{"class":248},[152,749,464],{"class":161},[152,751,265],{"class":248},[152,753,469],{"class":248},[152,755,756,758],{"class":154,"line":330},[152,757,474],{"class":248},[152,759,336],{"class":244},[152,761,762,764],{"class":154,"line":479},[152,763,482],{"class":244},[152,765,276],{"class":248},[152,767,768,770],{"class":154,"line":487},[152,769,333],{"class":248},[152,771,336],{"class":244},[129,773,494,774,497],{},[149,775,342],{},[141,777,779],{"className":223,"code":778,"filename":501,"language":226,"meta":147,"style":147},"import { defineEventHandler } from 'h3'\nimport { useLogger } from 'evlog/nitro'\n\nexport default defineEventHandler(async (event) => {\n  const log = useLogger(event)\n  log.set({ action: 'hello' })\n  return { ok: true }\n})\n",[149,780,781,800,818,822,844,860,886,900],{"__ignoreMap":147},[152,782,783,785,787,790,792,794,796,798],{"class":154,"line":155},[152,784,373],{"class":233},[152,786,376],{"class":248},[152,788,789],{"class":244}," defineEventHandler",[152,791,382],{"class":248},[152,793,385],{"class":233},[152,795,308],{"class":248},[152,797,214],{"class":161},[152,799,392],{"class":248},[152,801,802,804,806,808,810,812,814,816],{"class":154,"line":252},[152,803,373],{"class":233},[152,805,376],{"class":248},[152,807,532],{"class":244},[152,809,382],{"class":248},[152,811,385],{"class":233},[152,813,308],{"class":248},[152,815,699],{"class":161},[152,817,392],{"class":248},[152,819,820],{"class":154,"line":279},[152,821,415],{"emptyLinePlaceholder":414},[152,823,824,826,828,830,832,834,836,838,840,842],{"class":154,"line":290},[152,825,234],{"class":233},[152,827,237],{"class":233},[152,829,789],{"class":240},[152,831,245],{"class":244},[152,833,560],{"class":559},[152,835,563],{"class":248},[152,837,567],{"class":566},[152,839,570],{"class":248},[152,841,573],{"class":559},[152,843,287],{"class":248},[152,845,846,848,850,852,854,856,858],{"class":154,"line":300},[152,847,580],{"class":559},[152,849,583],{"class":244},[152,851,586],{"class":248},[152,853,532],{"class":240},[152,855,245],{"class":255},[152,857,567],{"class":244},[152,859,336],{"class":255},[152,861,862,864,866,868,870,872,874,876,878,880,882,884],{"class":154,"line":318},[152,863,599],{"class":244},[152,865,602],{"class":248},[152,867,605],{"class":240},[152,869,245],{"class":255},[152,871,610],{"class":248},[152,873,613],{"class":255},[152,875,259],{"class":248},[152,877,308],{"class":248},[152,879,620],{"class":161},[152,881,265],{"class":248},[152,883,382],{"class":248},[152,885,336],{"class":255},[152,887,888,890,892,894,896,898],{"class":154,"line":324},[152,889,631],{"class":233},[152,891,376],{"class":248},[152,893,636],{"class":255},[152,895,259],{"class":248},[152,897,642],{"class":641},[152,899,645],{"class":248},[152,901,902,904],{"class":154,"line":330},[152,903,333],{"class":248},[152,905,336],{"class":244},[907,908,910,914,915,917,918,921,922,924,925,927,928,930],"callout",{"color":909,"icon":13},"info",[911,912,913],"strong",{},"Note:"," ",[149,916,346],{}," is always imported from ",[149,919,920],{},"evlog"," regardless of Nitro version. Only the module and ",[149,923,342],{}," imports differ: ",[149,926,407],{}," for v3, ",[149,929,699],{}," for v2.",[214,932,934],{"id":933},"cloudflare-workers","Cloudflare Workers",[129,936,937],{},"Use the Workers adapter for structured logs and correct platform severity.",[141,939,942],{"className":223,"code":940,"filename":941,"language":226,"meta":147,"style":147},"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",[149,943,944,970,974,983,1005,1011,1015,1023,1045,1062,1066,1074,1104,1147,1176,1185,1203,1224,1248,1257,1263,1268],{"__ignoreMap":147},[152,945,946,948,950,953,956,959,961,963,965,968],{"class":154,"line":155},[152,947,373],{"class":233},[152,949,376],{"class":248},[152,951,952],{"class":244}," initWorkersLogger",[152,954,955],{"class":248},",",[152,957,958],{"class":244}," createWorkersLogger",[152,960,382],{"class":248},[152,962,385],{"class":233},[152,964,308],{"class":248},[152,966,967],{"class":161},"evlog/workers",[152,969,392],{"class":248},[152,971,972],{"class":154,"line":252},[152,973,415],{"emptyLinePlaceholder":414},[152,975,976,979,981],{"class":154,"line":279},[152,977,978],{"class":240},"initWorkersLogger",[152,980,245],{"class":244},[152,982,249],{"class":248},[152,984,985,988,990,992,994,996,998,1001,1003],{"class":154,"line":290},[152,986,987],{"class":255},"  env",[152,989,259],{"class":248},[152,991,376],{"class":248},[152,993,457],{"class":255},[152,995,259],{"class":248},[152,997,308],{"class":248},[152,999,1000],{"class":161},"edge-api",[152,1002,265],{"class":248},[152,1004,469],{"class":248},[152,1006,1007,1009],{"class":154,"line":300},[152,1008,333],{"class":248},[152,1010,336],{"class":244},[152,1012,1013],{"class":154,"line":318},[152,1014,415],{"emptyLinePlaceholder":414},[152,1016,1017,1019,1021],{"class":154,"line":324},[152,1018,234],{"class":233},[152,1020,237],{"class":233},[152,1022,287],{"class":248},[152,1024,1025,1028,1031,1033,1036,1038,1041,1043],{"class":154,"line":330},[152,1026,1027],{"class":559},"  async",[152,1029,1030],{"class":255}," fetch",[152,1032,245],{"class":248},[152,1034,1035],{"class":566},"request",[152,1037,259],{"class":248},[152,1039,1040],{"class":158}," Request",[152,1042,570],{"class":248},[152,1044,287],{"class":248},[152,1046,1047,1050,1052,1054,1056,1058,1060],{"class":154,"line":479},[152,1048,1049],{"class":559},"    const",[152,1051,583],{"class":244},[152,1053,586],{"class":248},[152,1055,958],{"class":240},[152,1057,245],{"class":255},[152,1059,1035],{"class":244},[152,1061,336],{"class":255},[152,1063,1064],{"class":154,"line":487},[152,1065,415],{"emptyLinePlaceholder":414},[152,1067,1069,1072],{"class":154,"line":1068},11,[152,1070,1071],{"class":233},"    try",[152,1073,287],{"class":248},[152,1075,1077,1080,1082,1084,1086,1088,1091,1093,1095,1098,1100,1102],{"class":154,"line":1076},12,[152,1078,1079],{"class":244},"      log",[152,1081,602],{"class":248},[152,1083,605],{"class":240},[152,1085,245],{"class":255},[152,1087,610],{"class":248},[152,1089,1090],{"class":255}," route",[152,1092,259],{"class":248},[152,1094,308],{"class":248},[152,1096,1097],{"class":161},"health",[152,1099,265],{"class":248},[152,1101,382],{"class":248},[152,1103,336],{"class":255},[152,1105,1107,1110,1113,1115,1118,1121,1123,1125,1128,1130,1132,1134,1137,1139,1143,1145],{"class":154,"line":1106},13,[152,1108,1109],{"class":559},"      const",[152,1111,1112],{"class":244}," response",[152,1114,586],{"class":248},[152,1116,1117],{"class":248}," new",[152,1119,1120],{"class":240}," Response",[152,1122,245],{"class":255},[152,1124,265],{"class":248},[152,1126,1127],{"class":161},"ok",[152,1129,265],{"class":248},[152,1131,955],{"class":248},[152,1133,376],{"class":248},[152,1135,1136],{"class":255}," status",[152,1138,259],{"class":248},[152,1140,1142],{"class":1141},"sbssI"," 200",[152,1144,382],{"class":248},[152,1146,336],{"class":255},[152,1148,1150,1152,1154,1157,1159,1161,1163,1165,1167,1169,1172,1174],{"class":154,"line":1149},14,[152,1151,1079],{"class":244},[152,1153,602],{"class":248},[152,1155,1156],{"class":240},"emit",[152,1158,245],{"class":255},[152,1160,610],{"class":248},[152,1162,1136],{"class":255},[152,1164,259],{"class":248},[152,1166,1112],{"class":244},[152,1168,602],{"class":248},[152,1170,1171],{"class":244},"status",[152,1173,382],{"class":248},[152,1175,336],{"class":255},[152,1177,1179,1182],{"class":154,"line":1178},15,[152,1180,1181],{"class":233},"      return",[152,1183,1184],{"class":244}," response\n",[152,1186,1188,1190,1193,1195,1198,1201],{"class":154,"line":1187},16,[152,1189,474],{"class":248},[152,1191,1192],{"class":233}," catch",[152,1194,563],{"class":255},[152,1196,1197],{"class":244},"error",[152,1199,1200],{"class":255},") ",[152,1202,249],{"class":248},[152,1204,1206,1208,1210,1212,1214,1216,1219,1222],{"class":154,"line":1205},17,[152,1207,1079],{"class":244},[152,1209,602],{"class":248},[152,1211,1197],{"class":240},[152,1213,245],{"class":255},[152,1215,1197],{"class":244},[152,1217,1218],{"class":233}," as",[152,1220,1221],{"class":158}," Error",[152,1223,336],{"class":255},[152,1225,1227,1229,1231,1233,1235,1237,1239,1241,1244,1246],{"class":154,"line":1226},18,[152,1228,1079],{"class":244},[152,1230,602],{"class":248},[152,1232,1156],{"class":240},[152,1234,245],{"class":255},[152,1236,610],{"class":248},[152,1238,1136],{"class":255},[152,1240,259],{"class":248},[152,1242,1243],{"class":1141}," 500",[152,1245,382],{"class":248},[152,1247,336],{"class":255},[152,1249,1251,1254],{"class":154,"line":1250},19,[152,1252,1253],{"class":233},"      throw",[152,1255,1256],{"class":244}," error\n",[152,1258,1260],{"class":154,"line":1259},20,[152,1261,1262],{"class":248},"    }\n",[152,1264,1266],{"class":154,"line":1265},21,[152,1267,327],{"class":248},[152,1269,1271],{"class":154,"line":1270},22,[152,1272,1273],{"class":248},"}\n",[129,1275,1276],{},"Disable invocation logs to avoid duplicate request logs:",[141,1278,1283],{"className":1279,"code":1280,"filename":1281,"language":1282,"meta":147,"style":147},"language-toml shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","[observability.logs]\ninvocation_logs = false\n","wrangler.toml","toml",[149,1284,1285,1290],{"__ignoreMap":147},[152,1286,1287],{"class":154,"line":155},[152,1288,1289],{},"[observability.logs]\n",[152,1291,1292],{"class":154,"line":252},[152,1293,1294],{},"invocation_logs = false\n",[129,1296,1297],{},"Notes:",[1299,1300,1301,1312,1318],"ul",{},[1302,1303,1304,1307,1308,1311],"li",{},[149,1305,1306],{},"requestId"," defaults to ",[149,1309,1310],{},"cf-ray"," when available",[1302,1313,1314,1317],{},[149,1315,1316],{},"request.cf"," is included (colo, country, asn) unless disabled",[1302,1319,1320,1321,1324],{},"Use ",[149,1322,1323],{},"headerAllowlist"," to avoid logging sensitive headers",[907,1326,1329,1330,1337],{"color":1327,"icon":1328},"neutral","i-lucide-arrow-right","See the full ",[1331,1332,1336],"a",{"href":1333,"rel":1334},"https://github.com/HugoRCD/evlog/tree/main/examples/workers",[1335],"nofollow","workers example"," for a complete working project.",[214,1339,1341],{"id":1340},"hono","Hono",[129,1343,1344],{},"Use the standalone API to create one wide event per request from a Hono middleware.",[141,1346,1348],{"className":223,"code":1347,"filename":941,"language":226,"meta":147,"style":147},"import { serve } from '@hono/node-server'\nimport { Hono } from 'hono'\nimport { createRequestLogger, initLogger } from 'evlog'\n\ninitLogger({\n  env: { service: 'hono-api' },\n})\n\nconst app = new Hono()\n\napp.use('*', async (c, next) => {\n  const startedAt = Date.now()\n  const log = createRequestLogger({ method: c.req.method, path: c.req.path })\n\n  try {\n    await next()\n  } catch (error) {\n    log.error(error as Error)\n    throw error\n  } finally {\n    log.emit({\n      status: c.res.status,\n      duration: Date.now() - startedAt,\n    })\n  }\n})\n\napp.get('/health', (c) => c.json({ ok: true }))\n\nserve({ fetch: app.fetch, port: 3000 })\n",[149,1349,1350,1370,1389,1413,1417,1426,1447,1453,1457,1475,1479,1519,1538,1592,1596,1603,1612,1627,1646,1653,1662,1674,1694,1718,1725,1731,1738,1743,1794,1799],{"__ignoreMap":147},[152,1351,1352,1354,1356,1359,1361,1363,1365,1368],{"class":154,"line":155},[152,1353,373],{"class":233},[152,1355,376],{"class":248},[152,1357,1358],{"class":244}," serve",[152,1360,382],{"class":248},[152,1362,385],{"class":233},[152,1364,308],{"class":248},[152,1366,1367],{"class":161},"@hono/node-server",[152,1369,392],{"class":248},[152,1371,1372,1374,1376,1379,1381,1383,1385,1387],{"class":154,"line":252},[152,1373,373],{"class":233},[152,1375,376],{"class":248},[152,1377,1378],{"class":244}," Hono",[152,1380,382],{"class":248},[152,1382,385],{"class":233},[152,1384,308],{"class":248},[152,1386,1340],{"class":161},[152,1388,392],{"class":248},[152,1390,1391,1393,1395,1398,1400,1403,1405,1407,1409,1411],{"class":154,"line":279},[152,1392,373],{"class":233},[152,1394,376],{"class":248},[152,1396,1397],{"class":244}," createRequestLogger",[152,1399,955],{"class":248},[152,1401,1402],{"class":244}," initLogger",[152,1404,382],{"class":248},[152,1406,385],{"class":233},[152,1408,308],{"class":248},[152,1410,920],{"class":161},[152,1412,392],{"class":248},[152,1414,1415],{"class":154,"line":290},[152,1416,415],{"emptyLinePlaceholder":414},[152,1418,1419,1422,1424],{"class":154,"line":300},[152,1420,1421],{"class":240},"initLogger",[152,1423,245],{"class":244},[152,1425,249],{"class":248},[152,1427,1428,1430,1432,1434,1436,1438,1440,1443,1445],{"class":154,"line":318},[152,1429,987],{"class":255},[152,1431,259],{"class":248},[152,1433,376],{"class":248},[152,1435,457],{"class":255},[152,1437,259],{"class":248},[152,1439,308],{"class":248},[152,1441,1442],{"class":161},"hono-api",[152,1444,265],{"class":248},[152,1446,469],{"class":248},[152,1448,1449,1451],{"class":154,"line":324},[152,1450,333],{"class":248},[152,1452,336],{"class":244},[152,1454,1455],{"class":154,"line":330},[152,1456,415],{"emptyLinePlaceholder":414},[152,1458,1459,1462,1465,1468,1470,1472],{"class":154,"line":479},[152,1460,1461],{"class":559},"const",[152,1463,1464],{"class":244}," app ",[152,1466,1467],{"class":248},"=",[152,1469,1117],{"class":248},[152,1471,1378],{"class":240},[152,1473,1474],{"class":244},"()\n",[152,1476,1477],{"class":154,"line":487},[152,1478,415],{"emptyLinePlaceholder":414},[152,1480,1481,1484,1486,1489,1491,1493,1496,1498,1500,1503,1505,1508,1510,1513,1515,1517],{"class":154,"line":1068},[152,1482,1483],{"class":244},"app",[152,1485,602],{"class":248},[152,1487,1488],{"class":240},"use",[152,1490,245],{"class":244},[152,1492,265],{"class":248},[152,1494,1495],{"class":161},"*",[152,1497,265],{"class":248},[152,1499,955],{"class":248},[152,1501,1502],{"class":559}," async",[152,1504,563],{"class":248},[152,1506,1507],{"class":566},"c",[152,1509,955],{"class":248},[152,1511,1512],{"class":566}," next",[152,1514,570],{"class":248},[152,1516,573],{"class":559},[152,1518,287],{"class":248},[152,1520,1521,1523,1526,1528,1531,1533,1536],{"class":154,"line":1076},[152,1522,580],{"class":559},[152,1524,1525],{"class":244}," startedAt",[152,1527,586],{"class":248},[152,1529,1530],{"class":244}," Date",[152,1532,602],{"class":248},[152,1534,1535],{"class":240},"now",[152,1537,1474],{"class":255},[152,1539,1540,1542,1544,1546,1548,1550,1552,1555,1557,1560,1562,1565,1567,1570,1572,1575,1577,1579,1581,1583,1585,1588,1590],{"class":154,"line":1106},[152,1541,580],{"class":559},[152,1543,583],{"class":244},[152,1545,586],{"class":248},[152,1547,1397],{"class":240},[152,1549,245],{"class":255},[152,1551,610],{"class":248},[152,1553,1554],{"class":255}," method",[152,1556,259],{"class":248},[152,1558,1559],{"class":244}," c",[152,1561,602],{"class":248},[152,1563,1564],{"class":244},"req",[152,1566,602],{"class":248},[152,1568,1569],{"class":244},"method",[152,1571,955],{"class":248},[152,1573,1574],{"class":255}," path",[152,1576,259],{"class":248},[152,1578,1559],{"class":244},[152,1580,602],{"class":248},[152,1582,1564],{"class":244},[152,1584,602],{"class":248},[152,1586,1587],{"class":244},"path",[152,1589,382],{"class":248},[152,1591,336],{"class":255},[152,1593,1594],{"class":154,"line":1149},[152,1595,415],{"emptyLinePlaceholder":414},[152,1597,1598,1601],{"class":154,"line":1178},[152,1599,1600],{"class":233},"  try",[152,1602,287],{"class":248},[152,1604,1605,1608,1610],{"class":154,"line":1187},[152,1606,1607],{"class":233},"    await",[152,1609,1512],{"class":240},[152,1611,1474],{"class":255},[152,1613,1614,1617,1619,1621,1623,1625],{"class":154,"line":1205},[152,1615,1616],{"class":248},"  }",[152,1618,1192],{"class":233},[152,1620,563],{"class":255},[152,1622,1197],{"class":244},[152,1624,1200],{"class":255},[152,1626,249],{"class":248},[152,1628,1629,1632,1634,1636,1638,1640,1642,1644],{"class":154,"line":1226},[152,1630,1631],{"class":244},"    log",[152,1633,602],{"class":248},[152,1635,1197],{"class":240},[152,1637,245],{"class":255},[152,1639,1197],{"class":244},[152,1641,1218],{"class":233},[152,1643,1221],{"class":158},[152,1645,336],{"class":255},[152,1647,1648,1651],{"class":154,"line":1250},[152,1649,1650],{"class":233},"    throw",[152,1652,1256],{"class":244},[152,1654,1655,1657,1660],{"class":154,"line":1259},[152,1656,1616],{"class":248},[152,1658,1659],{"class":233}," finally",[152,1661,287],{"class":248},[152,1663,1664,1666,1668,1670,1672],{"class":154,"line":1265},[152,1665,1631],{"class":244},[152,1667,602],{"class":248},[152,1669,1156],{"class":240},[152,1671,245],{"class":255},[152,1673,249],{"class":248},[152,1675,1676,1679,1681,1683,1685,1688,1690,1692],{"class":154,"line":1270},[152,1677,1678],{"class":255},"      status",[152,1680,259],{"class":248},[152,1682,1559],{"class":244},[152,1684,602],{"class":248},[152,1686,1687],{"class":244},"res",[152,1689,602],{"class":248},[152,1691,1171],{"class":244},[152,1693,276],{"class":248},[152,1695,1697,1700,1702,1704,1706,1708,1711,1714,1716],{"class":154,"line":1696},23,[152,1698,1699],{"class":255},"      duration",[152,1701,259],{"class":248},[152,1703,1530],{"class":244},[152,1705,602],{"class":248},[152,1707,1535],{"class":240},[152,1709,1710],{"class":255},"() ",[152,1712,1713],{"class":248},"-",[152,1715,1525],{"class":244},[152,1717,276],{"class":248},[152,1719,1721,1723],{"class":154,"line":1720},24,[152,1722,474],{"class":248},[152,1724,336],{"class":255},[152,1726,1728],{"class":154,"line":1727},25,[152,1729,1730],{"class":248},"  }\n",[152,1732,1734,1736],{"class":154,"line":1733},26,[152,1735,333],{"class":248},[152,1737,336],{"class":244},[152,1739,1741],{"class":154,"line":1740},27,[152,1742,415],{"emptyLinePlaceholder":414},[152,1744,1746,1748,1750,1753,1755,1757,1760,1762,1764,1766,1768,1770,1772,1774,1776,1779,1781,1783,1785,1787,1789,1791],{"class":154,"line":1745},28,[152,1747,1483],{"class":244},[152,1749,602],{"class":248},[152,1751,1752],{"class":240},"get",[152,1754,245],{"class":244},[152,1756,265],{"class":248},[152,1758,1759],{"class":161},"/health",[152,1761,265],{"class":248},[152,1763,955],{"class":248},[152,1765,563],{"class":248},[152,1767,1507],{"class":566},[152,1769,570],{"class":248},[152,1771,573],{"class":559},[152,1773,1559],{"class":244},[152,1775,602],{"class":248},[152,1777,1778],{"class":240},"json",[152,1780,245],{"class":244},[152,1782,610],{"class":248},[152,1784,636],{"class":255},[152,1786,259],{"class":248},[152,1788,642],{"class":641},[152,1790,382],{"class":248},[152,1792,1793],{"class":244},"))\n",[152,1795,1797],{"class":154,"line":1796},29,[152,1798,415],{"emptyLinePlaceholder":414},[152,1800,1802,1805,1807,1809,1811,1813,1816,1818,1821,1823,1826,1828,1831,1833],{"class":154,"line":1801},30,[152,1803,1804],{"class":240},"serve",[152,1806,245],{"class":244},[152,1808,610],{"class":248},[152,1810,1030],{"class":255},[152,1812,259],{"class":248},[152,1814,1815],{"class":244}," app",[152,1817,602],{"class":248},[152,1819,1820],{"class":244},"fetch",[152,1822,955],{"class":248},[152,1824,1825],{"class":255}," port",[152,1827,259],{"class":248},[152,1829,1830],{"class":1141}," 3000",[152,1832,382],{"class":248},[152,1834,336],{"class":244},[907,1836,1329,1837,1337],{"color":1327,"icon":1328},[1331,1838,1841],{"href":1839,"rel":1840},"https://github.com/HugoRCD/evlog/tree/main/examples/hono",[1335],"hono example",[214,1843,1845],{"id":1844},"standalone-typescript","Standalone TypeScript",[129,1847,1848],{},"Use evlog in scripts, CLI tools, workers, or any TypeScript project:",[141,1850,1853],{"className":223,"code":1851,"filename":1852,"language":226,"meta":147,"style":147},"import { initLogger, createRequestLogger } from 'evlog'\n\ninitLogger({\n  env: {\n    service: 'my-worker',\n    environment: 'production',\n  },\n})\n\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",[149,1854,1855,1877,1881,1889,1897,1913,1929,1933,1939,1943,1975,2018,2042],{"__ignoreMap":147},[152,1856,1857,1859,1861,1863,1865,1867,1869,1871,1873,1875],{"class":154,"line":155},[152,1858,373],{"class":233},[152,1860,376],{"class":248},[152,1862,1402],{"class":244},[152,1864,955],{"class":248},[152,1866,1397],{"class":244},[152,1868,382],{"class":248},[152,1870,385],{"class":233},[152,1872,308],{"class":248},[152,1874,920],{"class":161},[152,1876,392],{"class":248},[152,1878,1879],{"class":154,"line":252},[152,1880,415],{"emptyLinePlaceholder":414},[152,1882,1883,1885,1887],{"class":154,"line":279},[152,1884,1421],{"class":240},[152,1886,245],{"class":244},[152,1888,249],{"class":248},[152,1890,1891,1893,1895],{"class":154,"line":290},[152,1892,987],{"class":255},[152,1894,259],{"class":248},[152,1896,287],{"class":248},[152,1898,1899,1902,1904,1906,1909,1911],{"class":154,"line":300},[152,1900,1901],{"class":255},"    service",[152,1903,259],{"class":248},[152,1905,308],{"class":248},[152,1907,1908],{"class":161},"my-worker",[152,1910,265],{"class":248},[152,1912,276],{"class":248},[152,1914,1915,1918,1920,1922,1925,1927],{"class":154,"line":318},[152,1916,1917],{"class":255},"    environment",[152,1919,259],{"class":248},[152,1921,308],{"class":248},[152,1923,1924],{"class":161},"production",[152,1926,265],{"class":248},[152,1928,276],{"class":248},[152,1930,1931],{"class":154,"line":324},[152,1932,327],{"class":248},[152,1934,1935,1937],{"class":154,"line":330},[152,1936,333],{"class":248},[152,1938,336],{"class":244},[152,1940,1941],{"class":154,"line":479},[152,1942,415],{"emptyLinePlaceholder":414},[152,1944,1945,1947,1950,1952,1954,1956,1958,1961,1963,1966,1968,1971,1973],{"class":154,"line":487},[152,1946,1461],{"class":559},[152,1948,1949],{"class":244}," log ",[152,1951,1467],{"class":248},[152,1953,1397],{"class":240},[152,1955,245],{"class":244},[152,1957,610],{"class":248},[152,1959,1960],{"class":255}," jobId",[152,1962,259],{"class":248},[152,1964,1965],{"class":244}," job",[152,1967,602],{"class":248},[152,1969,1970],{"class":244},"id ",[152,1972,333],{"class":248},[152,1974,336],{"class":244},[152,1976,1977,1980,1982,1984,1986,1988,1991,1993,1995,1997,2000,2002,2005,2007,2009,2011,2014,2016],{"class":154,"line":1068},[152,1978,1979],{"class":244},"log",[152,1981,602],{"class":248},[152,1983,605],{"class":240},[152,1985,245],{"class":244},[152,1987,610],{"class":248},[152,1989,1990],{"class":255}," source",[152,1992,259],{"class":248},[152,1994,1965],{"class":244},[152,1996,602],{"class":248},[152,1998,1999],{"class":244},"source",[152,2001,955],{"class":248},[152,2003,2004],{"class":255}," target",[152,2006,259],{"class":248},[152,2008,1965],{"class":244},[152,2010,602],{"class":248},[152,2012,2013],{"class":244},"target ",[152,2015,333],{"class":248},[152,2017,336],{"class":244},[152,2019,2020,2022,2024,2026,2028,2030,2033,2035,2038,2040],{"class":154,"line":1076},[152,2021,1979],{"class":244},[152,2023,602],{"class":248},[152,2025,605],{"class":240},[152,2027,245],{"class":244},[152,2029,610],{"class":248},[152,2031,2032],{"class":255}," recordsSynced",[152,2034,259],{"class":248},[152,2036,2037],{"class":1141}," 150",[152,2039,382],{"class":248},[152,2041,336],{"class":244},[152,2043,2044,2046,2048,2050,2052],{"class":154,"line":1106},[152,2045,1979],{"class":244},[152,2047,602],{"class":248},[152,2049,1156],{"class":240},[152,2051,1710],{"class":244},[152,2053,2055],{"class":2054},"sHwdD","// Manual emit required in standalone mode\n",[907,2057,2058,2059,2062],{"color":909,"icon":13},"In standalone mode, you must call ",[149,2060,2061],{},"log.emit()"," manually. In Nuxt/Nitro, this happens automatically at request end.",[2064,2065,2067],"h4",{"id":2066},"draining-logs-to-external-services","Draining Logs to External Services",[129,2069,2070,2071,2074,2075,2077,2078,2081,2082,2085],{},"Use the ",[149,2072,2073],{},"drain"," option in ",[149,2076,1421],{}," to automatically send every emitted event to an external service. This works with all built-in ",[1331,2079,2080],{"href":62},"adapters"," and the ",[1331,2083,2084],{"href":97},"pipeline"," for batching and retry.",[141,2087,2089],{"className":223,"code":2088,"filename":1852,"language":226,"meta":147,"style":147},"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",[149,2090,2091,2113,2139,2159,2179,2183,2228,2248,2252,2260,2294,2301,2307,2311,2316,2343,2347,2390,2413,2426,2430,2435],{"__ignoreMap":147},[152,2092,2093,2095,2098,2100,2103,2105,2107,2109,2111],{"class":154,"line":155},[152,2094,373],{"class":233},[152,2096,2097],{"class":233}," type",[152,2099,376],{"class":248},[152,2101,2102],{"class":244}," DrainContext",[152,2104,382],{"class":248},[152,2106,385],{"class":233},[152,2108,308],{"class":248},[152,2110,920],{"class":161},[152,2112,392],{"class":248},[152,2114,2115,2117,2119,2121,2123,2125,2127,2129,2131,2133,2135,2137],{"class":154,"line":252},[152,2116,373],{"class":233},[152,2118,376],{"class":248},[152,2120,1402],{"class":244},[152,2122,955],{"class":248},[152,2124,583],{"class":244},[152,2126,955],{"class":248},[152,2128,1397],{"class":244},[152,2130,382],{"class":248},[152,2132,385],{"class":233},[152,2134,308],{"class":248},[152,2136,920],{"class":161},[152,2138,392],{"class":248},[152,2140,2141,2143,2145,2148,2150,2152,2154,2157],{"class":154,"line":279},[152,2142,373],{"class":233},[152,2144,376],{"class":248},[152,2146,2147],{"class":244}," createAxiomDrain",[152,2149,382],{"class":248},[152,2151,385],{"class":233},[152,2153,308],{"class":248},[152,2155,2156],{"class":161},"evlog/axiom",[152,2158,392],{"class":248},[152,2160,2161,2163,2165,2168,2170,2172,2174,2177],{"class":154,"line":290},[152,2162,373],{"class":233},[152,2164,376],{"class":248},[152,2166,2167],{"class":244}," createDrainPipeline",[152,2169,382],{"class":248},[152,2171,385],{"class":233},[152,2173,308],{"class":248},[152,2175,2176],{"class":161},"evlog/pipeline",[152,2178,392],{"class":248},[152,2180,2181],{"class":154,"line":300},[152,2182,415],{"emptyLinePlaceholder":414},[152,2184,2185,2187,2190,2192,2194,2197,2200,2203,2205,2207,2210,2212,2214,2217,2219,2222,2224,2226],{"class":154,"line":318},[152,2186,1461],{"class":559},[152,2188,2189],{"class":244}," pipeline ",[152,2191,1467],{"class":248},[152,2193,2167],{"class":240},[152,2195,2196],{"class":248},"\u003C",[152,2198,2199],{"class":158},"DrainContext",[152,2201,2202],{"class":248},">",[152,2204,245],{"class":244},[152,2206,610],{"class":248},[152,2208,2209],{"class":255}," batch",[152,2211,259],{"class":248},[152,2213,376],{"class":248},[152,2215,2216],{"class":255}," size",[152,2218,259],{"class":248},[152,2220,2221],{"class":1141}," 10",[152,2223,382],{"class":248},[152,2225,382],{"class":248},[152,2227,336],{"class":244},[152,2229,2230,2232,2235,2237,2240,2242,2245],{"class":154,"line":324},[152,2231,1461],{"class":559},[152,2233,2234],{"class":244}," drain ",[152,2236,1467],{"class":248},[152,2238,2239],{"class":240}," pipeline",[152,2241,245],{"class":244},[152,2243,2244],{"class":240},"createAxiomDrain",[152,2246,2247],{"class":244},"())\n",[152,2249,2250],{"class":154,"line":330},[152,2251,415],{"emptyLinePlaceholder":414},[152,2253,2254,2256,2258],{"class":154,"line":479},[152,2255,1421],{"class":240},[152,2257,245],{"class":244},[152,2259,249],{"class":248},[152,2261,2262,2264,2266,2268,2270,2272,2274,2277,2279,2281,2284,2286,2288,2290,2292],{"class":154,"line":487},[152,2263,987],{"class":255},[152,2265,259],{"class":248},[152,2267,376],{"class":248},[152,2269,457],{"class":255},[152,2271,259],{"class":248},[152,2273,308],{"class":248},[152,2275,2276],{"class":161},"my-script",[152,2278,265],{"class":248},[152,2280,955],{"class":248},[152,2282,2283],{"class":255}," environment",[152,2285,259],{"class":248},[152,2287,308],{"class":248},[152,2289,1924],{"class":161},[152,2291,265],{"class":248},[152,2293,469],{"class":248},[152,2295,2296,2299],{"class":154,"line":1068},[152,2297,2298],{"class":244},"  drain",[152,2300,276],{"class":248},[152,2302,2303,2305],{"class":154,"line":1076},[152,2304,333],{"class":248},[152,2306,336],{"class":244},[152,2308,2309],{"class":154,"line":1106},[152,2310,415],{"emptyLinePlaceholder":414},[152,2312,2313],{"class":154,"line":1149},[152,2314,2315],{"class":2054},"// Every log is automatically drained\n",[152,2317,2318,2320,2322,2324,2326,2328,2330,2332,2334,2337,2339,2341],{"class":154,"line":1178},[152,2319,1979],{"class":244},[152,2321,602],{"class":248},[152,2323,909],{"class":240},[152,2325,245],{"class":244},[152,2327,610],{"class":248},[152,2329,613],{"class":255},[152,2331,259],{"class":248},[152,2333,308],{"class":248},[152,2335,2336],{"class":161},"sync_started",[152,2338,265],{"class":248},[152,2340,382],{"class":248},[152,2342,336],{"class":244},[152,2344,2345],{"class":154,"line":1187},[152,2346,415],{"emptyLinePlaceholder":414},[152,2348,2349,2351,2354,2356,2358,2360,2362,2364,2366,2368,2371,2373,2375,2377,2379,2381,2384,2386,2388],{"class":154,"line":1205},[152,2350,1461],{"class":559},[152,2352,2353],{"class":244}," reqLog ",[152,2355,1467],{"class":248},[152,2357,1397],{"class":240},[152,2359,245],{"class":244},[152,2361,610],{"class":248},[152,2363,1554],{"class":255},[152,2365,259],{"class":248},[152,2367,308],{"class":248},[152,2369,2370],{"class":161},"POST",[152,2372,265],{"class":248},[152,2374,955],{"class":248},[152,2376,1574],{"class":255},[152,2378,259],{"class":248},[152,2380,308],{"class":248},[152,2382,2383],{"class":161},"/sync",[152,2385,265],{"class":248},[152,2387,382],{"class":248},[152,2389,336],{"class":244},[152,2391,2392,2395,2397,2399,2401,2403,2405,2407,2409,2411],{"class":154,"line":1226},[152,2393,2394],{"class":244},"reqLog",[152,2396,602],{"class":248},[152,2398,605],{"class":240},[152,2400,245],{"class":244},[152,2402,610],{"class":248},[152,2404,2032],{"class":255},[152,2406,259],{"class":248},[152,2408,2037],{"class":1141},[152,2410,382],{"class":248},[152,2412,336],{"class":244},[152,2414,2415,2417,2419,2421,2423],{"class":154,"line":1250},[152,2416,2394],{"class":244},[152,2418,602],{"class":248},[152,2420,1156],{"class":240},[152,2422,1710],{"class":244},[152,2424,2425],{"class":2054},"// drained automatically\n",[152,2427,2428],{"class":154,"line":1259},[152,2429,415],{"emptyLinePlaceholder":414},[152,2431,2432],{"class":154,"line":1265},[152,2433,2434],{"class":2054},"// Flush remaining events before exit\n",[152,2436,2437,2440,2443,2445,2448],{"class":154,"line":1270},[152,2438,2439],{"class":233},"await",[152,2441,2442],{"class":244}," drain",[152,2444,602],{"class":248},[152,2446,2447],{"class":240},"flush",[152,2449,1474],{"class":244},[907,2451,1329,2452,2457],{"color":1327,"icon":1328},[1331,2453,2456],{"href":2454,"rel":2455},"https://github.com/HugoRCD/evlog/tree/main/examples/bun-script",[1335],"bun-script example"," for a complete working script.",[133,2459,2461],{"id":2460},"configuration-options","Configuration Options",[129,2463,2464,2465,2468],{},"These options apply to ",[911,2466,2467],{},"Nuxt, Nitro v2, and Nitro v3",". The evlog module accepts the same options across all environments.",[2470,2471,2472,2491],"table",{},[2473,2474,2475],"thead",{},[2476,2477,2478,2482,2485,2488],"tr",{},[2479,2480,2481],"th",{},"Option",[2479,2483,2484],{},"Type",[2479,2486,2487],{},"Default",[2479,2489,2490],{},"Description",[2492,2493,2494,2519,2539,2556,2580,2598,2617,2636,2659],"tbody",{},[2476,2495,2496,2502,2507,2512],{},[2497,2498,2499],"td",{},[149,2500,2501],{},"enabled",[2497,2503,2504],{},[149,2505,2506],{},"boolean",[2497,2508,2509],{},[149,2510,2511],{},"true",[2497,2513,2514,2515,2518],{},"Globally enable/disable all logging. When ",[149,2516,2517],{},"false",", all operations become no-ops",[2476,2520,2521,2526,2531,2536],{},[2497,2522,2523],{},[149,2524,2525],{},"env.service",[2497,2527,2528],{},[149,2529,2530],{},"string",[2497,2532,2533],{},[149,2534,2535],{},"'app'",[2497,2537,2538],{},"Service name shown in logs",[2476,2540,2541,2546,2550,2553],{},[2497,2542,2543],{},[149,2544,2545],{},"env.environment",[2497,2547,2548],{},[149,2549,2530],{},[2497,2551,2552],{},"Auto-detected",[2497,2554,2555],{},"Environment name",[2476,2557,2558,2563,2568,2573],{},[2497,2559,2560],{},[149,2561,2562],{},"include",[2497,2564,2565],{},[149,2566,2567],{},"string[]",[2497,2569,2570],{},[149,2571,2572],{},"undefined",[2497,2574,2575,2576,2579],{},"Route patterns to log. Supports glob (",[149,2577,2578],{},"/api/**","). If not set, all routes are logged",[2476,2581,2582,2587,2591,2595],{},[2497,2583,2584],{},[149,2585,2586],{},"exclude",[2497,2588,2589],{},[149,2590,2567],{},[2497,2592,2593],{},[149,2594,2572],{},[2497,2596,2597],{},"Route patterns to exclude from logging. Supports glob. Exclusions take precedence over inclusions",[2476,2599,2600,2605,2610,2614],{},[2497,2601,2602],{},[149,2603,2604],{},"routes",[2497,2606,2607],{},[149,2608,2609],{},"Record\u003Cstring, RouteConfig>",[2497,2611,2612],{},[149,2613,2572],{},[2497,2615,2616],{},"Route-specific service configuration",[2476,2618,2619,2624,2628,2633],{},[2497,2620,2621],{},[149,2622,2623],{},"pretty",[2497,2625,2626],{},[149,2627,2506],{},[2497,2629,2630,2632],{},[149,2631,2511],{}," in dev",[2497,2634,2635],{},"Pretty print with tree formatting",[2476,2637,2638,2643,2648,2652],{},[2497,2639,2640],{},[149,2641,2642],{},"sampling.rates",[2497,2644,2645],{},[149,2646,2647],{},"object",[2497,2649,2650],{},[149,2651,2572],{},[2497,2653,2654,2655],{},"Head sampling rates per log level (0-100%). See ",[1331,2656,2658],{"href":2657},"#sampling","Sampling",[2476,2660,2661,2666,2671,2675],{},[2497,2662,2663],{},[149,2664,2665],{},"sampling.keep",[2497,2667,2668],{},[149,2669,2670],{},"array",[2497,2672,2673],{},[149,2674,2572],{},[2497,2676,2677,2678],{},"Tail sampling conditions to force-keep logs. See ",[1331,2679,2658],{"href":2657},[907,2681,2682,2683,2686,2687,2690,2691,602],{"color":909,"icon":13},"Nuxt also supports ",[149,2684,2685],{},"transport.enabled"," and ",[149,2688,2689],{},"transport.endpoint"," for ",[1331,2692,2694],{"href":2693},"#client-transport-nuxt-only","Client Transport",[214,2696,2698],{"id":2697},"route-filtering","Route Filtering",[129,2700,1320,2701,2686,2703,2705],{},[149,2702,2562],{},[149,2704,2586],{}," to control which routes are logged. Both support glob patterns.",[138,2707,2708,2839,2965],{},[141,2709,2711],{"className":223,"code":2710,"filename":225,"language":226,"meta":147,"style":147},"export default defineNuxtConfig({\n  modules: ['evlog/nuxt'],\n  evlog: {\n    include: ['/api/**', '/auth/**'],\n    exclude: [\n      '/api/_nuxt_icon/**',\n      '/api/_content/**',\n      '/api/health',\n    ],\n  },\n})\n",[149,2712,2713,2725,2743,2751,2779,2788,2800,2811,2822,2829,2833],{"__ignoreMap":147},[152,2714,2715,2717,2719,2721,2723],{"class":154,"line":155},[152,2716,234],{"class":233},[152,2718,237],{"class":233},[152,2720,241],{"class":240},[152,2722,245],{"class":244},[152,2724,249],{"class":248},[152,2726,2727,2729,2731,2733,2735,2737,2739,2741],{"class":154,"line":252},[152,2728,256],{"class":255},[152,2730,259],{"class":248},[152,2732,262],{"class":244},[152,2734,265],{"class":248},[152,2736,268],{"class":161},[152,2738,265],{"class":248},[152,2740,273],{"class":244},[152,2742,276],{"class":248},[152,2744,2745,2747,2749],{"class":154,"line":279},[152,2746,282],{"class":255},[152,2748,259],{"class":248},[152,2750,287],{"class":248},[152,2752,2753,2756,2758,2760,2762,2764,2766,2768,2770,2773,2775,2777],{"class":154,"line":290},[152,2754,2755],{"class":255},"    include",[152,2757,259],{"class":248},[152,2759,262],{"class":244},[152,2761,265],{"class":248},[152,2763,2578],{"class":161},[152,2765,265],{"class":248},[152,2767,955],{"class":248},[152,2769,308],{"class":248},[152,2771,2772],{"class":161},"/auth/**",[152,2774,265],{"class":248},[152,2776,273],{"class":244},[152,2778,276],{"class":248},[152,2780,2781,2784,2786],{"class":154,"line":300},[152,2782,2783],{"class":255},"    exclude",[152,2785,259],{"class":248},[152,2787,436],{"class":244},[152,2789,2790,2793,2796,2798],{"class":154,"line":318},[152,2791,2792],{"class":248},"      '",[152,2794,2795],{"class":161},"/api/_nuxt_icon/**",[152,2797,265],{"class":248},[152,2799,276],{"class":248},[152,2801,2802,2804,2807,2809],{"class":154,"line":324},[152,2803,2792],{"class":248},[152,2805,2806],{"class":161},"/api/_content/**",[152,2808,265],{"class":248},[152,2810,276],{"class":248},[152,2812,2813,2815,2818,2820],{"class":154,"line":330},[152,2814,2792],{"class":248},[152,2816,2817],{"class":161},"/api/health",[152,2819,265],{"class":248},[152,2821,276],{"class":248},[152,2823,2824,2827],{"class":154,"line":479},[152,2825,2826],{"class":244},"    ]",[152,2828,276],{"class":248},[152,2830,2831],{"class":154,"line":487},[152,2832,327],{"class":248},[152,2834,2835,2837],{"class":154,"line":1068},[152,2836,333],{"class":248},[152,2838,336],{"class":244},[141,2840,2843],{"className":223,"code":2841,"filename":2842,"language":226,"meta":147,"style":147},"import { defineConfig } from 'nitro'\nimport evlog from 'evlog/nitro/v3'\n\nexport default defineConfig({\n  modules: [\n    evlog({\n      include: ['/api/**'],\n      exclude: ['/api/health'],\n    })\n  ],\n})\n","nitro.config.ts (v3)",[149,2844,2845,2863,2877,2881,2893,2901,2909,2928,2947,2953,2959],{"__ignoreMap":147},[152,2846,2847,2849,2851,2853,2855,2857,2859,2861],{"class":154,"line":155},[152,2848,373],{"class":233},[152,2850,376],{"class":248},[152,2852,379],{"class":244},[152,2854,382],{"class":248},[152,2856,385],{"class":233},[152,2858,308],{"class":248},[152,2860,361],{"class":161},[152,2862,392],{"class":248},[152,2864,2865,2867,2869,2871,2873,2875],{"class":154,"line":252},[152,2866,373],{"class":233},[152,2868,399],{"class":244},[152,2870,402],{"class":233},[152,2872,308],{"class":248},[152,2874,407],{"class":161},[152,2876,392],{"class":248},[152,2878,2879],{"class":154,"line":279},[152,2880,415],{"emptyLinePlaceholder":414},[152,2882,2883,2885,2887,2889,2891],{"class":154,"line":290},[152,2884,234],{"class":233},[152,2886,237],{"class":233},[152,2888,379],{"class":240},[152,2890,245],{"class":244},[152,2892,249],{"class":248},[152,2894,2895,2897,2899],{"class":154,"line":300},[152,2896,256],{"class":255},[152,2898,259],{"class":248},[152,2900,436],{"class":244},[152,2902,2903,2905,2907],{"class":154,"line":318},[152,2904,441],{"class":240},[152,2906,245],{"class":244},[152,2908,249],{"class":248},[152,2910,2911,2914,2916,2918,2920,2922,2924,2926],{"class":154,"line":324},[152,2912,2913],{"class":255},"      include",[152,2915,259],{"class":248},[152,2917,262],{"class":244},[152,2919,265],{"class":248},[152,2921,2578],{"class":161},[152,2923,265],{"class":248},[152,2925,273],{"class":244},[152,2927,276],{"class":248},[152,2929,2930,2933,2935,2937,2939,2941,2943,2945],{"class":154,"line":330},[152,2931,2932],{"class":255},"      exclude",[152,2934,259],{"class":248},[152,2936,262],{"class":244},[152,2938,265],{"class":248},[152,2940,2817],{"class":161},[152,2942,265],{"class":248},[152,2944,273],{"class":244},[152,2946,276],{"class":248},[152,2948,2949,2951],{"class":154,"line":479},[152,2950,474],{"class":248},[152,2952,336],{"class":244},[152,2954,2955,2957],{"class":154,"line":487},[152,2956,482],{"class":244},[152,2958,276],{"class":248},[152,2960,2961,2963],{"class":154,"line":1068},[152,2962,333],{"class":248},[152,2964,336],{"class":244},[141,2966,2969],{"className":223,"code":2967,"filename":2968,"language":226,"meta":147,"style":147},"import { defineNitroConfig } from 'nitropack/config'\nimport evlog from 'evlog/nitro'\n\nexport default defineNitroConfig({\n  modules: [\n    evlog({\n      include: ['/api/**'],\n      exclude: ['/api/health'],\n    })\n  ],\n})\n","nitro.config.ts (v2)",[149,2970,2971,2989,3003,3007,3019,3027,3035,3053,3071,3077,3083],{"__ignoreMap":147},[152,2972,2973,2975,2977,2979,2981,2983,2985,2987],{"class":154,"line":155},[152,2974,373],{"class":233},[152,2976,376],{"class":248},[152,2978,675],{"class":244},[152,2980,382],{"class":248},[152,2982,385],{"class":233},[152,2984,308],{"class":248},[152,2986,684],{"class":161},[152,2988,392],{"class":248},[152,2990,2991,2993,2995,2997,2999,3001],{"class":154,"line":252},[152,2992,373],{"class":233},[152,2994,399],{"class":244},[152,2996,402],{"class":233},[152,2998,308],{"class":248},[152,3000,699],{"class":161},[152,3002,392],{"class":248},[152,3004,3005],{"class":154,"line":279},[152,3006,415],{"emptyLinePlaceholder":414},[152,3008,3009,3011,3013,3015,3017],{"class":154,"line":290},[152,3010,234],{"class":233},[152,3012,237],{"class":233},[152,3014,675],{"class":240},[152,3016,245],{"class":244},[152,3018,249],{"class":248},[152,3020,3021,3023,3025],{"class":154,"line":300},[152,3022,256],{"class":255},[152,3024,259],{"class":248},[152,3026,436],{"class":244},[152,3028,3029,3031,3033],{"class":154,"line":318},[152,3030,441],{"class":240},[152,3032,245],{"class":244},[152,3034,249],{"class":248},[152,3036,3037,3039,3041,3043,3045,3047,3049,3051],{"class":154,"line":324},[152,3038,2913],{"class":255},[152,3040,259],{"class":248},[152,3042,262],{"class":244},[152,3044,265],{"class":248},[152,3046,2578],{"class":161},[152,3048,265],{"class":248},[152,3050,273],{"class":244},[152,3052,276],{"class":248},[152,3054,3055,3057,3059,3061,3063,3065,3067,3069],{"class":154,"line":330},[152,3056,2932],{"class":255},[152,3058,259],{"class":248},[152,3060,262],{"class":244},[152,3062,265],{"class":248},[152,3064,2817],{"class":161},[152,3066,265],{"class":248},[152,3068,273],{"class":244},[152,3070,276],{"class":248},[152,3072,3073,3075],{"class":154,"line":479},[152,3074,474],{"class":248},[152,3076,336],{"class":244},[152,3078,3079,3081],{"class":154,"line":487},[152,3080,482],{"class":244},[152,3082,276],{"class":248},[152,3084,3085,3087],{"class":154,"line":1068},[152,3086,333],{"class":248},[152,3088,336],{"class":244},[907,3090,3091,3094,3095,2686,3097,3099],{"color":909,"icon":13},[911,3092,3093],{},"Exclusions take precedence."," If a path matches both ",[149,3096,2562],{},[149,3098,2586],{},", it will be excluded.",[214,3101,3103],{"id":3102},"route-based-service-configuration","Route-Based Service Configuration",[129,3105,3106],{},"In multi-service architectures, configure different service names for different routes:",[138,3108,3109,3280,3450],{},[141,3110,3112],{"className":223,"code":3111,"filename":225,"language":226,"meta":147,"style":147},"export default defineNuxtConfig({\n  modules: ['evlog/nuxt'],\n  evlog: {\n    env: {\n      service: 'default-service',\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",[149,3113,3114,3126,3144,3152,3160,3175,3179,3188,3214,3240,3266,3270,3274],{"__ignoreMap":147},[152,3115,3116,3118,3120,3122,3124],{"class":154,"line":155},[152,3117,234],{"class":233},[152,3119,237],{"class":233},[152,3121,241],{"class":240},[152,3123,245],{"class":244},[152,3125,249],{"class":248},[152,3127,3128,3130,3132,3134,3136,3138,3140,3142],{"class":154,"line":252},[152,3129,256],{"class":255},[152,3131,259],{"class":248},[152,3133,262],{"class":244},[152,3135,265],{"class":248},[152,3137,268],{"class":161},[152,3139,265],{"class":248},[152,3141,273],{"class":244},[152,3143,276],{"class":248},[152,3145,3146,3148,3150],{"class":154,"line":279},[152,3147,282],{"class":255},[152,3149,259],{"class":248},[152,3151,287],{"class":248},[152,3153,3154,3156,3158],{"class":154,"line":290},[152,3155,293],{"class":255},[152,3157,259],{"class":248},[152,3159,287],{"class":248},[152,3161,3162,3164,3166,3168,3171,3173],{"class":154,"line":300},[152,3163,303],{"class":255},[152,3165,259],{"class":248},[152,3167,308],{"class":248},[152,3169,3170],{"class":161},"default-service",[152,3172,265],{"class":248},[152,3174,276],{"class":248},[152,3176,3177],{"class":154,"line":318},[152,3178,321],{"class":248},[152,3180,3181,3184,3186],{"class":154,"line":324},[152,3182,3183],{"class":255},"    routes",[152,3185,259],{"class":248},[152,3187,287],{"class":248},[152,3189,3190,3192,3195,3197,3199,3201,3203,3205,3207,3210,3212],{"class":154,"line":330},[152,3191,2792],{"class":248},[152,3193,3194],{"class":255},"/api/auth/**",[152,3196,265],{"class":248},[152,3198,259],{"class":248},[152,3200,376],{"class":248},[152,3202,457],{"class":255},[152,3204,259],{"class":248},[152,3206,308],{"class":248},[152,3208,3209],{"class":161},"auth-service",[152,3211,265],{"class":248},[152,3213,469],{"class":248},[152,3215,3216,3218,3221,3223,3225,3227,3229,3231,3233,3236,3238],{"class":154,"line":479},[152,3217,2792],{"class":248},[152,3219,3220],{"class":255},"/api/payment/**",[152,3222,265],{"class":248},[152,3224,259],{"class":248},[152,3226,376],{"class":248},[152,3228,457],{"class":255},[152,3230,259],{"class":248},[152,3232,308],{"class":248},[152,3234,3235],{"class":161},"payment-service",[152,3237,265],{"class":248},[152,3239,469],{"class":248},[152,3241,3242,3244,3247,3249,3251,3253,3255,3257,3259,3262,3264],{"class":154,"line":487},[152,3243,2792],{"class":248},[152,3245,3246],{"class":255},"/api/booking/**",[152,3248,265],{"class":248},[152,3250,259],{"class":248},[152,3252,376],{"class":248},[152,3254,457],{"class":255},[152,3256,259],{"class":248},[152,3258,308],{"class":248},[152,3260,3261],{"class":161},"booking-service",[152,3263,265],{"class":248},[152,3265,469],{"class":248},[152,3267,3268],{"class":154,"line":1068},[152,3269,321],{"class":248},[152,3271,3272],{"class":154,"line":1076},[152,3273,327],{"class":248},[152,3275,3276,3278],{"class":154,"line":1106},[152,3277,333],{"class":248},[152,3279,336],{"class":244},[141,3281,3283],{"className":223,"code":3282,"filename":2842,"language":226,"meta":147,"style":147},"import { defineConfig } from 'nitro'\nimport evlog from 'evlog/nitro/v3'\n\nexport default defineConfig({\n  modules: [\n    evlog({\n      env: { service: 'default-service' },\n      routes: {\n        '/api/auth/**': { service: 'auth-service' },\n        '/api/payment/**': { service: 'payment-service' },\n      },\n    })\n  ],\n})\n",[149,3284,3285,3303,3317,3321,3333,3341,3349,3369,3378,3403,3427,3432,3438,3444],{"__ignoreMap":147},[152,3286,3287,3289,3291,3293,3295,3297,3299,3301],{"class":154,"line":155},[152,3288,373],{"class":233},[152,3290,376],{"class":248},[152,3292,379],{"class":244},[152,3294,382],{"class":248},[152,3296,385],{"class":233},[152,3298,308],{"class":248},[152,3300,361],{"class":161},[152,3302,392],{"class":248},[152,3304,3305,3307,3309,3311,3313,3315],{"class":154,"line":252},[152,3306,373],{"class":233},[152,3308,399],{"class":244},[152,3310,402],{"class":233},[152,3312,308],{"class":248},[152,3314,407],{"class":161},[152,3316,392],{"class":248},[152,3318,3319],{"class":154,"line":279},[152,3320,415],{"emptyLinePlaceholder":414},[152,3322,3323,3325,3327,3329,3331],{"class":154,"line":290},[152,3324,234],{"class":233},[152,3326,237],{"class":233},[152,3328,379],{"class":240},[152,3330,245],{"class":244},[152,3332,249],{"class":248},[152,3334,3335,3337,3339],{"class":154,"line":300},[152,3336,256],{"class":255},[152,3338,259],{"class":248},[152,3340,436],{"class":244},[152,3342,3343,3345,3347],{"class":154,"line":318},[152,3344,441],{"class":240},[152,3346,245],{"class":244},[152,3348,249],{"class":248},[152,3350,3351,3353,3355,3357,3359,3361,3363,3365,3367],{"class":154,"line":324},[152,3352,450],{"class":255},[152,3354,259],{"class":248},[152,3356,376],{"class":248},[152,3358,457],{"class":255},[152,3360,259],{"class":248},[152,3362,308],{"class":248},[152,3364,3170],{"class":161},[152,3366,265],{"class":248},[152,3368,469],{"class":248},[152,3370,3371,3374,3376],{"class":154,"line":330},[152,3372,3373],{"class":255},"      routes",[152,3375,259],{"class":248},[152,3377,287],{"class":248},[152,3379,3380,3383,3385,3387,3389,3391,3393,3395,3397,3399,3401],{"class":154,"line":479},[152,3381,3382],{"class":248},"        '",[152,3384,3194],{"class":255},[152,3386,265],{"class":248},[152,3388,259],{"class":248},[152,3390,376],{"class":248},[152,3392,457],{"class":255},[152,3394,259],{"class":248},[152,3396,308],{"class":248},[152,3398,3209],{"class":161},[152,3400,265],{"class":248},[152,3402,469],{"class":248},[152,3404,3405,3407,3409,3411,3413,3415,3417,3419,3421,3423,3425],{"class":154,"line":487},[152,3406,3382],{"class":248},[152,3408,3220],{"class":255},[152,3410,265],{"class":248},[152,3412,259],{"class":248},[152,3414,376],{"class":248},[152,3416,457],{"class":255},[152,3418,259],{"class":248},[152,3420,308],{"class":248},[152,3422,3235],{"class":161},[152,3424,265],{"class":248},[152,3426,469],{"class":248},[152,3428,3429],{"class":154,"line":1068},[152,3430,3431],{"class":248},"      },\n",[152,3433,3434,3436],{"class":154,"line":1076},[152,3435,474],{"class":248},[152,3437,336],{"class":244},[152,3439,3440,3442],{"class":154,"line":1106},[152,3441,482],{"class":244},[152,3443,276],{"class":248},[152,3445,3446,3448],{"class":154,"line":1149},[152,3447,333],{"class":248},[152,3449,336],{"class":244},[141,3451,3453],{"className":223,"code":3452,"filename":2968,"language":226,"meta":147,"style":147},"import { defineNitroConfig } from 'nitropack/config'\nimport evlog from 'evlog/nitro'\n\nexport default defineNitroConfig({\n  modules: [\n    evlog({\n      env: { service: 'default-service' },\n      routes: {\n        '/api/auth/**': { service: 'auth-service' },\n        '/api/payment/**': { service: 'payment-service' },\n      },\n    })\n  ],\n})\n",[149,3454,3455,3473,3487,3491,3503,3511,3519,3539,3547,3571,3595,3599,3605,3611],{"__ignoreMap":147},[152,3456,3457,3459,3461,3463,3465,3467,3469,3471],{"class":154,"line":155},[152,3458,373],{"class":233},[152,3460,376],{"class":248},[152,3462,675],{"class":244},[152,3464,382],{"class":248},[152,3466,385],{"class":233},[152,3468,308],{"class":248},[152,3470,684],{"class":161},[152,3472,392],{"class":248},[152,3474,3475,3477,3479,3481,3483,3485],{"class":154,"line":252},[152,3476,373],{"class":233},[152,3478,399],{"class":244},[152,3480,402],{"class":233},[152,3482,308],{"class":248},[152,3484,699],{"class":161},[152,3486,392],{"class":248},[152,3488,3489],{"class":154,"line":279},[152,3490,415],{"emptyLinePlaceholder":414},[152,3492,3493,3495,3497,3499,3501],{"class":154,"line":290},[152,3494,234],{"class":233},[152,3496,237],{"class":233},[152,3498,675],{"class":240},[152,3500,245],{"class":244},[152,3502,249],{"class":248},[152,3504,3505,3507,3509],{"class":154,"line":300},[152,3506,256],{"class":255},[152,3508,259],{"class":248},[152,3510,436],{"class":244},[152,3512,3513,3515,3517],{"class":154,"line":318},[152,3514,441],{"class":240},[152,3516,245],{"class":244},[152,3518,249],{"class":248},[152,3520,3521,3523,3525,3527,3529,3531,3533,3535,3537],{"class":154,"line":324},[152,3522,450],{"class":255},[152,3524,259],{"class":248},[152,3526,376],{"class":248},[152,3528,457],{"class":255},[152,3530,259],{"class":248},[152,3532,308],{"class":248},[152,3534,3170],{"class":161},[152,3536,265],{"class":248},[152,3538,469],{"class":248},[152,3540,3541,3543,3545],{"class":154,"line":330},[152,3542,3373],{"class":255},[152,3544,259],{"class":248},[152,3546,287],{"class":248},[152,3548,3549,3551,3553,3555,3557,3559,3561,3563,3565,3567,3569],{"class":154,"line":479},[152,3550,3382],{"class":248},[152,3552,3194],{"class":255},[152,3554,265],{"class":248},[152,3556,259],{"class":248},[152,3558,376],{"class":248},[152,3560,457],{"class":255},[152,3562,259],{"class":248},[152,3564,308],{"class":248},[152,3566,3209],{"class":161},[152,3568,265],{"class":248},[152,3570,469],{"class":248},[152,3572,3573,3575,3577,3579,3581,3583,3585,3587,3589,3591,3593],{"class":154,"line":487},[152,3574,3382],{"class":248},[152,3576,3220],{"class":255},[152,3578,265],{"class":248},[152,3580,259],{"class":248},[152,3582,376],{"class":248},[152,3584,457],{"class":255},[152,3586,259],{"class":248},[152,3588,308],{"class":248},[152,3590,3235],{"class":161},[152,3592,265],{"class":248},[152,3594,469],{"class":248},[152,3596,3597],{"class":154,"line":1068},[152,3598,3431],{"class":248},[152,3600,3601,3603],{"class":154,"line":1076},[152,3602,474],{"class":248},[152,3604,336],{"class":244},[152,3606,3607,3609],{"class":154,"line":1106},[152,3608,482],{"class":244},[152,3610,276],{"class":248},[152,3612,3613,3615],{"class":154,"line":1149},[152,3614,333],{"class":248},[152,3616,336],{"class":244},[129,3618,3619,3620,3623,3624,3628],{},"You can also override the service name per handler using ",[149,3621,3622],{},"useLogger(event, 'service-name')",". See ",[1331,3625,3627],{"href":3626},"/getting-started/quick-start#service-identification","Quick Start - Service Identification"," for details.",[214,3630,2658],{"id":3631},"sampling",[129,3633,3634],{},"At scale, logging everything can become expensive. evlog supports two sampling strategies:",[2064,3636,3638],{"id":3637},"head-sampling-rates","Head Sampling (rates)",[129,3640,3641,3642,3645],{},"Random sampling based on log level, decided ",[911,3643,3644],{},"before"," the request completes:",[138,3647,3648,3786,3922],{},[141,3649,3651],{"className":223,"code":3650,"filename":225,"language":226,"meta":147,"style":147},"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",[149,3652,3653,3665,3683,3691,3700,3709,3723,3738,3753,3768,3772,3776,3780],{"__ignoreMap":147},[152,3654,3655,3657,3659,3661,3663],{"class":154,"line":155},[152,3656,234],{"class":233},[152,3658,237],{"class":233},[152,3660,241],{"class":240},[152,3662,245],{"class":244},[152,3664,249],{"class":248},[152,3666,3667,3669,3671,3673,3675,3677,3679,3681],{"class":154,"line":252},[152,3668,256],{"class":255},[152,3670,259],{"class":248},[152,3672,262],{"class":244},[152,3674,265],{"class":248},[152,3676,268],{"class":161},[152,3678,265],{"class":248},[152,3680,273],{"class":244},[152,3682,276],{"class":248},[152,3684,3685,3687,3689],{"class":154,"line":279},[152,3686,282],{"class":255},[152,3688,259],{"class":248},[152,3690,287],{"class":248},[152,3692,3693,3696,3698],{"class":154,"line":290},[152,3694,3695],{"class":255},"    sampling",[152,3697,259],{"class":248},[152,3699,287],{"class":248},[152,3701,3702,3705,3707],{"class":154,"line":300},[152,3703,3704],{"class":255},"      rates",[152,3706,259],{"class":248},[152,3708,287],{"class":248},[152,3710,3711,3714,3716,3718,3720],{"class":154,"line":318},[152,3712,3713],{"class":255},"        info",[152,3715,259],{"class":248},[152,3717,2221],{"class":1141},[152,3719,955],{"class":248},[152,3721,3722],{"class":2054},"    // Keep 10% of info logs\n",[152,3724,3725,3728,3730,3733,3735],{"class":154,"line":324},[152,3726,3727],{"class":255},"        warn",[152,3729,259],{"class":248},[152,3731,3732],{"class":1141}," 50",[152,3734,955],{"class":248},[152,3736,3737],{"class":2054},"    // Keep 50% of warning logs\n",[152,3739,3740,3743,3745,3748,3750],{"class":154,"line":330},[152,3741,3742],{"class":255},"        debug",[152,3744,259],{"class":248},[152,3746,3747],{"class":1141}," 5",[152,3749,955],{"class":248},[152,3751,3752],{"class":2054},"    // Keep 5% of debug logs\n",[152,3754,3755,3758,3760,3763,3765],{"class":154,"line":479},[152,3756,3757],{"class":255},"        error",[152,3759,259],{"class":248},[152,3761,3762],{"class":1141}," 100",[152,3764,955],{"class":248},[152,3766,3767],{"class":2054},"  // Always keep errors (default)\n",[152,3769,3770],{"class":154,"line":487},[152,3771,3431],{"class":248},[152,3773,3774],{"class":154,"line":1068},[152,3775,321],{"class":248},[152,3777,3778],{"class":154,"line":1076},[152,3779,327],{"class":248},[152,3781,3782,3784],{"class":154,"line":1106},[152,3783,333],{"class":248},[152,3785,336],{"class":244},[141,3787,3789],{"className":223,"code":3788,"filename":2842,"language":226,"meta":147,"style":147},"import { defineConfig } from 'nitro'\nimport evlog from 'evlog/nitro/v3'\n\nexport default defineConfig({\n  modules: [\n    evlog({\n      sampling: {\n        rates: { info: 10, warn: 50, debug: 5 },\n      },\n    })\n  ],\n})\n",[149,3790,3791,3809,3823,3827,3839,3847,3855,3864,3900,3904,3910,3916],{"__ignoreMap":147},[152,3792,3793,3795,3797,3799,3801,3803,3805,3807],{"class":154,"line":155},[152,3794,373],{"class":233},[152,3796,376],{"class":248},[152,3798,379],{"class":244},[152,3800,382],{"class":248},[152,3802,385],{"class":233},[152,3804,308],{"class":248},[152,3806,361],{"class":161},[152,3808,392],{"class":248},[152,3810,3811,3813,3815,3817,3819,3821],{"class":154,"line":252},[152,3812,373],{"class":233},[152,3814,399],{"class":244},[152,3816,402],{"class":233},[152,3818,308],{"class":248},[152,3820,407],{"class":161},[152,3822,392],{"class":248},[152,3824,3825],{"class":154,"line":279},[152,3826,415],{"emptyLinePlaceholder":414},[152,3828,3829,3831,3833,3835,3837],{"class":154,"line":290},[152,3830,234],{"class":233},[152,3832,237],{"class":233},[152,3834,379],{"class":240},[152,3836,245],{"class":244},[152,3838,249],{"class":248},[152,3840,3841,3843,3845],{"class":154,"line":300},[152,3842,256],{"class":255},[152,3844,259],{"class":248},[152,3846,436],{"class":244},[152,3848,3849,3851,3853],{"class":154,"line":318},[152,3850,441],{"class":240},[152,3852,245],{"class":244},[152,3854,249],{"class":248},[152,3856,3857,3860,3862],{"class":154,"line":324},[152,3858,3859],{"class":255},"      sampling",[152,3861,259],{"class":248},[152,3863,287],{"class":248},[152,3865,3866,3869,3871,3873,3876,3878,3880,3882,3885,3887,3889,3891,3894,3896,3898],{"class":154,"line":330},[152,3867,3868],{"class":255},"        rates",[152,3870,259],{"class":248},[152,3872,376],{"class":248},[152,3874,3875],{"class":255}," info",[152,3877,259],{"class":248},[152,3879,2221],{"class":1141},[152,3881,955],{"class":248},[152,3883,3884],{"class":255}," warn",[152,3886,259],{"class":248},[152,3888,3732],{"class":1141},[152,3890,955],{"class":248},[152,3892,3893],{"class":255}," debug",[152,3895,259],{"class":248},[152,3897,3747],{"class":1141},[152,3899,469],{"class":248},[152,3901,3902],{"class":154,"line":479},[152,3903,3431],{"class":248},[152,3905,3906,3908],{"class":154,"line":487},[152,3907,474],{"class":248},[152,3909,336],{"class":244},[152,3911,3912,3914],{"class":154,"line":1068},[152,3913,482],{"class":244},[152,3915,276],{"class":248},[152,3917,3918,3920],{"class":154,"line":1076},[152,3919,333],{"class":248},[152,3921,336],{"class":244},[141,3923,3925],{"className":223,"code":3924,"filename":2968,"language":226,"meta":147,"style":147},"import { defineNitroConfig } from 'nitropack/config'\nimport evlog from 'evlog/nitro'\n\nexport default defineNitroConfig({\n  modules: [\n    evlog({\n      sampling: {\n        rates: { info: 10, warn: 50, debug: 5 },\n      },\n    })\n  ],\n})\n",[149,3926,3927,3945,3959,3963,3975,3983,3991,3999,4031,4035,4041,4047],{"__ignoreMap":147},[152,3928,3929,3931,3933,3935,3937,3939,3941,3943],{"class":154,"line":155},[152,3930,373],{"class":233},[152,3932,376],{"class":248},[152,3934,675],{"class":244},[152,3936,382],{"class":248},[152,3938,385],{"class":233},[152,3940,308],{"class":248},[152,3942,684],{"class":161},[152,3944,392],{"class":248},[152,3946,3947,3949,3951,3953,3955,3957],{"class":154,"line":252},[152,3948,373],{"class":233},[152,3950,399],{"class":244},[152,3952,402],{"class":233},[152,3954,308],{"class":248},[152,3956,699],{"class":161},[152,3958,392],{"class":248},[152,3960,3961],{"class":154,"line":279},[152,3962,415],{"emptyLinePlaceholder":414},[152,3964,3965,3967,3969,3971,3973],{"class":154,"line":290},[152,3966,234],{"class":233},[152,3968,237],{"class":233},[152,3970,675],{"class":240},[152,3972,245],{"class":244},[152,3974,249],{"class":248},[152,3976,3977,3979,3981],{"class":154,"line":300},[152,3978,256],{"class":255},[152,3980,259],{"class":248},[152,3982,436],{"class":244},[152,3984,3985,3987,3989],{"class":154,"line":318},[152,3986,441],{"class":240},[152,3988,245],{"class":244},[152,3990,249],{"class":248},[152,3992,3993,3995,3997],{"class":154,"line":324},[152,3994,3859],{"class":255},[152,3996,259],{"class":248},[152,3998,287],{"class":248},[152,4000,4001,4003,4005,4007,4009,4011,4013,4015,4017,4019,4021,4023,4025,4027,4029],{"class":154,"line":330},[152,4002,3868],{"class":255},[152,4004,259],{"class":248},[152,4006,376],{"class":248},[152,4008,3875],{"class":255},[152,4010,259],{"class":248},[152,4012,2221],{"class":1141},[152,4014,955],{"class":248},[152,4016,3884],{"class":255},[152,4018,259],{"class":248},[152,4020,3732],{"class":1141},[152,4022,955],{"class":248},[152,4024,3893],{"class":255},[152,4026,259],{"class":248},[152,4028,3747],{"class":1141},[152,4030,469],{"class":248},[152,4032,4033],{"class":154,"line":479},[152,4034,3431],{"class":248},[152,4036,4037,4039],{"class":154,"line":487},[152,4038,474],{"class":248},[152,4040,336],{"class":244},[152,4042,4043,4045],{"class":154,"line":1068},[152,4044,482],{"class":244},[152,4046,276],{"class":248},[152,4048,4049,4051],{"class":154,"line":1076},[152,4050,333],{"class":248},[152,4052,336],{"class":244},[907,4054,4056,4059,4060,4063,4064,602],{"color":4055,"icon":49},"success",[911,4057,4058],{},"Errors are always logged by default."," Even if you don't specify ",[149,4061,4062],{},"error: 100",", error logs are never sampled out unless you explicitly set ",[149,4065,4066],{},"error: 0",[2064,4068,4070],{"id":4069},"tail-sampling-keep","Tail Sampling (keep)",[129,4072,4073,4074,4077],{},"Force-keep logs based on request outcome, evaluated ",[911,4075,4076],{},"after"," the request completes. Useful to always capture slow requests or critical paths even when head sampling would drop them:",[141,4079,4081],{"className":223,"code":4080,"language":226,"meta":147,"style":147},"// Works the same in Nuxt, Nitro v2, and Nitro v3\nsampling: {\n  rates: { info: 10 },\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",[149,4082,4083,4088,4096,4113,4122,4141,4157,4177,4183],{"__ignoreMap":147},[152,4084,4085],{"class":154,"line":155},[152,4086,4087],{"class":2054},"// Works the same in Nuxt, Nitro v2, and Nitro v3\n",[152,4089,4090,4092,4094],{"class":154,"line":252},[152,4091,3631],{"class":158},[152,4093,259],{"class":248},[152,4095,287],{"class":248},[152,4097,4098,4101,4103,4105,4107,4109,4111],{"class":154,"line":279},[152,4099,4100],{"class":158},"  rates",[152,4102,259],{"class":248},[152,4104,376],{"class":248},[152,4106,3875],{"class":158},[152,4108,259],{"class":248},[152,4110,2221],{"class":1141},[152,4112,469],{"class":248},[152,4114,4115,4118,4120],{"class":154,"line":290},[152,4116,4117],{"class":158},"  keep",[152,4119,259],{"class":248},[152,4121,436],{"class":255},[152,4123,4124,4127,4130,4132,4135,4138],{"class":154,"line":300},[152,4125,4126],{"class":248},"    {",[152,4128,4129],{"class":255}," duration",[152,4131,259],{"class":248},[152,4133,4134],{"class":1141}," 1000",[152,4136,4137],{"class":248}," },",[152,4139,4140],{"class":2054},"           // Always keep if duration >= 1000ms\n",[152,4142,4143,4145,4147,4149,4152,4154],{"class":154,"line":318},[152,4144,4126],{"class":248},[152,4146,1136],{"class":255},[152,4148,259],{"class":248},[152,4150,4151],{"class":1141}," 400",[152,4153,4137],{"class":248},[152,4155,4156],{"class":2054},"              // Always keep if status >= 400\n",[152,4158,4159,4161,4163,4165,4167,4170,4172,4174],{"class":154,"line":324},[152,4160,4126],{"class":248},[152,4162,1574],{"class":255},[152,4164,259],{"class":248},[152,4166,308],{"class":248},[152,4168,4169],{"class":161},"/api/critical/**",[152,4171,265],{"class":248},[152,4173,4137],{"class":248},[152,4175,4176],{"class":2054}," // Always keep critical paths\n",[152,4178,4179,4181],{"class":154,"line":330},[152,4180,482],{"class":255},[152,4182,276],{"class":248},[152,4184,4185],{"class":154,"line":479},[152,4186,1273],{"class":248},[129,4188,4189,4190,4193],{},"Conditions use ",[149,4191,4192],{},">="," comparison and follow OR logic (any match = keep).",[2064,4195,4197],{"id":4196},"custom-tail-sampling-hook","Custom Tail Sampling Hook",[129,4199,4200,4201,4204],{},"For business-specific conditions (premium users, feature flags, etc.), use the ",[149,4202,4203],{},"evlog:emit:keep"," hook:",[141,4206,4209],{"className":223,"code":4207,"filename":4208,"language":226,"meta":147,"style":147},"export default defineNitroPlugin((nitroApp) => {\n  nitroApp.hooks.hook('evlog:emit:keep', (ctx) => {\n    const user = ctx.context.user as { premium?: boolean } | undefined\n\n    if (user?.premium) {\n      ctx.shouldKeep = true\n    }\n  })\n})\n","server/plugins/evlog-sampling.ts",[149,4210,4211,4233,4269,4312,4316,4335,4350,4354,4360],{"__ignoreMap":147},[152,4212,4213,4215,4217,4220,4222,4224,4227,4229,4231],{"class":154,"line":155},[152,4214,234],{"class":233},[152,4216,237],{"class":233},[152,4218,4219],{"class":240}," defineNitroPlugin",[152,4221,245],{"class":244},[152,4223,245],{"class":248},[152,4225,4226],{"class":566},"nitroApp",[152,4228,570],{"class":248},[152,4230,573],{"class":559},[152,4232,287],{"class":248},[152,4234,4235,4238,4240,4243,4245,4248,4250,4252,4254,4256,4258,4260,4263,4265,4267],{"class":154,"line":252},[152,4236,4237],{"class":244},"  nitroApp",[152,4239,602],{"class":248},[152,4241,4242],{"class":244},"hooks",[152,4244,602],{"class":248},[152,4246,4247],{"class":240},"hook",[152,4249,245],{"class":255},[152,4251,265],{"class":248},[152,4253,4203],{"class":161},[152,4255,265],{"class":248},[152,4257,955],{"class":248},[152,4259,563],{"class":248},[152,4261,4262],{"class":566},"ctx",[152,4264,570],{"class":248},[152,4266,573],{"class":559},[152,4268,287],{"class":248},[152,4270,4271,4273,4276,4278,4281,4283,4286,4288,4291,4293,4295,4298,4301,4304,4306,4309],{"class":154,"line":279},[152,4272,1049],{"class":559},[152,4274,4275],{"class":244}," user",[152,4277,586],{"class":248},[152,4279,4280],{"class":244}," ctx",[152,4282,602],{"class":248},[152,4284,4285],{"class":244},"context",[152,4287,602],{"class":248},[152,4289,4290],{"class":244},"user",[152,4292,1218],{"class":233},[152,4294,376],{"class":248},[152,4296,4297],{"class":255}," premium",[152,4299,4300],{"class":248},"?:",[152,4302,4303],{"class":158}," boolean",[152,4305,382],{"class":248},[152,4307,4308],{"class":248}," |",[152,4310,4311],{"class":158}," undefined\n",[152,4313,4314],{"class":154,"line":290},[152,4315,415],{"emptyLinePlaceholder":414},[152,4317,4318,4321,4323,4325,4328,4331,4333],{"class":154,"line":300},[152,4319,4320],{"class":233},"    if",[152,4322,563],{"class":255},[152,4324,4290],{"class":244},[152,4326,4327],{"class":248},"?.",[152,4329,4330],{"class":244},"premium",[152,4332,1200],{"class":255},[152,4334,249],{"class":248},[152,4336,4337,4340,4342,4345,4347],{"class":154,"line":318},[152,4338,4339],{"class":244},"      ctx",[152,4341,602],{"class":248},[152,4343,4344],{"class":244},"shouldKeep",[152,4346,586],{"class":248},[152,4348,4349],{"class":641}," true\n",[152,4351,4352],{"class":154,"line":324},[152,4353,1262],{"class":248},[152,4355,4356,4358],{"class":154,"line":330},[152,4357,1616],{"class":248},[152,4359,336],{"class":255},[152,4361,4362,4364],{"class":154,"line":479},[152,4363,333],{"class":248},[152,4365,336],{"class":244},[129,4367,4368,4369,4372,4373,343,4375,343,4378,343,4380,4382,4383,602],{},"The hook receives a ",[149,4370,4371],{},"TailSamplingContext"," with ",[149,4374,1171],{},[149,4376,4377],{},"duration",[149,4379,1587],{},[149,4381,1569],{},", and the full accumulated ",[149,4384,4285],{},[214,4386,4388],{"id":4387},"log-draining","Log Draining",[129,4390,4391,4392,4395,4396,4399],{},"Send logs to external services like Axiom, Loki, or custom endpoints using the ",[149,4393,4394],{},"evlog:drain"," hook. The hook is called in ",[911,4397,4398],{},"fire-and-forget"," mode, meaning it never blocks the HTTP response.",[141,4401,4404],{"className":223,"code":4402,"filename":4403,"language":226,"meta":147,"style":147},"export default defineNitroPlugin((nitroApp) => {\n  nitroApp.hooks.hook('evlog:drain', async (ctx) => {\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-drain.ts",[149,4405,4406,4426,4460,4479,4494,4535,4564,4570,4576],{"__ignoreMap":147},[152,4407,4408,4410,4412,4414,4416,4418,4420,4422,4424],{"class":154,"line":155},[152,4409,234],{"class":233},[152,4411,237],{"class":233},[152,4413,4219],{"class":240},[152,4415,245],{"class":244},[152,4417,245],{"class":248},[152,4419,4226],{"class":566},[152,4421,570],{"class":248},[152,4423,573],{"class":559},[152,4425,287],{"class":248},[152,4427,4428,4430,4432,4434,4436,4438,4440,4442,4444,4446,4448,4450,4452,4454,4456,4458],{"class":154,"line":252},[152,4429,4237],{"class":244},[152,4431,602],{"class":248},[152,4433,4242],{"class":244},[152,4435,602],{"class":248},[152,4437,4247],{"class":240},[152,4439,245],{"class":255},[152,4441,265],{"class":248},[152,4443,4394],{"class":161},[152,4445,265],{"class":248},[152,4447,955],{"class":248},[152,4449,1502],{"class":559},[152,4451,563],{"class":248},[152,4453,4262],{"class":566},[152,4455,570],{"class":248},[152,4457,573],{"class":559},[152,4459,287],{"class":248},[152,4461,4462,4464,4466,4468,4470,4473,4475,4477],{"class":154,"line":279},[152,4463,1607],{"class":233},[152,4465,1030],{"class":240},[152,4467,245],{"class":255},[152,4469,265],{"class":248},[152,4471,4472],{"class":161},"https://api.axiom.co/v1/datasets/logs/ingest",[152,4474,265],{"class":248},[152,4476,955],{"class":248},[152,4478,287],{"class":248},[152,4480,4481,4484,4486,4488,4490,4492],{"class":154,"line":290},[152,4482,4483],{"class":255},"      method",[152,4485,259],{"class":248},[152,4487,308],{"class":248},[152,4489,2370],{"class":161},[152,4491,265],{"class":248},[152,4493,276],{"class":248},[152,4495,4496,4499,4501,4503,4506,4508,4511,4514,4517,4520,4522,4525,4527,4530,4533],{"class":154,"line":300},[152,4497,4498],{"class":255},"      headers",[152,4500,259],{"class":248},[152,4502,376],{"class":248},[152,4504,4505],{"class":255}," Authorization",[152,4507,259],{"class":248},[152,4509,4510],{"class":248}," `",[152,4512,4513],{"class":161},"Bearer ",[152,4515,4516],{"class":248},"${",[152,4518,4519],{"class":244},"process",[152,4521,602],{"class":248},[152,4523,4524],{"class":244},"env",[152,4526,602],{"class":248},[152,4528,4529],{"class":244},"AXIOM_TOKEN",[152,4531,4532],{"class":248},"}`",[152,4534,469],{"class":248},[152,4536,4537,4540,4542,4545,4547,4550,4553,4555,4557,4559,4562],{"class":154,"line":318},[152,4538,4539],{"class":255},"      body",[152,4541,259],{"class":248},[152,4543,4544],{"class":244}," JSON",[152,4546,602],{"class":248},[152,4548,4549],{"class":240},"stringify",[152,4551,4552],{"class":255},"([",[152,4554,4262],{"class":244},[152,4556,602],{"class":248},[152,4558,567],{"class":244},[152,4560,4561],{"class":255},"])",[152,4563,276],{"class":248},[152,4565,4566,4568],{"class":154,"line":324},[152,4567,474],{"class":248},[152,4569,336],{"class":255},[152,4571,4572,4574],{"class":154,"line":330},[152,4573,1616],{"class":248},[152,4575,336],{"class":255},[152,4577,4578,4580],{"class":154,"line":479},[152,4579,333],{"class":248},[152,4581,336],{"class":244},[129,4583,4368,4584,4586],{},[149,4585,2199],{}," with:",[1299,4588,4589,4598,4609],{},[1302,4590,4591,4593,4594,4597],{},[149,4592,567],{},": The complete ",[149,4595,4596],{},"WideEvent"," (timestamp, level, service, and all accumulated context)",[1302,4599,4600,4602,4603,343,4605,343,4607,570],{},[149,4601,1035],{},": Optional request metadata (",[149,4604,1569],{},[149,4606,1587],{},[149,4608,1306],{},[1302,4610,4611,4614],{},[149,4612,4613],{},"headers",": HTTP headers from the original request (useful for correlation with external services)",[907,4616,4617,4620,4621,343,4624,343,4627,343,4630,343,4633,343,4636,4639],{"color":4055,"icon":49},[911,4618,4619],{},"Security:"," Sensitive headers (",[149,4622,4623],{},"authorization",[149,4625,4626],{},"cookie",[149,4628,4629],{},"set-cookie",[149,4631,4632],{},"x-api-key",[149,4634,4635],{},"x-auth-token",[149,4637,4638],{},"proxy-authorization",") are automatically filtered out and never passed to the drain hook.",[2064,4641,4643],{"id":4642},"using-headers-for-external-service-correlation","Using Headers for External Service Correlation",[129,4645,4646,4647,4649],{},"The ",[149,4648,4613],{}," field allows you to correlate logs with external services like PostHog, Sentry, or custom analytics:",[141,4651,4654],{"className":223,"code":4652,"filename":4653,"language":226,"meta":147,"style":147},"export default defineNitroPlugin((nitroApp) => {\n  const posthog = usePostHog()\n\n  nitroApp.hooks.hook('evlog:drain', (ctx) => {\n    if (!posthog) return\n\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    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",[149,4655,4656,4676,4690,4694,4726,4743,4747,4777,4805,4809,4824,4828,4842,4849,4865,4874,4887,4898,4902,4908,4914],{"__ignoreMap":147},[152,4657,4658,4660,4662,4664,4666,4668,4670,4672,4674],{"class":154,"line":155},[152,4659,234],{"class":233},[152,4661,237],{"class":233},[152,4663,4219],{"class":240},[152,4665,245],{"class":244},[152,4667,245],{"class":248},[152,4669,4226],{"class":566},[152,4671,570],{"class":248},[152,4673,573],{"class":559},[152,4675,287],{"class":248},[152,4677,4678,4680,4683,4685,4688],{"class":154,"line":252},[152,4679,580],{"class":559},[152,4681,4682],{"class":244}," posthog",[152,4684,586],{"class":248},[152,4686,4687],{"class":240}," usePostHog",[152,4689,1474],{"class":255},[152,4691,4692],{"class":154,"line":279},[152,4693,415],{"emptyLinePlaceholder":414},[152,4695,4696,4698,4700,4702,4704,4706,4708,4710,4712,4714,4716,4718,4720,4722,4724],{"class":154,"line":290},[152,4697,4237],{"class":244},[152,4699,602],{"class":248},[152,4701,4242],{"class":244},[152,4703,602],{"class":248},[152,4705,4247],{"class":240},[152,4707,245],{"class":255},[152,4709,265],{"class":248},[152,4711,4394],{"class":161},[152,4713,265],{"class":248},[152,4715,955],{"class":248},[152,4717,563],{"class":248},[152,4719,4262],{"class":566},[152,4721,570],{"class":248},[152,4723,573],{"class":559},[152,4725,287],{"class":248},[152,4727,4728,4730,4732,4735,4738,4740],{"class":154,"line":300},[152,4729,4320],{"class":233},[152,4731,563],{"class":255},[152,4733,4734],{"class":248},"!",[152,4736,4737],{"class":244},"posthog",[152,4739,1200],{"class":255},[152,4741,4742],{"class":233},"return\n",[152,4744,4745],{"class":154,"line":318},[152,4746,415],{"emptyLinePlaceholder":414},[152,4748,4749,4751,4754,4756,4758,4760,4762,4764,4767,4769,4772,4774],{"class":154,"line":324},[152,4750,1049],{"class":559},[152,4752,4753],{"class":244}," sessionId",[152,4755,586],{"class":248},[152,4757,4280],{"class":244},[152,4759,602],{"class":248},[152,4761,4613],{"class":244},[152,4763,4327],{"class":248},[152,4765,4766],{"class":255},"[",[152,4768,265],{"class":248},[152,4770,4771],{"class":161},"x-posthog-session-id",[152,4773,265],{"class":248},[152,4775,4776],{"class":255},"]\n",[152,4778,4779,4781,4784,4786,4788,4790,4792,4794,4796,4798,4801,4803],{"class":154,"line":330},[152,4780,1049],{"class":559},[152,4782,4783],{"class":244}," distinctId",[152,4785,586],{"class":248},[152,4787,4280],{"class":244},[152,4789,602],{"class":248},[152,4791,4613],{"class":244},[152,4793,4327],{"class":248},[152,4795,4766],{"class":255},[152,4797,265],{"class":248},[152,4799,4800],{"class":161},"x-posthog-distinct-id",[152,4802,265],{"class":248},[152,4804,4776],{"class":255},[152,4806,4807],{"class":154,"line":479},[152,4808,415],{"emptyLinePlaceholder":414},[152,4810,4811,4813,4815,4817,4820,4822],{"class":154,"line":487},[152,4812,4320],{"class":233},[152,4814,563],{"class":255},[152,4816,4734],{"class":248},[152,4818,4819],{"class":244},"distinctId",[152,4821,1200],{"class":255},[152,4823,4742],{"class":233},[152,4825,4826],{"class":154,"line":1068},[152,4827,415],{"emptyLinePlaceholder":414},[152,4829,4830,4833,4835,4838,4840],{"class":154,"line":1076},[152,4831,4832],{"class":244},"    posthog",[152,4834,602],{"class":248},[152,4836,4837],{"class":240},"capture",[152,4839,245],{"class":255},[152,4841,249],{"class":248},[152,4843,4844,4847],{"class":154,"line":1106},[152,4845,4846],{"class":244},"      distinctId",[152,4848,276],{"class":248},[152,4850,4851,4854,4856,4858,4861,4863],{"class":154,"line":1149},[152,4852,4853],{"class":255},"      event",[152,4855,259],{"class":248},[152,4857,308],{"class":248},[152,4859,4860],{"class":161},"server_log",[152,4862,265],{"class":248},[152,4864,276],{"class":248},[152,4866,4867,4870,4872],{"class":154,"line":1178},[152,4868,4869],{"class":255},"      properties",[152,4871,259],{"class":248},[152,4873,287],{"class":248},[152,4875,4876,4879,4881,4883,4885],{"class":154,"line":1187},[152,4877,4878],{"class":248},"        ...",[152,4880,4262],{"class":244},[152,4882,602],{"class":248},[152,4884,567],{"class":244},[152,4886,276],{"class":248},[152,4888,4889,4892,4894,4896],{"class":154,"line":1205},[152,4890,4891],{"class":255},"        $session_id",[152,4893,259],{"class":248},[152,4895,4753],{"class":244},[152,4897,276],{"class":248},[152,4899,4900],{"class":154,"line":1226},[152,4901,3431],{"class":248},[152,4903,4904,4906],{"class":154,"line":1250},[152,4905,474],{"class":248},[152,4907,336],{"class":255},[152,4909,4910,4912],{"class":154,"line":1259},[152,4911,1616],{"class":248},[152,4913,336],{"class":255},[152,4915,4916,4918],{"class":154,"line":1265},[152,4917,333],{"class":248},[152,4919,336],{"class":244},[214,4921,4923],{"id":4922},"event-enrichment","Event Enrichment",[129,4925,4926],{},"Enrich your wide events with derived context like user agent, geo data, request size, and trace context. Enrichers run after emit, before drain.",[141,4928,4931],{"className":223,"code":4929,"filename":4930,"language":226,"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",[149,4932,4933,4939,4946,4953,4960,4967,4980,4984,5004,5015,5025,5034,5043,5052,5057,5061,5094,5122,5128],{"__ignoreMap":147},[152,4934,4935,4937],{"class":154,"line":155},[152,4936,373],{"class":233},[152,4938,287],{"class":248},[152,4940,4941,4944],{"class":154,"line":252},[152,4942,4943],{"class":244},"  createUserAgentEnricher",[152,4945,276],{"class":248},[152,4947,4948,4951],{"class":154,"line":279},[152,4949,4950],{"class":244},"  createGeoEnricher",[152,4952,276],{"class":248},[152,4954,4955,4958],{"class":154,"line":290},[152,4956,4957],{"class":244},"  createRequestSizeEnricher",[152,4959,276],{"class":248},[152,4961,4962,4965],{"class":154,"line":300},[152,4963,4964],{"class":244},"  createTraceContextEnricher",[152,4966,276],{"class":248},[152,4968,4969,4971,4973,4975,4978],{"class":154,"line":318},[152,4970,333],{"class":248},[152,4972,385],{"class":233},[152,4974,308],{"class":248},[152,4976,4977],{"class":161},"evlog/enrichers",[152,4979,392],{"class":248},[152,4981,4982],{"class":154,"line":324},[152,4983,415],{"emptyLinePlaceholder":414},[152,4985,4986,4988,4990,4992,4994,4996,4998,5000,5002],{"class":154,"line":330},[152,4987,234],{"class":233},[152,4989,237],{"class":233},[152,4991,4219],{"class":240},[152,4993,245],{"class":244},[152,4995,245],{"class":248},[152,4997,4226],{"class":566},[152,4999,570],{"class":248},[152,5001,573],{"class":559},[152,5003,287],{"class":248},[152,5005,5006,5008,5011,5013],{"class":154,"line":479},[152,5007,580],{"class":559},[152,5009,5010],{"class":244}," enrichers",[152,5012,586],{"class":248},[152,5014,436],{"class":255},[152,5016,5017,5020,5023],{"class":154,"line":487},[152,5018,5019],{"class":240},"    createUserAgentEnricher",[152,5021,5022],{"class":255},"()",[152,5024,276],{"class":248},[152,5026,5027,5030,5032],{"class":154,"line":1068},[152,5028,5029],{"class":240},"    createGeoEnricher",[152,5031,5022],{"class":255},[152,5033,276],{"class":248},[152,5035,5036,5039,5041],{"class":154,"line":1076},[152,5037,5038],{"class":240},"    createRequestSizeEnricher",[152,5040,5022],{"class":255},[152,5042,276],{"class":248},[152,5044,5045,5048,5050],{"class":154,"line":1106},[152,5046,5047],{"class":240},"    createTraceContextEnricher",[152,5049,5022],{"class":255},[152,5051,276],{"class":248},[152,5053,5054],{"class":154,"line":1149},[152,5055,5056],{"class":255},"  ]\n",[152,5058,5059],{"class":154,"line":1178},[152,5060,415],{"emptyLinePlaceholder":414},[152,5062,5063,5065,5067,5069,5071,5073,5075,5077,5080,5082,5084,5086,5088,5090,5092],{"class":154,"line":1187},[152,5064,4237],{"class":244},[152,5066,602],{"class":248},[152,5068,4242],{"class":244},[152,5070,602],{"class":248},[152,5072,4247],{"class":240},[152,5074,245],{"class":255},[152,5076,265],{"class":248},[152,5078,5079],{"class":161},"evlog:enrich",[152,5081,265],{"class":248},[152,5083,955],{"class":248},[152,5085,563],{"class":248},[152,5087,4262],{"class":566},[152,5089,570],{"class":248},[152,5091,573],{"class":559},[152,5093,287],{"class":248},[152,5095,5096,5099,5101,5103,5106,5109,5111,5113,5116,5118,5120],{"class":154,"line":1205},[152,5097,5098],{"class":233},"    for",[152,5100,563],{"class":255},[152,5102,1461],{"class":559},[152,5104,5105],{"class":244}," enricher",[152,5107,5108],{"class":248}," of",[152,5110,5010],{"class":244},[152,5112,1200],{"class":255},[152,5114,5115],{"class":240},"enricher",[152,5117,245],{"class":255},[152,5119,4262],{"class":244},[152,5121,336],{"class":255},[152,5123,5124,5126],{"class":154,"line":1226},[152,5125,1616],{"class":248},[152,5127,336],{"class":255},[152,5129,5130,5132],{"class":154,"line":1250},[152,5131,333],{"class":248},[152,5133,336],{"class":244},[2470,5135,5136,5148],{},[2473,5137,5138],{},[2476,5139,5140,5143,5146],{},[2479,5141,5142],{},"Enricher",[2479,5144,5145],{},"Event Field",[2479,5147,2490],{},[2492,5149,5150,5165,5180,5195],{},[2476,5151,5152,5157,5162],{},[2497,5153,5154],{},[149,5155,5156],{},"createUserAgentEnricher()",[2497,5158,5159],{},[149,5160,5161],{},"userAgent",[2497,5163,5164],{},"Browser, OS, device type from User-Agent header",[2476,5166,5167,5172,5177],{},[2497,5168,5169],{},[149,5170,5171],{},"createGeoEnricher()",[2497,5173,5174],{},[149,5175,5176],{},"geo",[2497,5178,5179],{},"Country, region, city from platform headers (Vercel, Cloudflare)",[2476,5181,5182,5187,5192],{},[2497,5183,5184],{},[149,5185,5186],{},"createRequestSizeEnricher()",[2497,5188,5189],{},[149,5190,5191],{},"requestSize",[2497,5193,5194],{},"Request/response payload sizes from Content-Length",[2476,5196,5197,5202,5207],{},[2497,5198,5199],{},[149,5200,5201],{},"createTraceContextEnricher()",[2497,5203,5204],{},[149,5205,5206],{},"traceContext",[2497,5208,5209],{},"W3C trace context (traceId, spanId) from traceparent header",[129,5211,5212],{},"You can also write custom enrichers to add any derived context:",[141,5214,5216],{"className":223,"code":5215,"filename":4930,"language":226,"meta":147,"style":147},"export default defineNitroPlugin((nitroApp) => {\n  nitroApp.hooks.hook('evlog:enrich', (ctx) => {\n    ctx.event.deploymentId = process.env.DEPLOYMENT_ID\n  })\n})\n",[149,5217,5218,5238,5270,5298,5304],{"__ignoreMap":147},[152,5219,5220,5222,5224,5226,5228,5230,5232,5234,5236],{"class":154,"line":155},[152,5221,234],{"class":233},[152,5223,237],{"class":233},[152,5225,4219],{"class":240},[152,5227,245],{"class":244},[152,5229,245],{"class":248},[152,5231,4226],{"class":566},[152,5233,570],{"class":248},[152,5235,573],{"class":559},[152,5237,287],{"class":248},[152,5239,5240,5242,5244,5246,5248,5250,5252,5254,5256,5258,5260,5262,5264,5266,5268],{"class":154,"line":252},[152,5241,4237],{"class":244},[152,5243,602],{"class":248},[152,5245,4242],{"class":244},[152,5247,602],{"class":248},[152,5249,4247],{"class":240},[152,5251,245],{"class":255},[152,5253,265],{"class":248},[152,5255,5079],{"class":161},[152,5257,265],{"class":248},[152,5259,955],{"class":248},[152,5261,563],{"class":248},[152,5263,4262],{"class":566},[152,5265,570],{"class":248},[152,5267,573],{"class":559},[152,5269,287],{"class":248},[152,5271,5272,5275,5277,5279,5281,5284,5286,5289,5291,5293,5295],{"class":154,"line":279},[152,5273,5274],{"class":244},"    ctx",[152,5276,602],{"class":248},[152,5278,567],{"class":244},[152,5280,602],{"class":248},[152,5282,5283],{"class":244},"deploymentId",[152,5285,586],{"class":248},[152,5287,5288],{"class":244}," process",[152,5290,602],{"class":248},[152,5292,4524],{"class":244},[152,5294,602],{"class":248},[152,5296,5297],{"class":244},"DEPLOYMENT_ID\n",[152,5299,5300,5302],{"class":154,"line":290},[152,5301,1616],{"class":248},[152,5303,336],{"class":255},[152,5305,5306,5308],{"class":154,"line":300},[152,5307,333],{"class":248},[152,5309,336],{"class":244},[129,5311,5312,5313,5316],{},"See the ",[1331,5314,5315],{"href":111},"Enrichers guide"," for full documentation.",[133,5318,5320],{"id":5319},"client-transport-nuxt-only","Client Transport (Nuxt only)",[129,5322,5323,5324,343,5327,5330,5331,5334],{},"Send browser logs to your server for centralized logging. When enabled, client-side ",[149,5325,5326],{},"log.info()",[149,5328,5329],{},"log.error()",", etc. calls are automatically sent to the server via the ",[149,5332,5333],{},"/api/_evlog/ingest"," endpoint.",[141,5336,5338],{"className":223,"code":5337,"filename":225,"language":226,"meta":147,"style":147},"export default defineNuxtConfig({\n  modules: ['evlog/nuxt'],\n  evlog: {\n    transport: {\n      enabled: true,\n      endpoint: '/api/_evlog/ingest',  // default\n    },\n  },\n})\n",[149,5339,5340,5352,5370,5378,5387,5398,5416,5420,5424],{"__ignoreMap":147},[152,5341,5342,5344,5346,5348,5350],{"class":154,"line":155},[152,5343,234],{"class":233},[152,5345,237],{"class":233},[152,5347,241],{"class":240},[152,5349,245],{"class":244},[152,5351,249],{"class":248},[152,5353,5354,5356,5358,5360,5362,5364,5366,5368],{"class":154,"line":252},[152,5355,256],{"class":255},[152,5357,259],{"class":248},[152,5359,262],{"class":244},[152,5361,265],{"class":248},[152,5363,268],{"class":161},[152,5365,265],{"class":248},[152,5367,273],{"class":244},[152,5369,276],{"class":248},[152,5371,5372,5374,5376],{"class":154,"line":279},[152,5373,282],{"class":255},[152,5375,259],{"class":248},[152,5377,287],{"class":248},[152,5379,5380,5383,5385],{"class":154,"line":290},[152,5381,5382],{"class":255},"    transport",[152,5384,259],{"class":248},[152,5386,287],{"class":248},[152,5388,5389,5392,5394,5396],{"class":154,"line":300},[152,5390,5391],{"class":255},"      enabled",[152,5393,259],{"class":248},[152,5395,642],{"class":641},[152,5397,276],{"class":248},[152,5399,5400,5403,5405,5407,5409,5411,5413],{"class":154,"line":318},[152,5401,5402],{"class":255},"      endpoint",[152,5404,259],{"class":248},[152,5406,308],{"class":248},[152,5408,5333],{"class":161},[152,5410,265],{"class":248},[152,5412,955],{"class":248},[152,5414,5415],{"class":2054},"  // default\n",[152,5417,5418],{"class":154,"line":324},[152,5419,321],{"class":248},[152,5421,5422],{"class":154,"line":330},[152,5423,327],{"class":248},[152,5425,5426,5428],{"class":154,"line":479},[152,5427,333],{"class":248},[152,5429,336],{"class":244},[2064,5431,5433],{"id":5432},"how-it-works","How it works",[5435,5436,5437,5443,5449,5452,5460],"ol",{},[1302,5438,5439,5440],{},"Client calls ",[149,5441,5442],{},"log.info({ action: 'click', button: 'submit' })",[1302,5444,5445,5446,5448],{},"Log is sent to ",[149,5447,5333],{}," via POST",[1302,5450,5451],{},"Server enriches with environment context (service, version, region, etc.)",[1302,5453,5454,5456,5457],{},[149,5455,4394],{}," hook is called with ",[149,5458,5459],{},"source: 'client'",[1302,5461,5462],{},"External services receive the log (Axiom, Loki, etc.)",[907,5464,5465,5466,343,5469,5472,5473,5476],{"color":909,"icon":13},"Client logs are automatically enriched with the server's environment context. You don't need to send ",[149,5467,5468],{},"service",[149,5470,5471],{},"environment",", or ",[149,5474,5475],{},"version"," from the client.",[129,5478,5479,5480,5482],{},"In your drain hook, you can identify client logs by the ",[149,5481,5459],{}," field:",[141,5484,5486],{"className":223,"code":5485,"filename":4403,"language":226,"meta":147,"style":147},"export default defineNitroPlugin((nitroApp) => {\n  nitroApp.hooks.hook('evlog:drain', async (ctx) => {\n    if (ctx.event.source === 'client') {\n      console.log('[CLIENT]', ctx.event)\n    }\n  })\n})\n",[149,5487,5488,5508,5542,5572,5600,5604,5610],{"__ignoreMap":147},[152,5489,5490,5492,5494,5496,5498,5500,5502,5504,5506],{"class":154,"line":155},[152,5491,234],{"class":233},[152,5493,237],{"class":233},[152,5495,4219],{"class":240},[152,5497,245],{"class":244},[152,5499,245],{"class":248},[152,5501,4226],{"class":566},[152,5503,570],{"class":248},[152,5505,573],{"class":559},[152,5507,287],{"class":248},[152,5509,5510,5512,5514,5516,5518,5520,5522,5524,5526,5528,5530,5532,5534,5536,5538,5540],{"class":154,"line":252},[152,5511,4237],{"class":244},[152,5513,602],{"class":248},[152,5515,4242],{"class":244},[152,5517,602],{"class":248},[152,5519,4247],{"class":240},[152,5521,245],{"class":255},[152,5523,265],{"class":248},[152,5525,4394],{"class":161},[152,5527,265],{"class":248},[152,5529,955],{"class":248},[152,5531,1502],{"class":559},[152,5533,563],{"class":248},[152,5535,4262],{"class":566},[152,5537,570],{"class":248},[152,5539,573],{"class":559},[152,5541,287],{"class":248},[152,5543,5544,5546,5548,5550,5552,5554,5556,5558,5561,5563,5566,5568,5570],{"class":154,"line":279},[152,5545,4320],{"class":233},[152,5547,563],{"class":255},[152,5549,4262],{"class":244},[152,5551,602],{"class":248},[152,5553,567],{"class":244},[152,5555,602],{"class":248},[152,5557,1999],{"class":244},[152,5559,5560],{"class":248}," ===",[152,5562,308],{"class":248},[152,5564,5565],{"class":161},"client",[152,5567,265],{"class":248},[152,5569,1200],{"class":255},[152,5571,249],{"class":248},[152,5573,5574,5577,5579,5581,5583,5585,5588,5590,5592,5594,5596,5598],{"class":154,"line":290},[152,5575,5576],{"class":244},"      console",[152,5578,602],{"class":248},[152,5580,1979],{"class":240},[152,5582,245],{"class":255},[152,5584,265],{"class":248},[152,5586,5587],{"class":161},"[CLIENT]",[152,5589,265],{"class":248},[152,5591,955],{"class":248},[152,5593,4280],{"class":244},[152,5595,602],{"class":248},[152,5597,567],{"class":244},[152,5599,336],{"class":255},[152,5601,5602],{"class":154,"line":300},[152,5603,1262],{"class":248},[152,5605,5606,5608],{"class":154,"line":318},[152,5607,1616],{"class":248},[152,5609,336],{"class":255},[152,5611,5612,5614],{"class":154,"line":324},[152,5613,333],{"class":248},[152,5615,336],{"class":244},[214,5617,5619],{"id":5618},"client-identity","Client Identity",[129,5621,5622,5623,5626],{},"Attach user identity to all client logs with ",[149,5624,5625],{},"setIdentity()",". Identity fields are automatically included in every log and transported to the server, where all drains (Axiom, PostHog, Sentry, etc.) receive them.",[141,5628,5630],{"className":223,"code":5629,"language":226,"meta":147,"style":147},"// After login\nsetIdentity({ userId: 'usr_123', orgId: 'org_456' })\n\nlog.info({ action: 'checkout' })\n// -> { userId: 'usr_123', orgId: 'org_456', action: 'checkout', ... }\n\n// After logout\nclearIdentity()\n",[149,5631,5632,5637,5676,5680,5707,5712,5716,5721],{"__ignoreMap":147},[152,5633,5634],{"class":154,"line":155},[152,5635,5636],{"class":2054},"// After login\n",[152,5638,5639,5642,5644,5646,5649,5651,5653,5656,5658,5660,5663,5665,5667,5670,5672,5674],{"class":154,"line":252},[152,5640,5641],{"class":240},"setIdentity",[152,5643,245],{"class":244},[152,5645,610],{"class":248},[152,5647,5648],{"class":255}," userId",[152,5650,259],{"class":248},[152,5652,308],{"class":248},[152,5654,5655],{"class":161},"usr_123",[152,5657,265],{"class":248},[152,5659,955],{"class":248},[152,5661,5662],{"class":255}," orgId",[152,5664,259],{"class":248},[152,5666,308],{"class":248},[152,5668,5669],{"class":161},"org_456",[152,5671,265],{"class":248},[152,5673,382],{"class":248},[152,5675,336],{"class":244},[152,5677,5678],{"class":154,"line":279},[152,5679,415],{"emptyLinePlaceholder":414},[152,5681,5682,5684,5686,5688,5690,5692,5694,5696,5698,5701,5703,5705],{"class":154,"line":290},[152,5683,1979],{"class":244},[152,5685,602],{"class":248},[152,5687,909],{"class":240},[152,5689,245],{"class":244},[152,5691,610],{"class":248},[152,5693,613],{"class":255},[152,5695,259],{"class":248},[152,5697,308],{"class":248},[152,5699,5700],{"class":161},"checkout",[152,5702,265],{"class":248},[152,5704,382],{"class":248},[152,5706,336],{"class":244},[152,5708,5709],{"class":154,"line":300},[152,5710,5711],{"class":2054},"// -> { userId: 'usr_123', orgId: 'org_456', action: 'checkout', ... }\n",[152,5713,5714],{"class":154,"line":318},[152,5715,415],{"emptyLinePlaceholder":414},[152,5717,5718],{"class":154,"line":324},[152,5719,5720],{"class":2054},"// After logout\n",[152,5722,5723,5726],{"class":154,"line":330},[152,5724,5725],{"class":240},"clearIdentity",[152,5727,1474],{"class":244},[129,5729,5730,5731,2686,5733,5735],{},"Both ",[149,5732,5641],{},[149,5734,5725],{}," are auto-imported by the Nuxt module.",[129,5737,5738],{},"Per-event fields override identity fields, so you can always pass explicit values:",[141,5740,5742],{"className":223,"code":5741,"language":226,"meta":147,"style":147},"setIdentity({ userId: 'usr_123' })\nlog.info({ userId: 'usr_admin_override' })\n// -> { userId: 'usr_admin_override', ... }\n",[149,5743,5744,5766,5793],{"__ignoreMap":147},[152,5745,5746,5748,5750,5752,5754,5756,5758,5760,5762,5764],{"class":154,"line":155},[152,5747,5641],{"class":240},[152,5749,245],{"class":244},[152,5751,610],{"class":248},[152,5753,5648],{"class":255},[152,5755,259],{"class":248},[152,5757,308],{"class":248},[152,5759,5655],{"class":161},[152,5761,265],{"class":248},[152,5763,382],{"class":248},[152,5765,336],{"class":244},[152,5767,5768,5770,5772,5774,5776,5778,5780,5782,5784,5787,5789,5791],{"class":154,"line":252},[152,5769,1979],{"class":244},[152,5771,602],{"class":248},[152,5773,909],{"class":240},[152,5775,245],{"class":244},[152,5777,610],{"class":248},[152,5779,5648],{"class":255},[152,5781,259],{"class":248},[152,5783,308],{"class":248},[152,5785,5786],{"class":161},"usr_admin_override",[152,5788,265],{"class":248},[152,5790,382],{"class":248},[152,5792,336],{"class":244},[152,5794,5795],{"class":154,"line":279},[152,5796,5797],{"class":2054},"// -> { userId: 'usr_admin_override', ... }\n",[2064,5799,5801],{"id":5800},"syncing-identity-with-auth","Syncing identity with auth",[129,5803,5804],{},"Use a global route middleware to automatically sync identity with your auth state:",[141,5806,5809],{"className":223,"code":5807,"filename":5808,"language":226,"meta":147,"style":147},"export default defineNuxtRouteMiddleware(() => {\n  const { user } = useAuth() // better-auth, supabase, clerk, etc.\n\n  if (user.value) {\n    setIdentity({ userId: user.value.id, email: user.value.email })\n  } else {\n    clearIdentity()\n  }\n})\n","middleware/identity.global.ts",[149,5810,5811,5828,5848,5852,5870,5916,5925,5932,5936],{"__ignoreMap":147},[152,5812,5813,5815,5817,5820,5822,5824,5826],{"class":154,"line":155},[152,5814,234],{"class":233},[152,5816,237],{"class":233},[152,5818,5819],{"class":240}," defineNuxtRouteMiddleware",[152,5821,245],{"class":244},[152,5823,5022],{"class":248},[152,5825,573],{"class":559},[152,5827,287],{"class":248},[152,5829,5830,5832,5834,5836,5838,5840,5843,5845],{"class":154,"line":252},[152,5831,580],{"class":559},[152,5833,376],{"class":248},[152,5835,4275],{"class":244},[152,5837,382],{"class":248},[152,5839,586],{"class":248},[152,5841,5842],{"class":240}," useAuth",[152,5844,1710],{"class":255},[152,5846,5847],{"class":2054},"// better-auth, supabase, clerk, etc.\n",[152,5849,5850],{"class":154,"line":279},[152,5851,415],{"emptyLinePlaceholder":414},[152,5853,5854,5857,5859,5861,5863,5866,5868],{"class":154,"line":290},[152,5855,5856],{"class":233},"  if",[152,5858,563],{"class":255},[152,5860,4290],{"class":244},[152,5862,602],{"class":248},[152,5864,5865],{"class":244},"value",[152,5867,1200],{"class":255},[152,5869,249],{"class":248},[152,5871,5872,5875,5877,5879,5881,5883,5885,5887,5889,5891,5894,5896,5899,5901,5903,5905,5907,5909,5912,5914],{"class":154,"line":300},[152,5873,5874],{"class":240},"    setIdentity",[152,5876,245],{"class":255},[152,5878,610],{"class":248},[152,5880,5648],{"class":255},[152,5882,259],{"class":248},[152,5884,4275],{"class":244},[152,5886,602],{"class":248},[152,5888,5865],{"class":244},[152,5890,602],{"class":248},[152,5892,5893],{"class":244},"id",[152,5895,955],{"class":248},[152,5897,5898],{"class":255}," email",[152,5900,259],{"class":248},[152,5902,4275],{"class":244},[152,5904,602],{"class":248},[152,5906,5865],{"class":244},[152,5908,602],{"class":248},[152,5910,5911],{"class":244},"email",[152,5913,382],{"class":248},[152,5915,336],{"class":255},[152,5917,5918,5920,5923],{"class":154,"line":318},[152,5919,1616],{"class":248},[152,5921,5922],{"class":233}," else",[152,5924,287],{"class":248},[152,5926,5927,5930],{"class":154,"line":324},[152,5928,5929],{"class":240},"    clearIdentity",[152,5931,1474],{"class":255},[152,5933,5934],{"class":154,"line":330},[152,5935,1730],{"class":248},[152,5937,5938,5940],{"class":154,"line":479},[152,5939,333],{"class":248},[152,5941,336],{"class":244},[907,5943,5945,5955],{"color":909,"icon":5944},"i-lucide-lightbulb",[129,5946,5947,5950,5951,5954],{},[911,5948,5949],{},"Tip:"," Use Nuxt's ",[149,5952,5953],{},"$production"," override to sample only in production while keeping full visibility in development:",[141,5956,5958],{"className":223,"code":5957,"filename":225,"language":226,"meta":147,"style":147},"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",[149,5959,5960,5972,5990,5998,6018,6022,6031,6039,6047,6080,6113,6117,6121,6125],{"__ignoreMap":147},[152,5961,5962,5964,5966,5968,5970],{"class":154,"line":155},[152,5963,234],{"class":233},[152,5965,237],{"class":233},[152,5967,241],{"class":240},[152,5969,245],{"class":244},[152,5971,249],{"class":248},[152,5973,5974,5976,5978,5980,5982,5984,5986,5988],{"class":154,"line":252},[152,5975,256],{"class":255},[152,5977,259],{"class":248},[152,5979,262],{"class":244},[152,5981,265],{"class":248},[152,5983,268],{"class":161},[152,5985,265],{"class":248},[152,5987,273],{"class":244},[152,5989,276],{"class":248},[152,5991,5992,5994,5996],{"class":154,"line":279},[152,5993,282],{"class":255},[152,5995,259],{"class":248},[152,5997,287],{"class":248},[152,5999,6000,6002,6004,6006,6008,6010,6012,6014,6016],{"class":154,"line":290},[152,6001,293],{"class":255},[152,6003,259],{"class":248},[152,6005,376],{"class":248},[152,6007,457],{"class":255},[152,6009,259],{"class":248},[152,6011,308],{"class":248},[152,6013,311],{"class":161},[152,6015,265],{"class":248},[152,6017,469],{"class":248},[152,6019,6020],{"class":154,"line":300},[152,6021,327],{"class":248},[152,6023,6024,6027,6029],{"class":154,"line":318},[152,6025,6026],{"class":255},"  $production",[152,6028,259],{"class":248},[152,6030,287],{"class":248},[152,6032,6033,6035,6037],{"class":154,"line":324},[152,6034,441],{"class":255},[152,6036,259],{"class":248},[152,6038,287],{"class":248},[152,6040,6041,6043,6045],{"class":154,"line":330},[152,6042,3859],{"class":255},[152,6044,259],{"class":248},[152,6046,287],{"class":248},[152,6048,6049,6051,6053,6055,6057,6059,6061,6063,6065,6067,6069,6071,6073,6075,6078],{"class":154,"line":479},[152,6050,3868],{"class":255},[152,6052,259],{"class":248},[152,6054,376],{"class":248},[152,6056,3875],{"class":255},[152,6058,259],{"class":248},[152,6060,2221],{"class":1141},[152,6062,955],{"class":248},[152,6064,3884],{"class":255},[152,6066,259],{"class":248},[152,6068,3732],{"class":1141},[152,6070,955],{"class":248},[152,6072,3893],{"class":255},[152,6074,259],{"class":248},[152,6076,6077],{"class":1141}," 0",[152,6079,469],{"class":248},[152,6081,6082,6085,6087,6089,6091,6093,6095,6097,6099,6101,6103,6105,6107,6109,6111],{"class":154,"line":487},[152,6083,6084],{"class":255},"        keep",[152,6086,259],{"class":248},[152,6088,262],{"class":244},[152,6090,610],{"class":248},[152,6092,4129],{"class":255},[152,6094,259],{"class":248},[152,6096,4134],{"class":1141},[152,6098,4137],{"class":248},[152,6100,376],{"class":248},[152,6102,1136],{"class":255},[152,6104,259],{"class":248},[152,6106,4151],{"class":1141},[152,6108,382],{"class":248},[152,6110,273],{"class":244},[152,6112,276],{"class":248},[152,6114,6115],{"class":154,"line":1068},[152,6116,3431],{"class":248},[152,6118,6119],{"class":154,"line":1076},[152,6120,321],{"class":248},[152,6122,6123],{"class":154,"line":1106},[152,6124,327],{"class":248},[152,6126,6127,6129],{"class":154,"line":1149},[152,6128,333],{"class":248},[152,6130,336],{"class":244},[133,6132,6134],{"id":6133},"typescript-configuration","TypeScript Configuration",[129,6136,6137],{},"evlog ships with full TypeScript type definitions. No additional configuration is required.",[907,6139,6141],{"color":4055,"icon":6140},"i-lucide-check","evlog requires TypeScript 5.0 or higher for optimal type inference.",[133,6143,6145],{"id":6144},"next-steps","Next Steps",[1299,6147,6148],{},[1302,6149,6150,6152],{},[1331,6151,20],{"href":21}," - Learn the core concepts and start using evlog",[6154,6155,6156],"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 .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}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 .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}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}",{"title":147,"searchDepth":252,"depth":252,"links":6158},[6159,6160,6168,6175,6178,6179],{"id":135,"depth":252,"text":136},{"id":211,"depth":252,"text":212,"children":6161},[6162,6163,6164,6165,6166,6167],{"id":216,"depth":279,"text":217},{"id":354,"depth":279,"text":355},{"id":654,"depth":279,"text":655},{"id":933,"depth":279,"text":934},{"id":1340,"depth":279,"text":1341},{"id":1844,"depth":279,"text":1845},{"id":2460,"depth":252,"text":2461,"children":6169},[6170,6171,6172,6173,6174],{"id":2697,"depth":279,"text":2698},{"id":3102,"depth":279,"text":3103},{"id":3631,"depth":279,"text":2658},{"id":4387,"depth":279,"text":4388},{"id":4922,"depth":279,"text":4923},{"id":5319,"depth":252,"text":5320,"children":6176},[6177],{"id":5618,"depth":279,"text":5619},{"id":6133,"depth":252,"text":6134},{"id":6144,"depth":252,"text":6145},"Install evlog in your Nuxt, Nitro, Cloudflare Workers, or standalone TypeScript project. Configure sampling, log draining, and client transport.","md",[6183],{"label":20,"icon":23,"to":21,"color":1327,"variant":6184},"subtle",{},{"title":15,"icon":18},{"title":124,"description":6180},"ziaJmlWQ1EtmwJX_CHc21Q1hKcjRdPu4uHgAMt8LBj8",[6190,6192],{"title":10,"path":11,"stem":12,"description":6191,"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":6193,"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.",1771153474911]