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