[{"data":1,"prerenderedAt":1631},["ShallowReactive",2],{"navigation_docs":3,"-core-concepts-client-logging":191,"-core-concepts-client-logging-surround":1626},[4,30,65,115,132,146],{"title":5,"path":6,"stem":7,"children":8,"page":29},"Getting Started","/getting-started","1.getting-started",[9,14,19,24],{"title":10,"path":11,"stem":12,"icon":13},"Introduction","/getting-started/introduction","1.getting-started/1.introduction","i-lucide-info",{"title":15,"path":16,"stem":17,"icon":18},"Installation","/getting-started/installation","1.getting-started/2.installation","i-lucide-download",{"title":20,"path":21,"stem":22,"icon":23},"Quick Start","/getting-started/quick-start","1.getting-started/3.quick-start","i-lucide-zap",{"title":25,"path":26,"stem":27,"icon":28},"Agent Skills","/getting-started/agent-skills","1.getting-started/4.agent-skills","i-lucide-sparkles",false,{"title":31,"path":32,"stem":33,"children":34,"page":29},"Core Concepts","/core-concepts","2.core-concepts",[35,40,45,50,55,60],{"title":36,"path":37,"stem":38,"icon":39},"Wide Events","/core-concepts/wide-events","2.core-concepts/1.wide-events","i-lucide-layers",{"title":41,"path":42,"stem":43,"icon":44},"Structured Errors","/core-concepts/structured-errors","2.core-concepts/2.structured-errors","i-lucide-shield-alert",{"title":46,"path":47,"stem":48,"icon":49},"Best Practices","/core-concepts/best-practices","2.core-concepts/3.best-practices","i-lucide-shield-check",{"title":51,"path":52,"stem":53,"icon":54},"Typed Fields","/core-concepts/typed-fields","2.core-concepts/4.typed-fields","i-simple-icons-typescript",{"title":56,"path":57,"stem":58,"icon":59},"Sampling","/core-concepts/sampling","2.core-concepts/5.sampling","i-lucide-filter",{"title":61,"path":62,"stem":63,"icon":64},"Client Logging","/core-concepts/client-logging","2.core-concepts/6.client-logging","i-lucide-monitor",{"title":66,"path":67,"stem":68,"children":69,"page":29},"Adapters","/adapters","3.adapters",[70,75,80,85,90,95,100,105,110],{"title":71,"path":72,"stem":73,"icon":74},"Overview","/adapters/overview","3.adapters/1.overview","i-custom-plug",{"title":76,"path":77,"stem":78,"icon":79},"Axiom","/adapters/axiom","3.adapters/2.axiom","i-custom-axiom",{"title":81,"path":82,"stem":83,"icon":84},"OTLP","/adapters/otlp","3.adapters/3.otlp","i-simple-icons-opentelemetry",{"title":86,"path":87,"stem":88,"icon":89},"PostHog","/adapters/posthog","3.adapters/4.posthog","i-simple-icons-posthog",{"title":91,"path":92,"stem":93,"icon":94},"Sentry","/adapters/sentry","3.adapters/5.sentry","i-simple-icons-sentry",{"title":96,"path":97,"stem":98,"icon":99},"Better Stack","/adapters/better-stack","3.adapters/6.better-stack","i-simple-icons-betterstack",{"title":101,"path":102,"stem":103,"icon":104},"Custom Adapters","/adapters/custom","3.adapters/7.custom","i-lucide-code",{"title":106,"path":107,"stem":108,"icon":109},"Pipeline","/adapters/pipeline","3.adapters/8.pipeline","i-lucide-workflow",{"title":111,"path":112,"stem":113,"icon":114},"Browser","/adapters/browser","3.adapters/9.browser","i-lucide-globe",{"title":116,"path":117,"stem":118,"children":119,"page":29},"Enrichers","/enrichers","4.enrichers",[120,123,128],{"title":71,"path":121,"stem":122,"icon":28},"/enrichers/overview","4.enrichers/1.overview",{"title":124,"path":125,"stem":126,"icon":127},"Built-in","/enrichers/built-in","4.enrichers/2.built-in","i-lucide-puzzle",{"title":129,"path":130,"stem":131,"icon":104},"Custom","/enrichers/custom","4.enrichers/3.custom",{"title":133,"path":134,"stem":135,"children":136,"page":29},"NuxtHub","/nuxthub","5.nuxthub",[137,141],{"title":71,"path":138,"stem":139,"icon":140},"/nuxthub/overview","5.nuxthub/1.overview","i-lucide-database",{"title":142,"path":143,"stem":144,"icon":145},"Retention","/nuxthub/retention","5.nuxthub/2.retention","i-lucide-clock",{"title":147,"path":148,"stem":149,"children":150,"page":29},"Examples","/examples","6.examples",[151,156,161,166,171,176,181,186],{"title":152,"path":153,"stem":154,"icon":155},"Next.js","/examples/nextjs","6.examples/1.nextjs","i-simple-icons-nextdotjs",{"title":157,"path":158,"stem":159,"icon":160},"SvelteKit","/examples/sveltekit","6.examples/2.sveltekit","i-simple-icons-svelte",{"title":162,"path":163,"stem":164,"icon":165},"TanStack Start","/examples/tanstack-start","6.examples/3.tanstack-start","i-custom-tanstack",{"title":167,"path":168,"stem":169,"icon":170},"NestJS","/examples/nestjs","6.examples/4.nestjs","i-simple-icons-nestjs",{"title":172,"path":173,"stem":174,"icon":175},"Express","/examples/express","6.examples/5.express","i-simple-icons-express",{"title":177,"path":178,"stem":179,"icon":180},"Hono","/examples/hono","6.examples/6.hono","i-simple-icons-hono",{"title":182,"path":183,"stem":184,"icon":185},"Fastify","/examples/fastify","6.examples/7.fastify","i-simple-icons-fastify",{"title":187,"path":188,"stem":189,"icon":190},"Elysia","/examples/elysia","6.examples/8.elysia","i-custom-elysia",{"id":192,"title":61,"body":193,"description":1616,"extension":1617,"links":1618,"meta":1622,"navigation":1623,"path":62,"seo":1624,"stem":63,"__hash__":1625},"docs/2.core-concepts/6.client-logging.md",{"type":194,"value":195,"toc":1601},"minimark",[196,200,204,207,386,393,397,401,407,572,576,579,697,701,704,772,776,782,920,923,927,933,1027,1140,1144,1147,1151,1156,1279,1290,1294,1298,1301,1536,1539,1566,1576,1580,1597],[197,198,199],"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.",[201,202,20],"h2",{"id":203},"quick-start",[197,205,206],{},"evlog provides a client-side logging API that mirrors the server:",[208,209,215],"pre",{"className":210,"code":211,"filename":212,"language":213,"meta":214,"style":214},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { initLog, log } from 'evlog/client'\n\nexport default defineNuxtPlugin(() => {\n  initLog({ service: 'web' })\n\n  log.info({ action: 'app_init', path: window.location.pathname })\n})\n","app/plugins/logger.client.ts","typescript","",[216,217,218,257,264,290,321,326,378],"code",{"__ignoreMap":214},[219,220,223,227,231,235,238,241,244,247,250,254],"span",{"class":221,"line":222},"line",1,[219,224,226],{"class":225},"s7zQu","import",[219,228,230],{"class":229},"sMK4o"," {",[219,232,234],{"class":233},"sTEyZ"," initLog",[219,236,237],{"class":229},",",[219,239,240],{"class":233}," log",[219,242,243],{"class":229}," }",[219,245,246],{"class":225}," from",[219,248,249],{"class":229}," '",[219,251,253],{"class":252},"sfazB","evlog/client",[219,255,256],{"class":229},"'\n",[219,258,260],{"class":221,"line":259},2,[219,261,263],{"emptyLinePlaceholder":262},true,"\n",[219,265,267,270,273,277,280,283,287],{"class":221,"line":266},3,[219,268,269],{"class":225},"export",[219,271,272],{"class":225}," default",[219,274,276],{"class":275},"s2Zo4"," defineNuxtPlugin",[219,278,279],{"class":233},"(",[219,281,282],{"class":229},"()",[219,284,286],{"class":285},"spNyl"," =>",[219,288,289],{"class":229}," {\n",[219,291,293,296,299,302,305,308,310,313,316,318],{"class":221,"line":292},4,[219,294,295],{"class":275},"  initLog",[219,297,279],{"class":298},"swJcz",[219,300,301],{"class":229},"{",[219,303,304],{"class":298}," service",[219,306,307],{"class":229},":",[219,309,249],{"class":229},[219,311,312],{"class":252},"web",[219,314,315],{"class":229},"'",[219,317,243],{"class":229},[219,319,320],{"class":298},")\n",[219,322,324],{"class":221,"line":323},5,[219,325,263],{"emptyLinePlaceholder":262},[219,327,329,332,335,338,340,342,345,347,349,352,354,356,359,361,364,366,369,371,374,376],{"class":221,"line":328},6,[219,330,331],{"class":233},"  log",[219,333,334],{"class":229},".",[219,336,337],{"class":275},"info",[219,339,279],{"class":298},[219,341,301],{"class":229},[219,343,344],{"class":298}," action",[219,346,307],{"class":229},[219,348,249],{"class":229},[219,350,351],{"class":252},"app_init",[219,353,315],{"class":229},[219,355,237],{"class":229},[219,357,358],{"class":298}," path",[219,360,307],{"class":229},[219,362,363],{"class":233}," window",[219,365,334],{"class":229},[219,367,368],{"class":233},"location",[219,370,334],{"class":229},[219,372,373],{"class":233},"pathname",[219,375,243],{"class":229},[219,377,320],{"class":298},[219,379,381,384],{"class":221,"line":380},7,[219,382,383],{"class":229},"}",[219,385,320],{"class":233},[197,387,388,389,392],{},"The ",[216,390,391],{},"log"," object works anywhere in your client code — components, composables, event handlers.",[201,394,396],{"id":395},"logging-api","Logging API",[398,399,36],"h3",{"id":400},"wide-events",[197,402,403,404,307],{},"Pass an object to capture structured context, just like server-side ",[216,405,406],{},"log.set()",[208,408,410],{"className":210,"code":409,"language":213,"meta":214,"style":214},"log.info({ action: 'page_view', path: '/products', referrer: document.referrer })\nlog.warn({ action: 'slow_load', component: 'ProductList', duration: 3200 })\nlog.error({ action: 'fetch_failed', endpoint: '/api/cart', status: 500 })\n",[216,411,412,467,520],{"__ignoreMap":214},[219,413,414,416,418,420,422,424,426,428,430,433,435,437,439,441,443,446,448,450,453,455,458,460,463,465],{"class":221,"line":222},[219,415,391],{"class":233},[219,417,334],{"class":229},[219,419,337],{"class":275},[219,421,279],{"class":233},[219,423,301],{"class":229},[219,425,344],{"class":298},[219,427,307],{"class":229},[219,429,249],{"class":229},[219,431,432],{"class":252},"page_view",[219,434,315],{"class":229},[219,436,237],{"class":229},[219,438,358],{"class":298},[219,440,307],{"class":229},[219,442,249],{"class":229},[219,444,445],{"class":252},"/products",[219,447,315],{"class":229},[219,449,237],{"class":229},[219,451,452],{"class":298}," referrer",[219,454,307],{"class":229},[219,456,457],{"class":233}," document",[219,459,334],{"class":229},[219,461,462],{"class":233},"referrer ",[219,464,383],{"class":229},[219,466,320],{"class":233},[219,468,469,471,473,476,478,480,482,484,486,489,491,493,496,498,500,503,505,507,510,512,516,518],{"class":221,"line":259},[219,470,391],{"class":233},[219,472,334],{"class":229},[219,474,475],{"class":275},"warn",[219,477,279],{"class":233},[219,479,301],{"class":229},[219,481,344],{"class":298},[219,483,307],{"class":229},[219,485,249],{"class":229},[219,487,488],{"class":252},"slow_load",[219,490,315],{"class":229},[219,492,237],{"class":229},[219,494,495],{"class":298}," component",[219,497,307],{"class":229},[219,499,249],{"class":229},[219,501,502],{"class":252},"ProductList",[219,504,315],{"class":229},[219,506,237],{"class":229},[219,508,509],{"class":298}," duration",[219,511,307],{"class":229},[219,513,515],{"class":514},"sbssI"," 3200",[219,517,243],{"class":229},[219,519,320],{"class":233},[219,521,522,524,526,529,531,533,535,537,539,542,544,546,549,551,553,556,558,560,563,565,568,570],{"class":221,"line":266},[219,523,391],{"class":233},[219,525,334],{"class":229},[219,527,528],{"class":275},"error",[219,530,279],{"class":233},[219,532,301],{"class":229},[219,534,344],{"class":298},[219,536,307],{"class":229},[219,538,249],{"class":229},[219,540,541],{"class":252},"fetch_failed",[219,543,315],{"class":229},[219,545,237],{"class":229},[219,547,548],{"class":298}," endpoint",[219,550,307],{"class":229},[219,552,249],{"class":229},[219,554,555],{"class":252},"/api/cart",[219,557,315],{"class":229},[219,559,237],{"class":229},[219,561,562],{"class":298}," status",[219,564,307],{"class":229},[219,566,567],{"class":514}," 500",[219,569,243],{"class":229},[219,571,320],{"class":233},[398,573,575],{"id":574},"tagged-logs","Tagged Logs",[197,577,578],{},"Pass a tag and message for quick, readable logs:",[208,580,582],{"className":210,"code":581,"language":213,"meta":214,"style":214},"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 /checkout')\n",[216,583,584,612,640,668],{"__ignoreMap":214},[219,585,586,588,590,592,594,596,599,601,603,605,608,610],{"class":221,"line":222},[219,587,391],{"class":233},[219,589,334],{"class":229},[219,591,337],{"class":275},[219,593,279],{"class":233},[219,595,315],{"class":229},[219,597,598],{"class":252},"auth",[219,600,315],{"class":229},[219,602,237],{"class":229},[219,604,249],{"class":229},[219,606,607],{"class":252},"User logged in",[219,609,315],{"class":229},[219,611,320],{"class":233},[219,613,614,616,618,620,622,624,627,629,631,633,636,638],{"class":221,"line":259},[219,615,391],{"class":233},[219,617,334],{"class":229},[219,619,475],{"class":275},[219,621,279],{"class":233},[219,623,315],{"class":229},[219,625,626],{"class":252},"perf",[219,628,315],{"class":229},[219,630,237],{"class":229},[219,632,249],{"class":229},[219,634,635],{"class":252},"Image lazy-load took 4s",[219,637,315],{"class":229},[219,639,320],{"class":233},[219,641,642,644,646,648,650,652,655,657,659,661,664,666],{"class":221,"line":266},[219,643,391],{"class":233},[219,645,334],{"class":229},[219,647,528],{"class":275},[219,649,279],{"class":233},[219,651,315],{"class":229},[219,653,654],{"class":252},"payment",[219,656,315],{"class":229},[219,658,237],{"class":229},[219,660,249],{"class":229},[219,662,663],{"class":252},"Stripe checkout failed",[219,665,315],{"class":229},[219,667,320],{"class":233},[219,669,670,672,674,677,679,681,684,686,688,690,693,695],{"class":221,"line":292},[219,671,391],{"class":233},[219,673,334],{"class":229},[219,675,676],{"class":275},"debug",[219,678,279],{"class":233},[219,680,315],{"class":229},[219,682,683],{"class":252},"router",[219,685,315],{"class":229},[219,687,237],{"class":229},[219,689,249],{"class":229},[219,691,692],{"class":252},"Navigated to /checkout",[219,694,315],{"class":229},[219,696,320],{"class":233},[398,698,700],{"id":699},"console-output","Console Output",[197,702,703],{},"In the browser console, logs render with colors and grouping:",[208,705,709],{"className":706,"code":707,"language":708,"meta":214,"style":214},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","[web] info  { action: 'page_view', path: '/products' }\n[auth] User logged in\n[perf] Image lazy-load took 4s\n","bash",[216,710,711,750,761],{"__ignoreMap":214},[219,712,713,716,718,721,724,726,730,732,734,736,738,741,743,745,747],{"class":221,"line":222},[219,714,715],{"class":229},"[",[219,717,312],{"class":233},[219,719,720],{"class":229},"]",[219,722,723],{"class":233}," info  ",[219,725,301],{"class":229},[219,727,729],{"class":728},"sBMFI"," action:",[219,731,249],{"class":229},[219,733,432],{"class":252},[219,735,315],{"class":229},[219,737,237],{"class":252},[219,739,740],{"class":252}," path:",[219,742,249],{"class":229},[219,744,445],{"class":252},[219,746,315],{"class":229},[219,748,749],{"class":252}," }\n",[219,751,752,754,756,758],{"class":221,"line":259},[219,753,715],{"class":229},[219,755,598],{"class":233},[219,757,720],{"class":229},[219,759,760],{"class":233}," User logged in\n",[219,762,763,765,767,769],{"class":221,"line":266},[219,764,715],{"class":229},[219,766,626],{"class":233},[219,768,720],{"class":229},[219,770,771],{"class":233}," Image lazy-load took 4s\n",[201,773,775],{"id":774},"identity-context","Identity Context",[197,777,778,779,307],{},"Track which user generated a log with ",[216,780,781],{},"setIdentity()",[208,783,785],{"className":210,"code":784,"language":213,"meta":214,"style":214},"import { setIdentity, clearIdentity, log } from 'evlog/client'\n\n// After login\nsetIdentity({ userId: 'usr_123', plan: 'pro' })\n\nlog.info({ action: 'dashboard_view' })\n// → { userId: 'usr_123', plan: 'pro', action: 'dashboard_view', ... }\n\n// After logout\nclearIdentity()\n",[216,786,787,815,819,825,864,868,895,900,905,911],{"__ignoreMap":214},[219,788,789,791,793,796,798,801,803,805,807,809,811,813],{"class":221,"line":222},[219,790,226],{"class":225},[219,792,230],{"class":229},[219,794,795],{"class":233}," setIdentity",[219,797,237],{"class":229},[219,799,800],{"class":233}," clearIdentity",[219,802,237],{"class":229},[219,804,240],{"class":233},[219,806,243],{"class":229},[219,808,246],{"class":225},[219,810,249],{"class":229},[219,812,253],{"class":252},[219,814,256],{"class":229},[219,816,817],{"class":221,"line":259},[219,818,263],{"emptyLinePlaceholder":262},[219,820,821],{"class":221,"line":266},[219,822,824],{"class":823},"sHwdD","// After login\n",[219,826,827,830,832,834,837,839,841,844,846,848,851,853,855,858,860,862],{"class":221,"line":292},[219,828,829],{"class":275},"setIdentity",[219,831,279],{"class":233},[219,833,301],{"class":229},[219,835,836],{"class":298}," userId",[219,838,307],{"class":229},[219,840,249],{"class":229},[219,842,843],{"class":252},"usr_123",[219,845,315],{"class":229},[219,847,237],{"class":229},[219,849,850],{"class":298}," plan",[219,852,307],{"class":229},[219,854,249],{"class":229},[219,856,857],{"class":252},"pro",[219,859,315],{"class":229},[219,861,243],{"class":229},[219,863,320],{"class":233},[219,865,866],{"class":221,"line":323},[219,867,263],{"emptyLinePlaceholder":262},[219,869,870,872,874,876,878,880,882,884,886,889,891,893],{"class":221,"line":328},[219,871,391],{"class":233},[219,873,334],{"class":229},[219,875,337],{"class":275},[219,877,279],{"class":233},[219,879,301],{"class":229},[219,881,344],{"class":298},[219,883,307],{"class":229},[219,885,249],{"class":229},[219,887,888],{"class":252},"dashboard_view",[219,890,315],{"class":229},[219,892,243],{"class":229},[219,894,320],{"class":233},[219,896,897],{"class":221,"line":380},[219,898,899],{"class":823},"// → { userId: 'usr_123', plan: 'pro', action: 'dashboard_view', ... }\n",[219,901,903],{"class":221,"line":902},8,[219,904,263],{"emptyLinePlaceholder":262},[219,906,908],{"class":221,"line":907},9,[219,909,910],{"class":823},"// After logout\n",[219,912,914,917],{"class":221,"line":913},10,[219,915,916],{"class":275},"clearIdentity",[219,918,919],{"class":233},"()\n",[197,921,922],{},"Identity fields are automatically merged into every log event until cleared. This lets you correlate browser events to specific users in your observability tools.",[201,924,926],{"id":925},"configuration","Configuration",[197,928,929,932],{},[216,930,931],{},"initLog()"," accepts the following options:",[934,935,936,952],"table",{},[937,938,939],"thead",{},[940,941,942,946,949],"tr",{},[943,944,945],"th",{},"Option",[943,947,948],{},"Default",[943,950,951],{},"Description",[953,954,955,971,985,999,1014],"tbody",{},[940,956,957,963,968],{},[958,959,960],"td",{},[216,961,962],{},"enabled",[958,964,965],{},[216,966,967],{},"true",[958,969,970],{},"Enable or disable all client logging",[940,972,973,978,982],{},[958,974,975],{},[216,976,977],{},"console",[958,979,980],{},[216,981,967],{},[958,983,984],{},"Output logs to the browser console",[940,986,987,992,996],{},[958,988,989],{},[216,990,991],{},"pretty",[958,993,994],{},[216,995,967],{},[958,997,998],{},"Use colored, formatted console output",[940,1000,1001,1006,1011],{},[958,1002,1003],{},[216,1004,1005],{},"service",[958,1007,1008],{},[216,1009,1010],{},"'client'",[958,1012,1013],{},"Service name included in every log event",[940,1015,1016,1021,1024],{},[958,1017,1018],{},[216,1019,1020],{},"transport",[958,1022,1023],{},"—",[958,1025,1026],{},"Send logs to a server endpoint (see below)",[208,1028,1030],{"className":210,"code":1029,"language":213,"meta":214,"style":214},"initLog({\n  enabled: true,\n  console: true,\n  pretty: true,\n  service: 'web',\n  transport: {\n    enabled: true,\n    endpoint: '/api/_evlog/ingest',\n  },\n})\n",[216,1031,1032,1042,1056,1067,1078,1093,1102,1113,1129,1134],{"__ignoreMap":214},[219,1033,1034,1037,1039],{"class":221,"line":222},[219,1035,1036],{"class":275},"initLog",[219,1038,279],{"class":233},[219,1040,1041],{"class":229},"{\n",[219,1043,1044,1047,1049,1053],{"class":221,"line":259},[219,1045,1046],{"class":298},"  enabled",[219,1048,307],{"class":229},[219,1050,1052],{"class":1051},"sfNiH"," true",[219,1054,1055],{"class":229},",\n",[219,1057,1058,1061,1063,1065],{"class":221,"line":266},[219,1059,1060],{"class":298},"  console",[219,1062,307],{"class":229},[219,1064,1052],{"class":1051},[219,1066,1055],{"class":229},[219,1068,1069,1072,1074,1076],{"class":221,"line":292},[219,1070,1071],{"class":298},"  pretty",[219,1073,307],{"class":229},[219,1075,1052],{"class":1051},[219,1077,1055],{"class":229},[219,1079,1080,1083,1085,1087,1089,1091],{"class":221,"line":323},[219,1081,1082],{"class":298},"  service",[219,1084,307],{"class":229},[219,1086,249],{"class":229},[219,1088,312],{"class":252},[219,1090,315],{"class":229},[219,1092,1055],{"class":229},[219,1094,1095,1098,1100],{"class":221,"line":328},[219,1096,1097],{"class":298},"  transport",[219,1099,307],{"class":229},[219,1101,289],{"class":229},[219,1103,1104,1107,1109,1111],{"class":221,"line":380},[219,1105,1106],{"class":298},"    enabled",[219,1108,307],{"class":229},[219,1110,1052],{"class":1051},[219,1112,1055],{"class":229},[219,1114,1115,1118,1120,1122,1125,1127],{"class":221,"line":902},[219,1116,1117],{"class":298},"    endpoint",[219,1119,307],{"class":229},[219,1121,249],{"class":229},[219,1123,1124],{"class":252},"/api/_evlog/ingest",[219,1126,315],{"class":229},[219,1128,1055],{"class":229},[219,1130,1131],{"class":221,"line":907},[219,1132,1133],{"class":229},"  },\n",[219,1135,1136,1138],{"class":221,"line":913},[219,1137,383],{"class":229},[219,1139,320],{"class":233},[201,1141,1143],{"id":1142},"sending-logs-to-the-server","Sending Logs to the Server",[197,1145,1146],{},"By default, client logs only appear in the browser console. To persist them, you have two options:",[398,1148,1150],{"id":1149},"built-in-transport","Built-in Transport",[197,1152,1153,1154,307],{},"The simplest approach — enable the built-in transport in ",[216,1155,931],{},[208,1157,1159],{"className":210,"code":1158,"filename":212,"language":213,"meta":214,"style":214},"import { initLog } from 'evlog/client'\n\nexport default defineNuxtPlugin(() => {\n  initLog({\n    service: 'web',\n    transport: {\n      enabled: true,\n      endpoint: '/api/_evlog/ingest', // default\n    },\n  })\n})\n",[216,1160,1161,1179,1183,1199,1207,1222,1231,1242,1260,1265,1272],{"__ignoreMap":214},[219,1162,1163,1165,1167,1169,1171,1173,1175,1177],{"class":221,"line":222},[219,1164,226],{"class":225},[219,1166,230],{"class":229},[219,1168,234],{"class":233},[219,1170,243],{"class":229},[219,1172,246],{"class":225},[219,1174,249],{"class":229},[219,1176,253],{"class":252},[219,1178,256],{"class":229},[219,1180,1181],{"class":221,"line":259},[219,1182,263],{"emptyLinePlaceholder":262},[219,1184,1185,1187,1189,1191,1193,1195,1197],{"class":221,"line":266},[219,1186,269],{"class":225},[219,1188,272],{"class":225},[219,1190,276],{"class":275},[219,1192,279],{"class":233},[219,1194,282],{"class":229},[219,1196,286],{"class":285},[219,1198,289],{"class":229},[219,1200,1201,1203,1205],{"class":221,"line":292},[219,1202,295],{"class":275},[219,1204,279],{"class":298},[219,1206,1041],{"class":229},[219,1208,1209,1212,1214,1216,1218,1220],{"class":221,"line":323},[219,1210,1211],{"class":298},"    service",[219,1213,307],{"class":229},[219,1215,249],{"class":229},[219,1217,312],{"class":252},[219,1219,315],{"class":229},[219,1221,1055],{"class":229},[219,1223,1224,1227,1229],{"class":221,"line":328},[219,1225,1226],{"class":298},"    transport",[219,1228,307],{"class":229},[219,1230,289],{"class":229},[219,1232,1233,1236,1238,1240],{"class":221,"line":380},[219,1234,1235],{"class":298},"      enabled",[219,1237,307],{"class":229},[219,1239,1052],{"class":1051},[219,1241,1055],{"class":229},[219,1243,1244,1247,1249,1251,1253,1255,1257],{"class":221,"line":902},[219,1245,1246],{"class":298},"      endpoint",[219,1248,307],{"class":229},[219,1250,249],{"class":229},[219,1252,1124],{"class":252},[219,1254,315],{"class":229},[219,1256,237],{"class":229},[219,1258,1259],{"class":823}," // default\n",[219,1261,1262],{"class":221,"line":907},[219,1263,1264],{"class":229},"    },\n",[219,1266,1267,1270],{"class":221,"line":913},[219,1268,1269],{"class":229},"  }",[219,1271,320],{"class":298},[219,1273,1275,1277],{"class":221,"line":1274},11,[219,1276,383],{"class":229},[219,1278,320],{"class":233},[197,1280,1281,1282,1285,1286,1289],{},"Each log is sent individually via ",[216,1283,1284],{},"fetch"," with ",[216,1287,1288],{},"keepalive: true",". Good for low-volume apps.",[1291,1292,1293],"callout",{"color":337,"icon":13},"In Nuxt with the evlog module, the server ingest endpoint is auto-registered. For standalone frameworks, you need to create the endpoint yourself.",[398,1295,1297],{"id":1296},"browser-drain-pipeline","Browser Drain Pipeline",[197,1299,1300],{},"For higher volume or when you need batching, retries, and page-exit flushing, use the browser drain:",[208,1302,1304],{"className":210,"code":1303,"filename":212,"language":213,"meta":214,"style":214},"import { initLogger, log } from 'evlog'\nimport { createBrowserLogDrain } from 'evlog/browser'\n\nexport default defineNuxtPlugin(() => {\n  const drain = createBrowserLogDrain({\n    drain: { endpoint: '/api/_evlog/ingest' },\n    pipeline: {\n      batch: { size: 25, intervalMs: 2000 },\n      retry: { maxAttempts: 2 },\n    },\n  })\n\n  initLogger({ drain })\n\n  log.info({ action: 'app_init' })\n})\n",[216,1305,1306,1330,1350,1354,1370,1387,1409,1418,1447,1466,1470,1476,1481,1497,1502,1529],{"__ignoreMap":214},[219,1307,1308,1310,1312,1315,1317,1319,1321,1323,1325,1328],{"class":221,"line":222},[219,1309,226],{"class":225},[219,1311,230],{"class":229},[219,1313,1314],{"class":233}," initLogger",[219,1316,237],{"class":229},[219,1318,240],{"class":233},[219,1320,243],{"class":229},[219,1322,246],{"class":225},[219,1324,249],{"class":229},[219,1326,1327],{"class":252},"evlog",[219,1329,256],{"class":229},[219,1331,1332,1334,1336,1339,1341,1343,1345,1348],{"class":221,"line":259},[219,1333,226],{"class":225},[219,1335,230],{"class":229},[219,1337,1338],{"class":233}," createBrowserLogDrain",[219,1340,243],{"class":229},[219,1342,246],{"class":225},[219,1344,249],{"class":229},[219,1346,1347],{"class":252},"evlog/browser",[219,1349,256],{"class":229},[219,1351,1352],{"class":221,"line":266},[219,1353,263],{"emptyLinePlaceholder":262},[219,1355,1356,1358,1360,1362,1364,1366,1368],{"class":221,"line":292},[219,1357,269],{"class":225},[219,1359,272],{"class":225},[219,1361,276],{"class":275},[219,1363,279],{"class":233},[219,1365,282],{"class":229},[219,1367,286],{"class":285},[219,1369,289],{"class":229},[219,1371,1372,1375,1378,1381,1383,1385],{"class":221,"line":323},[219,1373,1374],{"class":285},"  const",[219,1376,1377],{"class":233}," drain",[219,1379,1380],{"class":229}," =",[219,1382,1338],{"class":275},[219,1384,279],{"class":298},[219,1386,1041],{"class":229},[219,1388,1389,1392,1394,1396,1398,1400,1402,1404,1406],{"class":221,"line":328},[219,1390,1391],{"class":298},"    drain",[219,1393,307],{"class":229},[219,1395,230],{"class":229},[219,1397,548],{"class":298},[219,1399,307],{"class":229},[219,1401,249],{"class":229},[219,1403,1124],{"class":252},[219,1405,315],{"class":229},[219,1407,1408],{"class":229}," },\n",[219,1410,1411,1414,1416],{"class":221,"line":380},[219,1412,1413],{"class":298},"    pipeline",[219,1415,307],{"class":229},[219,1417,289],{"class":229},[219,1419,1420,1423,1425,1427,1430,1432,1435,1437,1440,1442,1445],{"class":221,"line":902},[219,1421,1422],{"class":298},"      batch",[219,1424,307],{"class":229},[219,1426,230],{"class":229},[219,1428,1429],{"class":298}," size",[219,1431,307],{"class":229},[219,1433,1434],{"class":514}," 25",[219,1436,237],{"class":229},[219,1438,1439],{"class":298}," intervalMs",[219,1441,307],{"class":229},[219,1443,1444],{"class":514}," 2000",[219,1446,1408],{"class":229},[219,1448,1449,1452,1454,1456,1459,1461,1464],{"class":221,"line":907},[219,1450,1451],{"class":298},"      retry",[219,1453,307],{"class":229},[219,1455,230],{"class":229},[219,1457,1458],{"class":298}," maxAttempts",[219,1460,307],{"class":229},[219,1462,1463],{"class":514}," 2",[219,1465,1408],{"class":229},[219,1467,1468],{"class":221,"line":913},[219,1469,1264],{"class":229},[219,1471,1472,1474],{"class":221,"line":1274},[219,1473,1269],{"class":229},[219,1475,320],{"class":298},[219,1477,1479],{"class":221,"line":1478},12,[219,1480,263],{"emptyLinePlaceholder":262},[219,1482,1484,1487,1489,1491,1493,1495],{"class":221,"line":1483},13,[219,1485,1486],{"class":275},"  initLogger",[219,1488,279],{"class":298},[219,1490,301],{"class":229},[219,1492,1377],{"class":233},[219,1494,243],{"class":229},[219,1496,320],{"class":298},[219,1498,1500],{"class":221,"line":1499},14,[219,1501,263],{"emptyLinePlaceholder":262},[219,1503,1505,1507,1509,1511,1513,1515,1517,1519,1521,1523,1525,1527],{"class":221,"line":1504},15,[219,1506,331],{"class":233},[219,1508,334],{"class":229},[219,1510,337],{"class":275},[219,1512,279],{"class":298},[219,1514,301],{"class":229},[219,1516,344],{"class":298},[219,1518,307],{"class":229},[219,1520,249],{"class":229},[219,1522,351],{"class":252},[219,1524,315],{"class":229},[219,1526,243],{"class":229},[219,1528,320],{"class":298},[219,1530,1532,1534],{"class":221,"line":1531},16,[219,1533,383],{"class":229},[219,1535,320],{"class":233},[197,1537,1538],{},"The browser drain automatically:",[1540,1541,1542,1550,1556],"ul",{},[1543,1544,1545,1549],"li",{},[1546,1547,1548],"strong",{},"Batches"," events by size and time interval",[1543,1551,1552,1555],{},[1546,1553,1554],{},"Retries"," failed sends with exponential backoff",[1543,1557,1558,1561,1562,1565],{},[1546,1559,1560],{},"Flushes"," buffered events via ",[216,1563,1564],{},"sendBeacon"," when the page becomes hidden (tab switch, navigation, close)",[1291,1567,1570,1571,1575],{"color":1568,"icon":1569},"neutral","i-lucide-arrow-right","See the ",[1572,1573,1574],"a",{"href":112},"Browser Drain"," adapter docs for full configuration reference, authentication, and server endpoint examples.",[201,1577,1579],{"id":1578},"next-steps","Next Steps",[1540,1581,1582,1587,1592],{},[1543,1583,1584,1586],{},[1572,1585,1574],{"href":112}," — Batching, retry, and sendBeacon fallback",[1543,1588,1589,1591],{},[1572,1590,106],{"href":107}," — Advanced pipeline configuration",[1543,1593,1594,1596],{},[1572,1595,41],{"href":42}," — Surface client errors with actionable context",[1598,1599,1600],"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 .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}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":214,"searchDepth":259,"depth":259,"links":1602},[1603,1604,1609,1610,1611,1615],{"id":203,"depth":259,"text":20},{"id":395,"depth":259,"text":396,"children":1605},[1606,1607,1608],{"id":400,"depth":266,"text":36},{"id":574,"depth":266,"text":575},{"id":699,"depth":266,"text":700},{"id":774,"depth":259,"text":775},{"id":925,"depth":259,"text":926},{"id":1142,"depth":259,"text":1143,"children":1612},[1613,1614],{"id":1149,"depth":266,"text":1150},{"id":1296,"depth":266,"text":1297},{"id":1578,"depth":259,"text":1579},"Capture browser events with structured logging. Same API as the server, with automatic console styling, user identity context, and optional server transport.","md",[1619,1621],{"label":1574,"icon":114,"to":112,"color":1568,"variant":1620},"subtle",{"label":36,"icon":39,"to":37,"color":1568,"variant":1620},{},{"icon":64},{"title":61,"description":1616},"mfIwzPetihlkWaAhA7GxrlSOur1FiB5wu-R_CVeZ5BY",[1627,1629],{"title":56,"path":57,"stem":58,"description":1628,"icon":59,"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":71,"path":72,"stem":73,"description":1630,"icon":74,"children":-1},"Send your logs to external services with evlog adapters. Built-in support for popular observability platforms and custom destinations.",1772901884345]