[{"data":1,"prerenderedAt":2290},["ShallowReactive",2],{"navigation_docs":3,"-core-concepts-client-logging":253,"-core-concepts-client-logging-surround":2285},[4,30,110,169,223,239],{"title":5,"path":6,"stem":7,"children":8,"page":29},"Getting Started","\u002Fgetting-started","1.getting-started",[9,14,19,24],{"title":10,"path":11,"stem":12,"icon":13},"Introduction","\u002Fgetting-started\u002Fintroduction","1.getting-started\u002F1.introduction","i-lucide-info",{"title":15,"path":16,"stem":17,"icon":18},"Installation","\u002Fgetting-started\u002Finstallation","1.getting-started\u002F2.installation","i-lucide-download",{"title":20,"path":21,"stem":22,"icon":23},"Quick Start","\u002Fgetting-started\u002Fquick-start","1.getting-started\u002F3.quick-start","i-lucide-zap",{"title":25,"path":26,"stem":27,"icon":28},"Agent Skills","\u002Fgetting-started\u002Fagent-skills","1.getting-started\u002F4.agent-skills","i-lucide-sparkles",false,{"title":31,"path":32,"stem":33,"children":34,"page":29},"Frameworks","\u002Fframeworks","2.frameworks",[35,40,45,50,55,60,65,70,75,80,85,90,95,100,105],{"title":36,"path":37,"stem":38,"icon":39},"Overview","\u002Fframeworks\u002Foverview","2.frameworks\u002F00.overview","i-lucide-layout-grid",{"title":41,"path":42,"stem":43,"icon":44},"Nuxt","\u002Fframeworks\u002Fnuxt","2.frameworks\u002F01.nuxt","i-simple-icons-nuxtdotjs",{"title":46,"path":47,"stem":48,"icon":49},"Next.js","\u002Fframeworks\u002Fnextjs","2.frameworks\u002F02.nextjs","i-simple-icons-nextdotjs",{"title":51,"path":52,"stem":53,"icon":54},"SvelteKit","\u002Fframeworks\u002Fsveltekit","2.frameworks\u002F03.sveltekit","i-simple-icons-svelte",{"title":56,"path":57,"stem":58,"icon":59},"Nitro","\u002Fframeworks\u002Fnitro","2.frameworks\u002F04.nitro","i-custom-nitro",{"title":61,"path":62,"stem":63,"icon":64},"TanStack Start","\u002Fframeworks\u002Ftanstack-start","2.frameworks\u002F05.tanstack-start","i-custom-tanstack",{"title":66,"path":67,"stem":68,"icon":69},"NestJS","\u002Fframeworks\u002Fnestjs","2.frameworks\u002F06.nestjs","i-simple-icons-nestjs",{"title":71,"path":72,"stem":73,"icon":74},"Express","\u002Fframeworks\u002Fexpress","2.frameworks\u002F07.express","i-simple-icons-express",{"title":76,"path":77,"stem":78,"icon":79},"Hono","\u002Fframeworks\u002Fhono","2.frameworks\u002F08.hono","i-simple-icons-hono",{"title":81,"path":82,"stem":83,"icon":84},"Fastify","\u002Fframeworks\u002Ffastify","2.frameworks\u002F09.fastify","i-simple-icons-fastify",{"title":86,"path":87,"stem":88,"icon":89},"Elysia","\u002Fframeworks\u002Felysia","2.frameworks\u002F10.elysia","i-custom-elysia",{"title":91,"path":92,"stem":93,"icon":94},"Cloudflare Workers","\u002Fframeworks\u002Fcloudflare-workers","2.frameworks\u002F11.cloudflare-workers","i-simple-icons-cloudflare",{"title":96,"path":97,"stem":98,"icon":99},"Standalone","\u002Fframeworks\u002Fstandalone","2.frameworks\u002F12.standalone","i-simple-icons-typescript",{"title":101,"path":102,"stem":103,"icon":104},"Astro","\u002Fframeworks\u002Fastro","2.frameworks\u002F13.astro","i-simple-icons-astro",{"title":106,"path":107,"stem":108,"icon":109},"Custom Integration","\u002Fframeworks\u002Fcustom-integration","2.frameworks\u002F14.custom-integration","i-lucide-puzzle",{"title":111,"path":112,"stem":113,"children":114,"page":29},"Core Concepts","\u002Fcore-concepts","3.core-concepts",[115,120,125,130,135,140,145,149,154,159,164],{"title":116,"path":117,"stem":118,"icon":119},"Request Lifecycle","\u002Fcore-concepts\u002Flifecycle","3.core-concepts\u002F0.lifecycle","i-lucide-arrow-right-left",{"title":121,"path":122,"stem":123,"icon":124},"Wide Events","\u002Fcore-concepts\u002Fwide-events","3.core-concepts\u002F1.wide-events","i-lucide-layers",{"title":126,"path":127,"stem":128,"icon":129},"Vite Plugin","\u002Fcore-concepts\u002Fvite-plugin","3.core-concepts\u002F10.vite-plugin","i-custom-vite",{"title":131,"path":132,"stem":133,"icon":134},"AI SDK Integration","\u002Fcore-concepts\u002Fai-sdk","3.core-concepts\u002F11.ai-sdk","i-lucide-scan-eye",{"title":136,"path":137,"stem":138,"icon":139},"Structured Errors","\u002Fcore-concepts\u002Fstructured-errors","3.core-concepts\u002F2.structured-errors","i-lucide-shield-alert",{"title":141,"path":142,"stem":143,"icon":144},"Best Practices","\u002Fcore-concepts\u002Fbest-practices","3.core-concepts\u002F3.best-practices","i-lucide-shield-check",{"title":146,"path":147,"stem":148,"icon":99},"Typed Fields","\u002Fcore-concepts\u002Ftyped-fields","3.core-concepts\u002F4.typed-fields",{"title":150,"path":151,"stem":152,"icon":153},"Sampling","\u002Fcore-concepts\u002Fsampling","3.core-concepts\u002F5.sampling","i-lucide-filter",{"title":155,"path":156,"stem":157,"icon":158},"Client Logging","\u002Fcore-concepts\u002Fclient-logging","3.core-concepts\u002F6.client-logging","i-lucide-monitor",{"title":160,"path":161,"stem":162,"icon":163},"Configuration","\u002Fcore-concepts\u002Fconfiguration","3.core-concepts\u002F7.configuration","i-lucide-settings",{"title":165,"path":166,"stem":167,"icon":168},"Performance","\u002Fcore-concepts\u002Fperformance","3.core-concepts\u002F8.performance","i-lucide-gauge",{"title":170,"path":171,"stem":172,"children":173,"page":29},"Adapters","\u002Fadapters","4.adapters",[174,178,183,188,193,198,203,208,213,218],{"title":36,"path":175,"stem":176,"icon":177},"\u002Fadapters\u002Foverview","4.adapters\u002F1.overview","i-custom-plug",{"title":179,"path":180,"stem":181,"icon":182},"Browser","\u002Fadapters\u002Fbrowser","4.adapters\u002F10.browser","i-lucide-globe",{"title":184,"path":185,"stem":186,"icon":187},"Axiom","\u002Fadapters\u002Faxiom","4.adapters\u002F2.axiom","i-custom-axiom",{"title":189,"path":190,"stem":191,"icon":192},"OTLP","\u002Fadapters\u002Fotlp","4.adapters\u002F3.otlp","i-simple-icons-opentelemetry",{"title":194,"path":195,"stem":196,"icon":197},"PostHog","\u002Fadapters\u002Fposthog","4.adapters\u002F4.posthog","i-simple-icons-posthog",{"title":199,"path":200,"stem":201,"icon":202},"Sentry","\u002Fadapters\u002Fsentry","4.adapters\u002F5.sentry","i-simple-icons-sentry",{"title":204,"path":205,"stem":206,"icon":207},"Better Stack","\u002Fadapters\u002Fbetter-stack","4.adapters\u002F6.better-stack","i-simple-icons-betterstack",{"title":209,"path":210,"stem":211,"icon":212},"File System","\u002Fadapters\u002Ffs","4.adapters\u002F7.fs","i-lucide-hard-drive",{"title":214,"path":215,"stem":216,"icon":217},"Custom Adapters","\u002Fadapters\u002Fcustom","4.adapters\u002F8.custom","i-lucide-code",{"title":219,"path":220,"stem":221,"icon":222},"Pipeline","\u002Fadapters\u002Fpipeline","4.adapters\u002F9.pipeline","i-lucide-workflow",{"title":224,"path":225,"stem":226,"children":227,"page":29},"Enrichers","\u002Fenrichers","5.enrichers",[228,231,235],{"title":36,"path":229,"stem":230,"icon":28},"\u002Fenrichers\u002Foverview","5.enrichers\u002F1.overview",{"title":232,"path":233,"stem":234,"icon":109},"Built-in","\u002Fenrichers\u002Fbuilt-in","5.enrichers\u002F2.built-in",{"title":236,"path":237,"stem":238,"icon":217},"Custom","\u002Fenrichers\u002Fcustom","5.enrichers\u002F3.custom",{"title":240,"path":241,"stem":242,"children":243,"page":29},"NuxtHub","\u002Fnuxthub","6.nuxthub",[244,248],{"title":36,"path":245,"stem":246,"icon":247},"\u002Fnuxthub\u002Foverview","6.nuxthub\u002F1.overview","i-lucide-database",{"title":249,"path":250,"stem":251,"icon":252},"Retention","\u002Fnuxthub\u002Fretention","6.nuxthub\u002F2.retention","i-lucide-clock",{"id":254,"title":155,"body":255,"description":2275,"extension":2276,"links":2277,"meta":2281,"navigation":2282,"path":156,"seo":2283,"stem":157,"__hash__":2284},"docs\u002F3.core-concepts\u002F6.client-logging.md",{"type":256,"value":257,"toc":2260},"minimark",[258,262,266,269,768,774,778,782,788,953,957,960,1078,1082,1085,1152,1156,1162,1297,1300,1303,1309,1403,1515,1519,1522,1526,1540,1755,1765,1769,1772,2197,2200,2227,2235,2239,2256],[259,260,261],"p",{},"Server logs tell you what happened on the backend. Client logs complete the picture: user interactions, page views, frontend errors, and performance signals that never reach the server unless you capture them.",[263,264,20],"h2",{"id":265},"quick-start",[259,267,268],{},"evlog provides a client-side logging API that works in any browser environment:",[270,271,272,451,669],"code-group",{},[273,274,280],"pre",{"className":275,"code":276,"filename":277,"language":278,"meta":279,"style":279},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { initLog, log } from 'evlog\u002Fclient'\n\nexport default defineNuxtPlugin(() => {\n  initLog({ service: 'web' })\n\n  log.info({ action: 'app_init', path: window.location.pathname })\n})\n","app\u002Fplugins\u002Flogger.client.ts (Nuxt)","typescript","",[281,282,283,322,329,355,386,391,443],"code",{"__ignoreMap":279},[284,285,288,292,296,300,303,306,309,312,315,319],"span",{"class":286,"line":287},"line",1,[284,289,291],{"class":290},"s7zQu","import",[284,293,295],{"class":294},"sMK4o"," {",[284,297,299],{"class":298},"sTEyZ"," initLog",[284,301,302],{"class":294},",",[284,304,305],{"class":298}," log",[284,307,308],{"class":294}," }",[284,310,311],{"class":290}," from",[284,313,314],{"class":294}," '",[284,316,318],{"class":317},"sfazB","evlog\u002Fclient",[284,320,321],{"class":294},"'\n",[284,323,325],{"class":286,"line":324},2,[284,326,328],{"emptyLinePlaceholder":327},true,"\n",[284,330,332,335,338,342,345,348,352],{"class":286,"line":331},3,[284,333,334],{"class":290},"export",[284,336,337],{"class":290}," default",[284,339,341],{"class":340},"s2Zo4"," defineNuxtPlugin",[284,343,344],{"class":298},"(",[284,346,347],{"class":294},"()",[284,349,351],{"class":350},"spNyl"," =>",[284,353,354],{"class":294}," {\n",[284,356,358,361,364,367,370,373,375,378,381,383],{"class":286,"line":357},4,[284,359,360],{"class":340},"  initLog",[284,362,344],{"class":363},"swJcz",[284,365,366],{"class":294},"{",[284,368,369],{"class":363}," service",[284,371,372],{"class":294},":",[284,374,314],{"class":294},[284,376,377],{"class":317},"web",[284,379,380],{"class":294},"'",[284,382,308],{"class":294},[284,384,385],{"class":363},")\n",[284,387,389],{"class":286,"line":388},5,[284,390,328],{"emptyLinePlaceholder":327},[284,392,394,397,400,403,405,407,410,412,414,417,419,421,424,426,429,431,434,436,439,441],{"class":286,"line":393},6,[284,395,396],{"class":298},"  log",[284,398,399],{"class":294},".",[284,401,402],{"class":340},"info",[284,404,344],{"class":363},[284,406,366],{"class":294},[284,408,409],{"class":363}," action",[284,411,372],{"class":294},[284,413,314],{"class":294},[284,415,416],{"class":317},"app_init",[284,418,380],{"class":294},[284,420,302],{"class":294},[284,422,423],{"class":363}," path",[284,425,372],{"class":294},[284,427,428],{"class":298}," window",[284,430,399],{"class":294},[284,432,433],{"class":298},"location",[284,435,399],{"class":294},[284,437,438],{"class":298},"pathname",[284,440,308],{"class":294},[284,442,385],{"class":363},[284,444,446,449],{"class":286,"line":445},7,[284,447,448],{"class":294},"}",[284,450,385],{"class":298},[273,452,455],{"className":275,"code":453,"filename":454,"language":278,"meta":279,"style":279},"'use client'\nimport { useEffect } from 'react'\nimport { initLog, log } from 'evlog\u002Fclient'\n\nexport function LogProvider({ children }: { children: React.ReactNode }) {\n  useEffect(() => {\n    initLog({ service: 'web' })\n    log.info({ action: 'app_init', path: window.location.pathname })\n  }, [])\n\n  return \u003C>{children}\u003C\u002F>\n}\n","app\u002Fproviders.tsx (React \u002F Next.js)",[281,456,457,466,486,508,512,552,565,588,632,641,646,663],{"__ignoreMap":279},[284,458,459,461,464],{"class":286,"line":287},[284,460,380],{"class":294},[284,462,463],{"class":317},"use client",[284,465,321],{"class":294},[284,467,468,470,472,475,477,479,481,484],{"class":286,"line":324},[284,469,291],{"class":290},[284,471,295],{"class":294},[284,473,474],{"class":298}," useEffect",[284,476,308],{"class":294},[284,478,311],{"class":290},[284,480,314],{"class":294},[284,482,483],{"class":317},"react",[284,485,321],{"class":294},[284,487,488,490,492,494,496,498,500,502,504,506],{"class":286,"line":331},[284,489,291],{"class":290},[284,491,295],{"class":294},[284,493,299],{"class":298},[284,495,302],{"class":294},[284,497,305],{"class":298},[284,499,308],{"class":294},[284,501,311],{"class":290},[284,503,314],{"class":294},[284,505,318],{"class":317},[284,507,321],{"class":294},[284,509,510],{"class":286,"line":357},[284,511,328],{"emptyLinePlaceholder":327},[284,513,514,516,519,522,525,529,532,534,536,538,542,544,547,550],{"class":286,"line":388},[284,515,334],{"class":290},[284,517,518],{"class":350}," function",[284,520,521],{"class":340}," LogProvider",[284,523,524],{"class":294},"({",[284,526,528],{"class":527},"sHdIc"," children",[284,530,531],{"class":294}," }:",[284,533,295],{"class":294},[284,535,528],{"class":363},[284,537,372],{"class":294},[284,539,541],{"class":540},"sBMFI"," React",[284,543,399],{"class":294},[284,545,546],{"class":540},"ReactNode",[284,548,549],{"class":294}," })",[284,551,354],{"class":294},[284,553,554,557,559,561,563],{"class":286,"line":393},[284,555,556],{"class":340},"  useEffect",[284,558,344],{"class":363},[284,560,347],{"class":294},[284,562,351],{"class":350},[284,564,354],{"class":294},[284,566,567,570,572,574,576,578,580,582,584,586],{"class":286,"line":445},[284,568,569],{"class":340},"    initLog",[284,571,344],{"class":363},[284,573,366],{"class":294},[284,575,369],{"class":363},[284,577,372],{"class":294},[284,579,314],{"class":294},[284,581,377],{"class":317},[284,583,380],{"class":294},[284,585,308],{"class":294},[284,587,385],{"class":363},[284,589,591,594,596,598,600,602,604,606,608,610,612,614,616,618,620,622,624,626,628,630],{"class":286,"line":590},8,[284,592,593],{"class":298},"    log",[284,595,399],{"class":294},[284,597,402],{"class":340},[284,599,344],{"class":363},[284,601,366],{"class":294},[284,603,409],{"class":363},[284,605,372],{"class":294},[284,607,314],{"class":294},[284,609,416],{"class":317},[284,611,380],{"class":294},[284,613,302],{"class":294},[284,615,423],{"class":363},[284,617,372],{"class":294},[284,619,428],{"class":298},[284,621,399],{"class":294},[284,623,433],{"class":298},[284,625,399],{"class":294},[284,627,438],{"class":298},[284,629,308],{"class":294},[284,631,385],{"class":363},[284,633,635,638],{"class":286,"line":634},9,[284,636,637],{"class":294},"  },",[284,639,640],{"class":363}," [])\n",[284,642,644],{"class":286,"line":643},10,[284,645,328],{"emptyLinePlaceholder":327},[284,647,649,652,655,657,660],{"class":286,"line":648},11,[284,650,651],{"class":290},"  return",[284,653,654],{"class":363}," \u003C>",[284,656,366],{"class":294},[284,658,659],{"class":298},"children",[284,661,662],{"class":294},"}\u003C\u002F>\n",[284,664,666],{"class":286,"line":665},12,[284,667,668],{"class":294},"}\n",[273,670,673],{"className":275,"code":671,"filename":672,"language":278,"meta":279,"style":279},"import { initLog, log } from 'evlog\u002Fclient'\n\ninitLog({ service: 'web' })\nlog.info({ action: 'app_init', path: window.location.pathname })\n","src\u002Fapp.ts (Any frontend)",[281,674,675,697,701,724],{"__ignoreMap":279},[284,676,677,679,681,683,685,687,689,691,693,695],{"class":286,"line":287},[284,678,291],{"class":290},[284,680,295],{"class":294},[284,682,299],{"class":298},[284,684,302],{"class":294},[284,686,305],{"class":298},[284,688,308],{"class":294},[284,690,311],{"class":290},[284,692,314],{"class":294},[284,694,318],{"class":317},[284,696,321],{"class":294},[284,698,699],{"class":286,"line":324},[284,700,328],{"emptyLinePlaceholder":327},[284,702,703,706,708,710,712,714,716,718,720,722],{"class":286,"line":331},[284,704,705],{"class":340},"initLog",[284,707,344],{"class":298},[284,709,366],{"class":294},[284,711,369],{"class":363},[284,713,372],{"class":294},[284,715,314],{"class":294},[284,717,377],{"class":317},[284,719,380],{"class":294},[284,721,308],{"class":294},[284,723,385],{"class":298},[284,725,726,729,731,733,735,737,739,741,743,745,747,749,751,753,755,757,759,761,764,766],{"class":286,"line":357},[284,727,728],{"class":298},"log",[284,730,399],{"class":294},[284,732,402],{"class":340},[284,734,344],{"class":298},[284,736,366],{"class":294},[284,738,409],{"class":363},[284,740,372],{"class":294},[284,742,314],{"class":294},[284,744,416],{"class":317},[284,746,380],{"class":294},[284,748,302],{"class":294},[284,750,423],{"class":363},[284,752,372],{"class":294},[284,754,428],{"class":298},[284,756,399],{"class":294},[284,758,433],{"class":298},[284,760,399],{"class":294},[284,762,763],{"class":298},"pathname ",[284,765,448],{"class":294},[284,767,385],{"class":298},[259,769,770,771,773],{},"The ",[281,772,728],{}," object works anywhere in your client code: components, composables, event handlers.",[263,775,777],{"id":776},"logging-api","Logging API",[779,780,121],"h3",{"id":781},"wide-events",[259,783,784,785,372],{},"Pass an object to capture structured context, just like server-side ",[281,786,787],{},"log.set()",[273,789,791],{"className":275,"code":790,"language":278,"meta":279,"style":279},"log.info({ action: 'page_view', path: '\u002Fproducts', referrer: document.referrer })\nlog.warn({ action: 'slow_load', component: 'ProductList', duration: 3200 })\nlog.error({ action: 'fetch_failed', endpoint: '\u002Fapi\u002Fcart', status: 500 })\n",[281,792,793,848,901],{"__ignoreMap":279},[284,794,795,797,799,801,803,805,807,809,811,814,816,818,820,822,824,827,829,831,834,836,839,841,844,846],{"class":286,"line":287},[284,796,728],{"class":298},[284,798,399],{"class":294},[284,800,402],{"class":340},[284,802,344],{"class":298},[284,804,366],{"class":294},[284,806,409],{"class":363},[284,808,372],{"class":294},[284,810,314],{"class":294},[284,812,813],{"class":317},"page_view",[284,815,380],{"class":294},[284,817,302],{"class":294},[284,819,423],{"class":363},[284,821,372],{"class":294},[284,823,314],{"class":294},[284,825,826],{"class":317},"\u002Fproducts",[284,828,380],{"class":294},[284,830,302],{"class":294},[284,832,833],{"class":363}," referrer",[284,835,372],{"class":294},[284,837,838],{"class":298}," document",[284,840,399],{"class":294},[284,842,843],{"class":298},"referrer ",[284,845,448],{"class":294},[284,847,385],{"class":298},[284,849,850,852,854,857,859,861,863,865,867,870,872,874,877,879,881,884,886,888,891,893,897,899],{"class":286,"line":324},[284,851,728],{"class":298},[284,853,399],{"class":294},[284,855,856],{"class":340},"warn",[284,858,344],{"class":298},[284,860,366],{"class":294},[284,862,409],{"class":363},[284,864,372],{"class":294},[284,866,314],{"class":294},[284,868,869],{"class":317},"slow_load",[284,871,380],{"class":294},[284,873,302],{"class":294},[284,875,876],{"class":363}," component",[284,878,372],{"class":294},[284,880,314],{"class":294},[284,882,883],{"class":317},"ProductList",[284,885,380],{"class":294},[284,887,302],{"class":294},[284,889,890],{"class":363}," duration",[284,892,372],{"class":294},[284,894,896],{"class":895},"sbssI"," 3200",[284,898,308],{"class":294},[284,900,385],{"class":298},[284,902,903,905,907,910,912,914,916,918,920,923,925,927,930,932,934,937,939,941,944,946,949,951],{"class":286,"line":331},[284,904,728],{"class":298},[284,906,399],{"class":294},[284,908,909],{"class":340},"error",[284,911,344],{"class":298},[284,913,366],{"class":294},[284,915,409],{"class":363},[284,917,372],{"class":294},[284,919,314],{"class":294},[284,921,922],{"class":317},"fetch_failed",[284,924,380],{"class":294},[284,926,302],{"class":294},[284,928,929],{"class":363}," endpoint",[284,931,372],{"class":294},[284,933,314],{"class":294},[284,935,936],{"class":317},"\u002Fapi\u002Fcart",[284,938,380],{"class":294},[284,940,302],{"class":294},[284,942,943],{"class":363}," status",[284,945,372],{"class":294},[284,947,948],{"class":895}," 500",[284,950,308],{"class":294},[284,952,385],{"class":298},[779,954,956],{"id":955},"tagged-logs","Tagged Logs",[259,958,959],{},"Pass a tag and message for quick, readable logs:",[273,961,963],{"className":275,"code":962,"language":278,"meta":279,"style":279},"log.info('auth', 'User logged in')\nlog.warn('perf', 'Image lazy-load took 4s')\nlog.error('payment', 'Stripe checkout failed')\nlog.debug('router', 'Navigated to \u002Fcheckout')\n",[281,964,965,993,1021,1049],{"__ignoreMap":279},[284,966,967,969,971,973,975,977,980,982,984,986,989,991],{"class":286,"line":287},[284,968,728],{"class":298},[284,970,399],{"class":294},[284,972,402],{"class":340},[284,974,344],{"class":298},[284,976,380],{"class":294},[284,978,979],{"class":317},"auth",[284,981,380],{"class":294},[284,983,302],{"class":294},[284,985,314],{"class":294},[284,987,988],{"class":317},"User logged in",[284,990,380],{"class":294},[284,992,385],{"class":298},[284,994,995,997,999,1001,1003,1005,1008,1010,1012,1014,1017,1019],{"class":286,"line":324},[284,996,728],{"class":298},[284,998,399],{"class":294},[284,1000,856],{"class":340},[284,1002,344],{"class":298},[284,1004,380],{"class":294},[284,1006,1007],{"class":317},"perf",[284,1009,380],{"class":294},[284,1011,302],{"class":294},[284,1013,314],{"class":294},[284,1015,1016],{"class":317},"Image lazy-load took 4s",[284,1018,380],{"class":294},[284,1020,385],{"class":298},[284,1022,1023,1025,1027,1029,1031,1033,1036,1038,1040,1042,1045,1047],{"class":286,"line":331},[284,1024,728],{"class":298},[284,1026,399],{"class":294},[284,1028,909],{"class":340},[284,1030,344],{"class":298},[284,1032,380],{"class":294},[284,1034,1035],{"class":317},"payment",[284,1037,380],{"class":294},[284,1039,302],{"class":294},[284,1041,314],{"class":294},[284,1043,1044],{"class":317},"Stripe checkout failed",[284,1046,380],{"class":294},[284,1048,385],{"class":298},[284,1050,1051,1053,1055,1058,1060,1062,1065,1067,1069,1071,1074,1076],{"class":286,"line":357},[284,1052,728],{"class":298},[284,1054,399],{"class":294},[284,1056,1057],{"class":340},"debug",[284,1059,344],{"class":298},[284,1061,380],{"class":294},[284,1063,1064],{"class":317},"router",[284,1066,380],{"class":294},[284,1068,302],{"class":294},[284,1070,314],{"class":294},[284,1072,1073],{"class":317},"Navigated to \u002Fcheckout",[284,1075,380],{"class":294},[284,1077,385],{"class":298},[779,1079,1081],{"id":1080},"console-output","Console Output",[259,1083,1084],{},"In the browser console, logs render with colors and grouping:",[273,1086,1090],{"className":1087,"code":1088,"language":1089,"meta":279,"style":279},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","[web] info  { action: 'page_view', path: '\u002Fproducts' }\n[auth] User logged in\n[perf] Image lazy-load took 4s\n","bash",[281,1091,1092,1130,1141],{"__ignoreMap":279},[284,1093,1094,1097,1099,1102,1105,1107,1110,1112,1114,1116,1118,1121,1123,1125,1127],{"class":286,"line":287},[284,1095,1096],{"class":294},"[",[284,1098,377],{"class":298},[284,1100,1101],{"class":294},"]",[284,1103,1104],{"class":298}," info  ",[284,1106,366],{"class":294},[284,1108,1109],{"class":540}," action:",[284,1111,314],{"class":294},[284,1113,813],{"class":317},[284,1115,380],{"class":294},[284,1117,302],{"class":317},[284,1119,1120],{"class":317}," path:",[284,1122,314],{"class":294},[284,1124,826],{"class":317},[284,1126,380],{"class":294},[284,1128,1129],{"class":317}," }\n",[284,1131,1132,1134,1136,1138],{"class":286,"line":324},[284,1133,1096],{"class":294},[284,1135,979],{"class":298},[284,1137,1101],{"class":294},[284,1139,1140],{"class":298}," User logged in\n",[284,1142,1143,1145,1147,1149],{"class":286,"line":331},[284,1144,1096],{"class":294},[284,1146,1007],{"class":298},[284,1148,1101],{"class":294},[284,1150,1151],{"class":298}," Image lazy-load took 4s\n",[263,1153,1155],{"id":1154},"identity-context","Identity Context",[259,1157,1158,1159,372],{},"Track which user generated a log with ",[281,1160,1161],{},"setIdentity()",[273,1163,1165],{"className":275,"code":1164,"language":278,"meta":279,"style":279},"import { setIdentity, clearIdentity, log } from 'evlog\u002Fclient'\n\n\u002F\u002F After login\nsetIdentity({ userId: 'usr_123', plan: 'pro' })\n\nlog.info({ action: 'dashboard_view' })\n\u002F\u002F → { userId: 'usr_123', plan: 'pro', action: 'dashboard_view', ... }\n\n\u002F\u002F After logout\nclearIdentity()\n",[281,1166,1167,1195,1199,1205,1244,1248,1275,1280,1284,1289],{"__ignoreMap":279},[284,1168,1169,1171,1173,1176,1178,1181,1183,1185,1187,1189,1191,1193],{"class":286,"line":287},[284,1170,291],{"class":290},[284,1172,295],{"class":294},[284,1174,1175],{"class":298}," setIdentity",[284,1177,302],{"class":294},[284,1179,1180],{"class":298}," clearIdentity",[284,1182,302],{"class":294},[284,1184,305],{"class":298},[284,1186,308],{"class":294},[284,1188,311],{"class":290},[284,1190,314],{"class":294},[284,1192,318],{"class":317},[284,1194,321],{"class":294},[284,1196,1197],{"class":286,"line":324},[284,1198,328],{"emptyLinePlaceholder":327},[284,1200,1201],{"class":286,"line":331},[284,1202,1204],{"class":1203},"sHwdD","\u002F\u002F After login\n",[284,1206,1207,1210,1212,1214,1217,1219,1221,1224,1226,1228,1231,1233,1235,1238,1240,1242],{"class":286,"line":357},[284,1208,1209],{"class":340},"setIdentity",[284,1211,344],{"class":298},[284,1213,366],{"class":294},[284,1215,1216],{"class":363}," userId",[284,1218,372],{"class":294},[284,1220,314],{"class":294},[284,1222,1223],{"class":317},"usr_123",[284,1225,380],{"class":294},[284,1227,302],{"class":294},[284,1229,1230],{"class":363}," plan",[284,1232,372],{"class":294},[284,1234,314],{"class":294},[284,1236,1237],{"class":317},"pro",[284,1239,380],{"class":294},[284,1241,308],{"class":294},[284,1243,385],{"class":298},[284,1245,1246],{"class":286,"line":388},[284,1247,328],{"emptyLinePlaceholder":327},[284,1249,1250,1252,1254,1256,1258,1260,1262,1264,1266,1269,1271,1273],{"class":286,"line":393},[284,1251,728],{"class":298},[284,1253,399],{"class":294},[284,1255,402],{"class":340},[284,1257,344],{"class":298},[284,1259,366],{"class":294},[284,1261,409],{"class":363},[284,1263,372],{"class":294},[284,1265,314],{"class":294},[284,1267,1268],{"class":317},"dashboard_view",[284,1270,380],{"class":294},[284,1272,308],{"class":294},[284,1274,385],{"class":298},[284,1276,1277],{"class":286,"line":445},[284,1278,1279],{"class":1203},"\u002F\u002F → { userId: 'usr_123', plan: 'pro', action: 'dashboard_view', ... }\n",[284,1281,1282],{"class":286,"line":590},[284,1283,328],{"emptyLinePlaceholder":327},[284,1285,1286],{"class":286,"line":634},[284,1287,1288],{"class":1203},"\u002F\u002F After logout\n",[284,1290,1291,1294],{"class":286,"line":643},[284,1292,1293],{"class":340},"clearIdentity",[284,1295,1296],{"class":298},"()\n",[259,1298,1299],{},"Identity fields are automatically merged into every log event until cleared. This lets you correlate browser events to specific users in your observability tools.",[263,1301,160],{"id":1302},"configuration",[259,1304,1305,1308],{},[281,1306,1307],{},"initLog()"," accepts the following options:",[1310,1311,1312,1328],"table",{},[1313,1314,1315],"thead",{},[1316,1317,1318,1322,1325],"tr",{},[1319,1320,1321],"th",{},"Option",[1319,1323,1324],{},"Default",[1319,1326,1327],{},"Description",[1329,1330,1331,1347,1361,1375,1390],"tbody",{},[1316,1332,1333,1339,1344],{},[1334,1335,1336],"td",{},[281,1337,1338],{},"enabled",[1334,1340,1341],{},[281,1342,1343],{},"true",[1334,1345,1346],{},"Enable or disable all client logging",[1316,1348,1349,1354,1358],{},[1334,1350,1351],{},[281,1352,1353],{},"console",[1334,1355,1356],{},[281,1357,1343],{},[1334,1359,1360],{},"Output logs to the browser console",[1316,1362,1363,1368,1372],{},[1334,1364,1365],{},[281,1366,1367],{},"pretty",[1334,1369,1370],{},[281,1371,1343],{},[1334,1373,1374],{},"Use colored, formatted console output",[1316,1376,1377,1382,1387],{},[1334,1378,1379],{},[281,1380,1381],{},"service",[1334,1383,1384],{},[281,1385,1386],{},"'client'",[1334,1388,1389],{},"Service name included in every log event",[1316,1391,1392,1397,1400],{},[1334,1393,1394],{},[281,1395,1396],{},"transport",[1334,1398,1399],{},"-",[1334,1401,1402],{},"Send logs to a server endpoint (see below)",[273,1404,1406],{"className":275,"code":1405,"language":278,"meta":279,"style":279},"initLog({\n  enabled: true,\n  console: true,\n  pretty: true,\n  service: 'web',\n  transport: {\n    enabled: true,\n    endpoint: '\u002Fapi\u002F_evlog\u002Fingest',\n  },\n})\n",[281,1407,1408,1417,1431,1442,1453,1468,1477,1488,1504,1509],{"__ignoreMap":279},[284,1409,1410,1412,1414],{"class":286,"line":287},[284,1411,705],{"class":340},[284,1413,344],{"class":298},[284,1415,1416],{"class":294},"{\n",[284,1418,1419,1422,1424,1428],{"class":286,"line":324},[284,1420,1421],{"class":363},"  enabled",[284,1423,372],{"class":294},[284,1425,1427],{"class":1426},"sfNiH"," true",[284,1429,1430],{"class":294},",\n",[284,1432,1433,1436,1438,1440],{"class":286,"line":331},[284,1434,1435],{"class":363},"  console",[284,1437,372],{"class":294},[284,1439,1427],{"class":1426},[284,1441,1430],{"class":294},[284,1443,1444,1447,1449,1451],{"class":286,"line":357},[284,1445,1446],{"class":363},"  pretty",[284,1448,372],{"class":294},[284,1450,1427],{"class":1426},[284,1452,1430],{"class":294},[284,1454,1455,1458,1460,1462,1464,1466],{"class":286,"line":388},[284,1456,1457],{"class":363},"  service",[284,1459,372],{"class":294},[284,1461,314],{"class":294},[284,1463,377],{"class":317},[284,1465,380],{"class":294},[284,1467,1430],{"class":294},[284,1469,1470,1473,1475],{"class":286,"line":393},[284,1471,1472],{"class":363},"  transport",[284,1474,372],{"class":294},[284,1476,354],{"class":294},[284,1478,1479,1482,1484,1486],{"class":286,"line":445},[284,1480,1481],{"class":363},"    enabled",[284,1483,372],{"class":294},[284,1485,1427],{"class":1426},[284,1487,1430],{"class":294},[284,1489,1490,1493,1495,1497,1500,1502],{"class":286,"line":590},[284,1491,1492],{"class":363},"    endpoint",[284,1494,372],{"class":294},[284,1496,314],{"class":294},[284,1498,1499],{"class":317},"\u002Fapi\u002F_evlog\u002Fingest",[284,1501,380],{"class":294},[284,1503,1430],{"class":294},[284,1505,1506],{"class":286,"line":634},[284,1507,1508],{"class":294},"  },\n",[284,1510,1511,1513],{"class":286,"line":643},[284,1512,448],{"class":294},[284,1514,385],{"class":298},[263,1516,1518],{"id":1517},"sending-logs-to-the-server","Sending Logs to the Server",[259,1520,1521],{},"By default, client logs only appear in the browser console. To persist them, you have two options:",[779,1523,1525],{"id":1524},"built-in-transport","Built-in Transport",[259,1527,1528,1529,1531,1532,1535,1536,1539],{},"The simplest approach is to enable the built-in transport in ",[281,1530,1307],{},". Each log is sent individually via ",[281,1533,1534],{},"fetch"," with ",[281,1537,1538],{},"keepalive: true",". Good for low-volume apps.",[270,1541,1542,1664],{},[273,1543,1545],{"className":275,"code":1544,"filename":277,"language":278,"meta":279,"style":279},"import { initLog } from 'evlog\u002Fclient'\n\nexport default defineNuxtPlugin(() => {\n  initLog({\n    service: 'web',\n    transport: {\n      enabled: true,\n      endpoint: '\u002Fapi\u002F_evlog\u002Fingest', \u002F\u002F default\n    },\n  })\n})\n",[281,1546,1547,1565,1569,1585,1593,1608,1617,1628,1646,1651,1658],{"__ignoreMap":279},[284,1548,1549,1551,1553,1555,1557,1559,1561,1563],{"class":286,"line":287},[284,1550,291],{"class":290},[284,1552,295],{"class":294},[284,1554,299],{"class":298},[284,1556,308],{"class":294},[284,1558,311],{"class":290},[284,1560,314],{"class":294},[284,1562,318],{"class":317},[284,1564,321],{"class":294},[284,1566,1567],{"class":286,"line":324},[284,1568,328],{"emptyLinePlaceholder":327},[284,1570,1571,1573,1575,1577,1579,1581,1583],{"class":286,"line":331},[284,1572,334],{"class":290},[284,1574,337],{"class":290},[284,1576,341],{"class":340},[284,1578,344],{"class":298},[284,1580,347],{"class":294},[284,1582,351],{"class":350},[284,1584,354],{"class":294},[284,1586,1587,1589,1591],{"class":286,"line":357},[284,1588,360],{"class":340},[284,1590,344],{"class":363},[284,1592,1416],{"class":294},[284,1594,1595,1598,1600,1602,1604,1606],{"class":286,"line":388},[284,1596,1597],{"class":363},"    service",[284,1599,372],{"class":294},[284,1601,314],{"class":294},[284,1603,377],{"class":317},[284,1605,380],{"class":294},[284,1607,1430],{"class":294},[284,1609,1610,1613,1615],{"class":286,"line":393},[284,1611,1612],{"class":363},"    transport",[284,1614,372],{"class":294},[284,1616,354],{"class":294},[284,1618,1619,1622,1624,1626],{"class":286,"line":445},[284,1620,1621],{"class":363},"      enabled",[284,1623,372],{"class":294},[284,1625,1427],{"class":1426},[284,1627,1430],{"class":294},[284,1629,1630,1633,1635,1637,1639,1641,1643],{"class":286,"line":590},[284,1631,1632],{"class":363},"      endpoint",[284,1634,372],{"class":294},[284,1636,314],{"class":294},[284,1638,1499],{"class":317},[284,1640,380],{"class":294},[284,1642,302],{"class":294},[284,1644,1645],{"class":1203}," \u002F\u002F default\n",[284,1647,1648],{"class":286,"line":634},[284,1649,1650],{"class":294},"    },\n",[284,1652,1653,1656],{"class":286,"line":643},[284,1654,1655],{"class":294},"  }",[284,1657,385],{"class":363},[284,1659,1660,1662],{"class":286,"line":648},[284,1661,448],{"class":294},[284,1663,385],{"class":298},[273,1665,1667],{"className":275,"code":1666,"filename":672,"language":278,"meta":279,"style":279},"import { initLog } from 'evlog\u002Fclient'\n\ninitLog({\n  service: 'web',\n  transport: {\n    enabled: true,\n    endpoint: '\u002Fapi\u002F_evlog\u002Fingest',\n  },\n})\n",[281,1668,1669,1687,1691,1699,1713,1721,1731,1745,1749],{"__ignoreMap":279},[284,1670,1671,1673,1675,1677,1679,1681,1683,1685],{"class":286,"line":287},[284,1672,291],{"class":290},[284,1674,295],{"class":294},[284,1676,299],{"class":298},[284,1678,308],{"class":294},[284,1680,311],{"class":290},[284,1682,314],{"class":294},[284,1684,318],{"class":317},[284,1686,321],{"class":294},[284,1688,1689],{"class":286,"line":324},[284,1690,328],{"emptyLinePlaceholder":327},[284,1692,1693,1695,1697],{"class":286,"line":331},[284,1694,705],{"class":340},[284,1696,344],{"class":298},[284,1698,1416],{"class":294},[284,1700,1701,1703,1705,1707,1709,1711],{"class":286,"line":357},[284,1702,1457],{"class":363},[284,1704,372],{"class":294},[284,1706,314],{"class":294},[284,1708,377],{"class":317},[284,1710,380],{"class":294},[284,1712,1430],{"class":294},[284,1714,1715,1717,1719],{"class":286,"line":388},[284,1716,1472],{"class":363},[284,1718,372],{"class":294},[284,1720,354],{"class":294},[284,1722,1723,1725,1727,1729],{"class":286,"line":393},[284,1724,1481],{"class":363},[284,1726,372],{"class":294},[284,1728,1427],{"class":1426},[284,1730,1430],{"class":294},[284,1732,1733,1735,1737,1739,1741,1743],{"class":286,"line":445},[284,1734,1492],{"class":363},[284,1736,372],{"class":294},[284,1738,314],{"class":294},[284,1740,1499],{"class":317},[284,1742,380],{"class":294},[284,1744,1430],{"class":294},[284,1746,1747],{"class":286,"line":590},[284,1748,1508],{"class":294},[284,1750,1751,1753],{"class":286,"line":634},[284,1752,448],{"class":294},[284,1754,385],{"class":298},[1756,1757,1758,1759,1764],"callout",{"color":402,"icon":13},"In Nuxt with the evlog module, the server ingest endpoint is auto-registered. For other frameworks, you need to create the endpoint yourself. See the ",[1760,1761,1763],"a",{"href":1762},"\u002Fadapters\u002Fbrowser#server-endpoint","Browser Drain"," docs for Express and Hono examples.",[779,1766,1768],{"id":1767},"browser-drain-pipeline","Browser Drain Pipeline",[259,1770,1771],{},"For higher volume or when you need batching, retries, and page-exit flushing, use the browser drain. This works with any frontend and has no framework dependency.",[270,1773,1774,2003],{},[273,1775,1777],{"className":275,"code":1776,"filename":277,"language":278,"meta":279,"style":279},"import { initLogger, log } from 'evlog'\nimport { createBrowserLogDrain } from 'evlog\u002Fbrowser'\n\nexport default defineNuxtPlugin(() => {\n  const drain = createBrowserLogDrain({\n    drain: { endpoint: '\u002Fapi\u002F_evlog\u002Fingest' },\n    pipeline: {\n      batch: { size: 25, intervalMs: 2000 },\n      retry: { maxAttempts: 2 },\n    },\n  })\n\n  initLogger({ drain })\n  log.info({ action: 'app_init' })\n})\n",[281,1778,1779,1803,1823,1827,1843,1860,1882,1891,1920,1939,1943,1949,1953,1969,1996],{"__ignoreMap":279},[284,1780,1781,1783,1785,1788,1790,1792,1794,1796,1798,1801],{"class":286,"line":287},[284,1782,291],{"class":290},[284,1784,295],{"class":294},[284,1786,1787],{"class":298}," initLogger",[284,1789,302],{"class":294},[284,1791,305],{"class":298},[284,1793,308],{"class":294},[284,1795,311],{"class":290},[284,1797,314],{"class":294},[284,1799,1800],{"class":317},"evlog",[284,1802,321],{"class":294},[284,1804,1805,1807,1809,1812,1814,1816,1818,1821],{"class":286,"line":324},[284,1806,291],{"class":290},[284,1808,295],{"class":294},[284,1810,1811],{"class":298}," createBrowserLogDrain",[284,1813,308],{"class":294},[284,1815,311],{"class":290},[284,1817,314],{"class":294},[284,1819,1820],{"class":317},"evlog\u002Fbrowser",[284,1822,321],{"class":294},[284,1824,1825],{"class":286,"line":331},[284,1826,328],{"emptyLinePlaceholder":327},[284,1828,1829,1831,1833,1835,1837,1839,1841],{"class":286,"line":357},[284,1830,334],{"class":290},[284,1832,337],{"class":290},[284,1834,341],{"class":340},[284,1836,344],{"class":298},[284,1838,347],{"class":294},[284,1840,351],{"class":350},[284,1842,354],{"class":294},[284,1844,1845,1848,1851,1854,1856,1858],{"class":286,"line":388},[284,1846,1847],{"class":350},"  const",[284,1849,1850],{"class":298}," drain",[284,1852,1853],{"class":294}," =",[284,1855,1811],{"class":340},[284,1857,344],{"class":363},[284,1859,1416],{"class":294},[284,1861,1862,1865,1867,1869,1871,1873,1875,1877,1879],{"class":286,"line":393},[284,1863,1864],{"class":363},"    drain",[284,1866,372],{"class":294},[284,1868,295],{"class":294},[284,1870,929],{"class":363},[284,1872,372],{"class":294},[284,1874,314],{"class":294},[284,1876,1499],{"class":317},[284,1878,380],{"class":294},[284,1880,1881],{"class":294}," },\n",[284,1883,1884,1887,1889],{"class":286,"line":445},[284,1885,1886],{"class":363},"    pipeline",[284,1888,372],{"class":294},[284,1890,354],{"class":294},[284,1892,1893,1896,1898,1900,1903,1905,1908,1910,1913,1915,1918],{"class":286,"line":590},[284,1894,1895],{"class":363},"      batch",[284,1897,372],{"class":294},[284,1899,295],{"class":294},[284,1901,1902],{"class":363}," size",[284,1904,372],{"class":294},[284,1906,1907],{"class":895}," 25",[284,1909,302],{"class":294},[284,1911,1912],{"class":363}," intervalMs",[284,1914,372],{"class":294},[284,1916,1917],{"class":895}," 2000",[284,1919,1881],{"class":294},[284,1921,1922,1925,1927,1929,1932,1934,1937],{"class":286,"line":634},[284,1923,1924],{"class":363},"      retry",[284,1926,372],{"class":294},[284,1928,295],{"class":294},[284,1930,1931],{"class":363}," maxAttempts",[284,1933,372],{"class":294},[284,1935,1936],{"class":895}," 2",[284,1938,1881],{"class":294},[284,1940,1941],{"class":286,"line":643},[284,1942,1650],{"class":294},[284,1944,1945,1947],{"class":286,"line":648},[284,1946,1655],{"class":294},[284,1948,385],{"class":363},[284,1950,1951],{"class":286,"line":665},[284,1952,328],{"emptyLinePlaceholder":327},[284,1954,1956,1959,1961,1963,1965,1967],{"class":286,"line":1955},13,[284,1957,1958],{"class":340},"  initLogger",[284,1960,344],{"class":363},[284,1962,366],{"class":294},[284,1964,1850],{"class":298},[284,1966,308],{"class":294},[284,1968,385],{"class":363},[284,1970,1972,1974,1976,1978,1980,1982,1984,1986,1988,1990,1992,1994],{"class":286,"line":1971},14,[284,1973,396],{"class":298},[284,1975,399],{"class":294},[284,1977,402],{"class":340},[284,1979,344],{"class":363},[284,1981,366],{"class":294},[284,1983,409],{"class":363},[284,1985,372],{"class":294},[284,1987,314],{"class":294},[284,1989,416],{"class":317},[284,1991,380],{"class":294},[284,1993,308],{"class":294},[284,1995,385],{"class":363},[284,1997,1999,2001],{"class":286,"line":1998},15,[284,2000,448],{"class":294},[284,2002,385],{"class":298},[273,2004,2006],{"className":275,"code":2005,"filename":672,"language":278,"meta":279,"style":279},"import { initLogger, log } from 'evlog'\nimport { createBrowserLogDrain } from 'evlog\u002Fbrowser'\n\nconst drain = createBrowserLogDrain({\n  drain: { endpoint: 'https:\u002F\u002Flogs.example.com\u002Fv1\u002Fingest' },\n  pipeline: {\n    batch: { size: 25, intervalMs: 2000 },\n    retry: { maxAttempts: 2 },\n  },\n})\n\ninitLogger({ drain })\nlog.info({ action: 'app_init' })\n",[281,2007,2008,2030,2048,2052,2069,2091,2100,2125,2142,2146,2152,2156,2171],{"__ignoreMap":279},[284,2009,2010,2012,2014,2016,2018,2020,2022,2024,2026,2028],{"class":286,"line":287},[284,2011,291],{"class":290},[284,2013,295],{"class":294},[284,2015,1787],{"class":298},[284,2017,302],{"class":294},[284,2019,305],{"class":298},[284,2021,308],{"class":294},[284,2023,311],{"class":290},[284,2025,314],{"class":294},[284,2027,1800],{"class":317},[284,2029,321],{"class":294},[284,2031,2032,2034,2036,2038,2040,2042,2044,2046],{"class":286,"line":324},[284,2033,291],{"class":290},[284,2035,295],{"class":294},[284,2037,1811],{"class":298},[284,2039,308],{"class":294},[284,2041,311],{"class":290},[284,2043,314],{"class":294},[284,2045,1820],{"class":317},[284,2047,321],{"class":294},[284,2049,2050],{"class":286,"line":331},[284,2051,328],{"emptyLinePlaceholder":327},[284,2053,2054,2057,2060,2063,2065,2067],{"class":286,"line":357},[284,2055,2056],{"class":350},"const",[284,2058,2059],{"class":298}," drain ",[284,2061,2062],{"class":294},"=",[284,2064,1811],{"class":340},[284,2066,344],{"class":298},[284,2068,1416],{"class":294},[284,2070,2071,2074,2076,2078,2080,2082,2084,2087,2089],{"class":286,"line":388},[284,2072,2073],{"class":363},"  drain",[284,2075,372],{"class":294},[284,2077,295],{"class":294},[284,2079,929],{"class":363},[284,2081,372],{"class":294},[284,2083,314],{"class":294},[284,2085,2086],{"class":317},"https:\u002F\u002Flogs.example.com\u002Fv1\u002Fingest",[284,2088,380],{"class":294},[284,2090,1881],{"class":294},[284,2092,2093,2096,2098],{"class":286,"line":393},[284,2094,2095],{"class":363},"  pipeline",[284,2097,372],{"class":294},[284,2099,354],{"class":294},[284,2101,2102,2105,2107,2109,2111,2113,2115,2117,2119,2121,2123],{"class":286,"line":445},[284,2103,2104],{"class":363},"    batch",[284,2106,372],{"class":294},[284,2108,295],{"class":294},[284,2110,1902],{"class":363},[284,2112,372],{"class":294},[284,2114,1907],{"class":895},[284,2116,302],{"class":294},[284,2118,1912],{"class":363},[284,2120,372],{"class":294},[284,2122,1917],{"class":895},[284,2124,1881],{"class":294},[284,2126,2127,2130,2132,2134,2136,2138,2140],{"class":286,"line":590},[284,2128,2129],{"class":363},"    retry",[284,2131,372],{"class":294},[284,2133,295],{"class":294},[284,2135,1931],{"class":363},[284,2137,372],{"class":294},[284,2139,1936],{"class":895},[284,2141,1881],{"class":294},[284,2143,2144],{"class":286,"line":634},[284,2145,1508],{"class":294},[284,2147,2148,2150],{"class":286,"line":643},[284,2149,448],{"class":294},[284,2151,385],{"class":298},[284,2153,2154],{"class":286,"line":648},[284,2155,328],{"emptyLinePlaceholder":327},[284,2157,2158,2161,2163,2165,2167,2169],{"class":286,"line":665},[284,2159,2160],{"class":340},"initLogger",[284,2162,344],{"class":298},[284,2164,366],{"class":294},[284,2166,2059],{"class":298},[284,2168,448],{"class":294},[284,2170,385],{"class":298},[284,2172,2173,2175,2177,2179,2181,2183,2185,2187,2189,2191,2193,2195],{"class":286,"line":1955},[284,2174,728],{"class":298},[284,2176,399],{"class":294},[284,2178,402],{"class":340},[284,2180,344],{"class":298},[284,2182,366],{"class":294},[284,2184,409],{"class":363},[284,2186,372],{"class":294},[284,2188,314],{"class":294},[284,2190,416],{"class":317},[284,2192,380],{"class":294},[284,2194,308],{"class":294},[284,2196,385],{"class":298},[259,2198,2199],{},"The browser drain automatically:",[2201,2202,2203,2211,2217],"ul",{},[2204,2205,2206,2210],"li",{},[2207,2208,2209],"strong",{},"Batches"," events by size and time interval",[2204,2212,2213,2216],{},[2207,2214,2215],{},"Retries"," failed sends with exponential backoff",[2204,2218,2219,2222,2223,2226],{},[2207,2220,2221],{},"Flushes"," buffered events via ",[281,2224,2225],{},"sendBeacon"," when the page becomes hidden (tab switch, navigation, close)",[1756,2228,2231,2232,2234],{"color":2229,"icon":2230},"neutral","i-lucide-arrow-right","See the ",[1760,2233,1763],{"href":180}," adapter docs for full configuration reference, authentication, and server endpoint examples.",[263,2236,2238],{"id":2237},"next-steps","Next Steps",[2201,2240,2241,2246,2251],{},[2204,2242,2243,2245],{},[1760,2244,1763],{"href":180}," - Batching, retry, and sendBeacon fallback",[2204,2247,2248,2250],{},[1760,2249,219],{"href":220}," - Advanced pipeline configuration",[2204,2252,2253,2255],{},[1760,2254,136],{"href":137}," - Surface client errors with actionable context",[2257,2258,2259],"style",{},"html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}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 .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 .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}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}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}",{"title":279,"searchDepth":324,"depth":324,"links":2261},[2262,2263,2268,2269,2270,2274],{"id":265,"depth":324,"text":20},{"id":776,"depth":324,"text":777,"children":2264},[2265,2266,2267],{"id":781,"depth":331,"text":121},{"id":955,"depth":331,"text":956},{"id":1080,"depth":331,"text":1081},{"id":1154,"depth":324,"text":1155},{"id":1302,"depth":324,"text":160},{"id":1517,"depth":324,"text":1518,"children":2271},[2272,2273],{"id":1524,"depth":331,"text":1525},{"id":1767,"depth":331,"text":1768},{"id":2237,"depth":324,"text":2238},"Capture browser events with structured logging. Same API as the server, with automatic console styling, user identity context, and optional server transport.","md",[2278,2280],{"label":1763,"icon":182,"to":180,"color":2229,"variant":2279},"subtle",{"label":121,"icon":124,"to":122,"color":2229,"variant":2279},{},{"icon":158},{"title":155,"description":2275},"Zj76K3NyBI1ABJPsxbZxgF_an7rJHR55KArKCCh5NYk",[2286,2288],{"title":150,"path":151,"stem":152,"description":2287,"icon":153,"children":-1},"Control log volume with two-tier sampling. Head sampling drops noise by level, tail sampling rescues critical events based on outcome. Never miss errors, slow requests, or critical paths.",{"title":160,"path":161,"stem":162,"description":2289,"icon":163,"children":-1},"Complete reference for all evlog configuration options including global logger settings, middleware options, environment context, and framework-specific overrides.",1773605724255]