[{"data":1,"prerenderedAt":2627},["ShallowReactive",2],{"navigation_docs":3,"-logging-client-logging":421,"-logging-client-logging-surround":2622},[4,35,159,201,289,318,405],{"title":5,"path":6,"stem":7,"children":8,"page":34},"Getting Started","\u002Fgetting-started","1.getting-started",[9,14,19,24,29],{"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",{"title":30,"path":31,"stem":32,"icon":33},"vs Other Loggers","\u002Fgetting-started\u002Fvs-other-loggers","1.getting-started\u002F5.vs-other-loggers","i-lucide-scale",false,{"title":36,"path":37,"stem":38,"children":39,"page":34},"Logging","\u002Flogging","2.logging",[40,45,50,55,60,65,70,99,127],{"title":41,"path":42,"stem":43,"icon":44},"Overview","\u002Flogging\u002Foverview","2.logging\u002F0.overview","i-lucide-list",{"title":46,"path":47,"stem":48,"icon":49},"Simple Logging","\u002Flogging\u002Fsimple-logging","2.logging\u002F1.simple-logging","i-lucide-terminal",{"title":51,"path":52,"stem":53,"icon":54},"Wide Events","\u002Flogging\u002Fwide-events","2.logging\u002F2.wide-events","i-lucide-layers",{"title":56,"path":57,"stem":58,"icon":59},"Structured Errors","\u002Flogging\u002Fstructured-errors","2.logging\u002F3.structured-errors","i-lucide-shield-alert",{"title":61,"path":62,"stem":63,"icon":64},"Catalogs","\u002Flogging\u002Fcatalogs","2.logging\u002F4.catalogs","i-lucide-book-open",{"title":66,"path":67,"stem":68,"icon":69},"Client Logging","\u002Flogging\u002Fclient-logging","2.logging\u002F5.client-logging","i-lucide-monitor",{"title":71,"icon":72,"path":73,"stem":74,"children":75,"page":34},"AI SDK","i-simple-icons-vercel","\u002Flogging\u002Fai-sdk","2.logging\u002F6.ai-sdk",[76,79,84,89,94],{"title":41,"path":77,"stem":78,"icon":44},"\u002Flogging\u002Fai-sdk\u002Foverview","2.logging\u002F6.ai-sdk\u002F01.overview",{"title":80,"path":81,"stem":82,"icon":83},"Usage","\u002Flogging\u002Fai-sdk\u002Fusage","2.logging\u002F6.ai-sdk\u002F02.usage","i-lucide-code",{"title":85,"path":86,"stem":87,"icon":88},"Options","\u002Flogging\u002Fai-sdk\u002Foptions","2.logging\u002F6.ai-sdk\u002F03.options","i-lucide-sliders",{"title":90,"path":91,"stem":92,"icon":93},"Metadata","\u002Flogging\u002Fai-sdk\u002Fmetadata","2.logging\u002F6.ai-sdk\u002F04.metadata","i-lucide-database",{"title":95,"path":96,"stem":97,"icon":98},"Telemetry","\u002Flogging\u002Fai-sdk\u002Ftelemetry","2.logging\u002F6.ai-sdk\u002F05.telemetry","i-lucide-activity",{"title":100,"icon":101,"path":102,"stem":103,"children":104,"page":34},"Better Auth","i-simple-icons-betterauth","\u002Flogging\u002Fbetter-auth","2.logging\u002F7.better-auth",[105,108,113,118,122],{"title":41,"path":106,"stem":107,"icon":44},"\u002Flogging\u002Fbetter-auth\u002Foverview","2.logging\u002F7.better-auth\u002F01.overview",{"title":109,"path":110,"stem":111,"icon":112},"Identify User","\u002Flogging\u002Fbetter-auth\u002Fidentify-user","2.logging\u002F7.better-auth\u002F02.identify-user","i-lucide-user-check",{"title":114,"path":115,"stem":116,"icon":117},"Middleware","\u002Flogging\u002Fbetter-auth\u002Fmiddleware","2.logging\u002F7.better-auth\u002F03.middleware","i-lucide-shield",{"title":119,"path":120,"stem":121,"icon":69},"Client Sync","\u002Flogging\u002Fbetter-auth\u002Fclient-sync","2.logging\u002F7.better-auth\u002F04.client-sync",{"title":123,"path":124,"stem":125,"icon":126},"Performance","\u002Flogging\u002Fbetter-auth\u002Fperformance","2.logging\u002F7.better-auth\u002F05.performance","i-lucide-gauge",{"title":128,"icon":129,"path":130,"stem":131,"children":132,"page":34},"Audit Logs","i-lucide-shield-check","\u002Flogging\u002Faudit","2.logging\u002F8.audit",[133,136,141,146,151,155],{"title":41,"path":134,"stem":135,"icon":44},"\u002Flogging\u002Faudit\u002Foverview","2.logging\u002F8.audit\u002F01.overview",{"title":137,"path":138,"stem":139,"icon":140},"Schema","\u002Flogging\u002Faudit\u002Fschema","2.logging\u002F8.audit\u002F02.schema","i-lucide-file-text",{"title":142,"path":143,"stem":144,"icon":145},"Recording","\u002Flogging\u002Faudit\u002Frecording","2.logging\u002F8.audit\u002F03.recording","i-lucide-pen-line",{"title":147,"path":148,"stem":149,"icon":150},"Drains","\u002Flogging\u002Faudit\u002Fpipeline","2.logging\u002F8.audit\u002F04.pipeline","i-lucide-link",{"title":152,"path":153,"stem":154,"icon":129},"Compliance","\u002Flogging\u002Faudit\u002Fcompliance","2.logging\u002F8.audit\u002F05.compliance",{"title":156,"path":157,"stem":158,"icon":64},"Recipes","\u002Flogging\u002Faudit\u002Frecipes","2.logging\u002F8.audit\u002F06.recipes",{"title":160,"path":161,"stem":162,"children":163,"page":34},"Core Concepts","\u002Fcore-concepts","3.core-concepts",[164,169,174,179,184,188,191,196],{"title":165,"path":166,"stem":167,"icon":168},"Lifecycle","\u002Fcore-concepts\u002Flifecycle","3.core-concepts\u002F0.lifecycle","i-lucide-arrow-right-left",{"title":170,"path":171,"stem":172,"icon":173},"Configuration","\u002Fcore-concepts\u002Fconfiguration","3.core-concepts\u002F1.configuration","i-lucide-settings",{"title":175,"path":176,"stem":177,"icon":178},"Sampling","\u002Fcore-concepts\u002Fsampling","3.core-concepts\u002F2.sampling","i-lucide-filter",{"title":180,"path":181,"stem":182,"icon":183},"Typed Fields","\u002Fcore-concepts\u002Ftyped-fields","3.core-concepts\u002F3.typed-fields","i-simple-icons-typescript",{"title":185,"path":186,"stem":187,"icon":129},"Best Practices","\u002Fcore-concepts\u002Fbest-practices","3.core-concepts\u002F4.best-practices",{"title":123,"path":189,"stem":190,"icon":126},"\u002Fcore-concepts\u002Fperformance","3.core-concepts\u002F5.performance",{"title":192,"path":193,"stem":194,"icon":195},"Vite Plugin","\u002Fcore-concepts\u002Fvite-plugin","3.core-concepts\u002F6.vite-plugin","i-custom-vite",{"title":197,"path":198,"stem":199,"icon":200},"Auto-Redaction","\u002Fcore-concepts\u002Fredaction","3.core-concepts\u002F7.redaction","i-lucide-eye-off",{"title":202,"path":203,"stem":204,"children":205,"page":34},"Frameworks","\u002Fframeworks","4.frameworks",[206,210,215,220,225,230,235,240,245,250,255,260,265,270,274,279,284],{"title":41,"path":207,"stem":208,"icon":209},"\u002Fframeworks\u002Foverview","4.frameworks\u002F00.overview","i-lucide-layout-grid",{"title":211,"path":212,"stem":213,"icon":214},"Nuxt","\u002Fframeworks\u002Fnuxt","4.frameworks\u002F01.nuxt","i-simple-icons-nuxtdotjs",{"title":216,"path":217,"stem":218,"icon":219},"Next.js","\u002Fframeworks\u002Fnextjs","4.frameworks\u002F02.nextjs","i-simple-icons-nextdotjs",{"title":221,"path":222,"stem":223,"icon":224},"SvelteKit","\u002Fframeworks\u002Fsveltekit","4.frameworks\u002F03.sveltekit","i-simple-icons-svelte",{"title":226,"path":227,"stem":228,"icon":229},"Nitro","\u002Fframeworks\u002Fnitro","4.frameworks\u002F04.nitro","i-custom-nitro",{"title":231,"path":232,"stem":233,"icon":234},"TanStack Start","\u002Fframeworks\u002Ftanstack-start","4.frameworks\u002F05.tanstack-start","i-custom-tanstack",{"title":236,"path":237,"stem":238,"icon":239},"NestJS","\u002Fframeworks\u002Fnestjs","4.frameworks\u002F06.nestjs","i-simple-icons-nestjs",{"title":241,"path":242,"stem":243,"icon":244},"Express","\u002Fframeworks\u002Fexpress","4.frameworks\u002F07.express","i-simple-icons-express",{"title":246,"path":247,"stem":248,"icon":249},"Hono","\u002Fframeworks\u002Fhono","4.frameworks\u002F08.hono","i-simple-icons-hono",{"title":251,"path":252,"stem":253,"icon":254},"Fastify","\u002Fframeworks\u002Ffastify","4.frameworks\u002F09.fastify","i-simple-icons-fastify",{"title":256,"path":257,"stem":258,"icon":259},"Elysia","\u002Fframeworks\u002Felysia","4.frameworks\u002F10.elysia","i-custom-elysia",{"title":261,"path":262,"stem":263,"icon":264},"React Router","\u002Fframeworks\u002Freact-router","4.frameworks\u002F11.react-router","i-custom-reactrouter",{"title":266,"path":267,"stem":268,"icon":269},"Cloudflare Workers","\u002Fframeworks\u002Fcloudflare-workers","4.frameworks\u002F12.cloudflare-workers","i-simple-icons-cloudflare",{"title":271,"path":272,"stem":273,"icon":183},"Standalone","\u002Fframeworks\u002Fstandalone","4.frameworks\u002F13.standalone",{"title":275,"path":276,"stem":277,"icon":278},"Astro","\u002Fframeworks\u002Fastro","4.frameworks\u002F14.astro","i-simple-icons-astro",{"title":280,"path":281,"stem":282,"icon":283},"AWS Lambda","\u002Fframeworks\u002Faws-lambda","4.frameworks\u002F16.aws-lambda","i-custom-lambda",{"title":285,"path":286,"stem":287,"icon":288},"Custom Integration","\u002Fframeworks\u002Fcustom-integration","4.frameworks\u002F17.custom-integration","i-lucide-puzzle",{"title":290,"path":291,"stem":292,"children":293,"page":34},"Build on top","\u002Fbuild-on-top","5.build-on-top",[294,299,304,309,314],{"title":295,"path":296,"stem":297,"icon":298},"Identity headers","\u002Fbuild-on-top\u002Fidentity-headers","5.build-on-top\u002F1.identity-headers","i-lucide-fingerprint",{"title":300,"path":301,"stem":302,"icon":303},"Stream API","\u002Fbuild-on-top\u002Fstream-api","5.build-on-top\u002F2.stream-api","i-lucide-radio-tower",{"title":305,"path":306,"stem":307,"icon":308},"SSE bridge","\u002Fbuild-on-top\u002Fsse-bridge","5.build-on-top\u002F3.sse-bridge","i-lucide-wifi",{"title":310,"path":311,"stem":312,"icon":313},"FS reader","\u002Fbuild-on-top\u002Ffs-reader","5.build-on-top\u002F4.fs-reader","i-lucide-folder-search",{"title":156,"path":315,"stem":316,"icon":317},"\u002Fbuild-on-top\u002Frecipes","5.build-on-top\u002F4.recipes","i-lucide-chef-hat",{"title":319,"path":320,"stem":321,"children":322,"page":34},"Adapters","\u002Fadapters","6.adapters",[323,326,366,381],{"title":41,"path":324,"stem":325,"icon":44},"\u002Fadapters\u002Foverview","6.adapters\u002F01.overview",{"title":327,"path":328,"stem":329,"children":330,"page":34},"Cloud destinations","\u002Fadapters\u002Fcloud","6.adapters\u002F02.cloud",[331,336,341,346,351,356,361],{"title":332,"path":333,"stem":334,"icon":335},"Axiom","\u002Fadapters\u002Fcloud\u002Faxiom","6.adapters\u002F02.cloud\u002F01.axiom","i-custom-axiom",{"title":337,"path":338,"stem":339,"icon":340},"OTLP","\u002Fadapters\u002Fcloud\u002Fotlp","6.adapters\u002F02.cloud\u002F02.otlp","i-simple-icons-opentelemetry",{"title":342,"path":343,"stem":344,"icon":345},"PostHog","\u002Fadapters\u002Fcloud\u002Fposthog","6.adapters\u002F02.cloud\u002F03.posthog","i-simple-icons-posthog",{"title":347,"path":348,"stem":349,"icon":350},"Sentry","\u002Fadapters\u002Fcloud\u002Fsentry","6.adapters\u002F02.cloud\u002F04.sentry","i-simple-icons-sentry",{"title":352,"path":353,"stem":354,"icon":355},"Better Stack","\u002Fadapters\u002Fcloud\u002Fbetter-stack","6.adapters\u002F02.cloud\u002F05.better-stack","i-simple-icons-betterstack",{"title":357,"path":358,"stem":359,"icon":360},"Datadog","\u002Fadapters\u002Fcloud\u002Fdatadog","6.adapters\u002F02.cloud\u002F06.datadog","i-simple-icons-datadog",{"title":362,"path":363,"stem":364,"icon":365},"HyperDX","\u002Fadapters\u002Fcloud\u002Fhyperdx","6.adapters\u002F02.cloud\u002F07.hyperdx","i-custom-hyperdx",{"title":367,"path":368,"stem":369,"children":370,"page":34},"Self-hosted","\u002Fadapters\u002Fself-hosted","6.adapters\u002F03.self-hosted",[371,376],{"title":372,"path":373,"stem":374,"icon":375},"File System","\u002Fadapters\u002Fself-hosted\u002Ffs","6.adapters\u002F03.self-hosted\u002F01.fs","i-lucide-hard-drive",{"title":377,"path":378,"stem":379,"icon":380},"NuxtHub","\u002Fadapters\u002Fself-hosted\u002Fnuxthub","6.adapters\u002F03.self-hosted\u002F02.nuxthub","i-simple-icons-nuxt",{"title":382,"path":383,"stem":384,"children":385,"page":34},"Building blocks","\u002Fadapters\u002Fbuilding-blocks","6.adapters\u002F04.building-blocks",[386,391,396,400],{"title":387,"path":388,"stem":389,"icon":390},"Pipeline","\u002Fadapters\u002Fbuilding-blocks\u002Fpipeline","6.adapters\u002F04.building-blocks\u002F01.pipeline","i-lucide-workflow",{"title":392,"path":393,"stem":394,"icon":395},"HTTP","\u002Fadapters\u002Fbuilding-blocks\u002Fhttp","6.adapters\u002F04.building-blocks\u002F02.http","i-lucide-globe",{"title":397,"path":398,"stem":399,"icon":83},"Custom Adapters","\u002Fadapters\u002Fbuilding-blocks\u002Fcustom","6.adapters\u002F04.building-blocks\u002F03.custom",{"title":401,"path":402,"stem":403,"icon":404},"Toolkit","\u002Fadapters\u002Fbuilding-blocks\u002Ftoolkit","6.adapters\u002F04.building-blocks\u002F04.toolkit","i-lucide-blocks",{"title":406,"path":407,"stem":408,"children":409,"page":34},"Enrichers","\u002Fenrichers","7.enrichers",[410,413,417],{"title":41,"path":411,"stem":412,"icon":28},"\u002Fenrichers\u002Foverview","7.enrichers\u002F1.overview",{"title":414,"path":415,"stem":416,"icon":288},"Built-in","\u002Fenrichers\u002Fbuilt-in","7.enrichers\u002F2.built-in",{"title":418,"path":419,"stem":420,"icon":83},"Custom","\u002Fenrichers\u002Fcustom","7.enrichers\u002F3.custom",{"id":422,"title":66,"body":423,"description":2612,"extension":2613,"links":2614,"meta":2618,"navigation":2619,"path":67,"seo":2620,"stem":68,"__hash__":2621},"docs\u002F2.logging\u002F5.client-logging.md",{"type":424,"value":425,"toc":2595},"minimark",[426,430,433,477,481,484,983,989,997,1021,1040,1050,1054,1059,1064,1070,1131,1189,1193,1196,1230,1246,1250,1267,1288,1292,1298,1433,1436,1439,1445,1560,1643,1656,1660,1663,1667,1681,2093,2101,2105,2112,2535,2538,2562,2570,2574,2591],[427,428,429],"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.",[431,432],"client-server-beacon",{},[434,435,438,441,463],"prompt",{":actions":436,"description":437,"icon":69},"[\"copy\",\"cursor\",\"windsurf\"]","Ship browser logs to my server",[427,439,440],{},"Ship browser logs to my server with evlog client logging.",[442,443,444,448,451,454,457,460],"ul",{},[445,446,447],"li",{},"Detect my framework (Nuxt, Next.js, SvelteKit, etc.) and pick the matching client entrypoint",[445,449,450],{},"Call initLog({ service: 'web' }) once at app start",[445,452,453],{},"Use log.info \u002F log.warn \u002F log.error in components, composables, and event handlers",[445,455,456],{},"Set user identity with setIdentity({ userId, email }) after login, clearIdentity() on logout",[445,458,459],{},"Enable transport in the framework config so logs POST to \u002Fapi\u002F_evlog\u002Fingest in batches",[445,461,462],{},"On the server, evlog auto-runs the drain pipeline on transported events with source: 'client'",[427,464,465,466,472,473],{},"Docs: ",[467,468,469],"a",{"href":469,"rel":470},"https:\u002F\u002Fwww.evlog.dev\u002Flogging\u002Fclient-logging",[471],"nofollow","\nHTTP transport: ",[467,474,475],{"href":475,"rel":476},"https:\u002F\u002Fwww.evlog.dev\u002Fadapters\u002Fbuilding-blocks\u002Fhttp",[471],[478,479,20],"h2",{"id":480},"quick-start",[427,482,483],{},"evlog provides a client-side logging API that works in any browser environment:",[485,486,487,666,884],"code-group",{},[488,489,495],"pre",{"className":490,"code":491,"filename":492,"language":493,"meta":494,"style":494},"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","",[496,497,498,537,544,570,601,606,658],"code",{"__ignoreMap":494},[499,500,503,507,511,515,518,521,524,527,530,534],"span",{"class":501,"line":502},"line",1,[499,504,506],{"class":505},"s7zQu","import",[499,508,510],{"class":509},"sMK4o"," {",[499,512,514],{"class":513},"sTEyZ"," initLog",[499,516,517],{"class":509},",",[499,519,520],{"class":513}," log",[499,522,523],{"class":509}," }",[499,525,526],{"class":505}," from",[499,528,529],{"class":509}," '",[499,531,533],{"class":532},"sfazB","evlog\u002Fclient",[499,535,536],{"class":509},"'\n",[499,538,540],{"class":501,"line":539},2,[499,541,543],{"emptyLinePlaceholder":542},true,"\n",[499,545,547,550,553,557,560,563,567],{"class":501,"line":546},3,[499,548,549],{"class":505},"export",[499,551,552],{"class":505}," default",[499,554,556],{"class":555},"s2Zo4"," defineNuxtPlugin",[499,558,559],{"class":513},"(",[499,561,562],{"class":509},"()",[499,564,566],{"class":565},"spNyl"," =>",[499,568,569],{"class":509}," {\n",[499,571,573,576,579,582,585,588,590,593,596,598],{"class":501,"line":572},4,[499,574,575],{"class":555},"  initLog",[499,577,559],{"class":578},"swJcz",[499,580,581],{"class":509},"{",[499,583,584],{"class":578}," service",[499,586,587],{"class":509},":",[499,589,529],{"class":509},[499,591,592],{"class":532},"web",[499,594,595],{"class":509},"'",[499,597,523],{"class":509},[499,599,600],{"class":578},")\n",[499,602,604],{"class":501,"line":603},5,[499,605,543],{"emptyLinePlaceholder":542},[499,607,609,612,615,618,620,622,625,627,629,632,634,636,639,641,644,646,649,651,654,656],{"class":501,"line":608},6,[499,610,611],{"class":513},"  log",[499,613,614],{"class":509},".",[499,616,617],{"class":555},"info",[499,619,559],{"class":578},[499,621,581],{"class":509},[499,623,624],{"class":578}," action",[499,626,587],{"class":509},[499,628,529],{"class":509},[499,630,631],{"class":532},"app_init",[499,633,595],{"class":509},[499,635,517],{"class":509},[499,637,638],{"class":578}," path",[499,640,587],{"class":509},[499,642,643],{"class":513}," window",[499,645,614],{"class":509},[499,647,648],{"class":513},"location",[499,650,614],{"class":509},[499,652,653],{"class":513},"pathname",[499,655,523],{"class":509},[499,657,600],{"class":578},[499,659,661,664],{"class":501,"line":660},7,[499,662,663],{"class":509},"}",[499,665,600],{"class":513},[488,667,670],{"className":490,"code":668,"filename":669,"language":493,"meta":494,"style":494},"'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)",[496,671,672,681,701,723,727,767,780,803,847,856,861,878],{"__ignoreMap":494},[499,673,674,676,679],{"class":501,"line":502},[499,675,595],{"class":509},[499,677,678],{"class":532},"use client",[499,680,536],{"class":509},[499,682,683,685,687,690,692,694,696,699],{"class":501,"line":539},[499,684,506],{"class":505},[499,686,510],{"class":509},[499,688,689],{"class":513}," useEffect",[499,691,523],{"class":509},[499,693,526],{"class":505},[499,695,529],{"class":509},[499,697,698],{"class":532},"react",[499,700,536],{"class":509},[499,702,703,705,707,709,711,713,715,717,719,721],{"class":501,"line":546},[499,704,506],{"class":505},[499,706,510],{"class":509},[499,708,514],{"class":513},[499,710,517],{"class":509},[499,712,520],{"class":513},[499,714,523],{"class":509},[499,716,526],{"class":505},[499,718,529],{"class":509},[499,720,533],{"class":532},[499,722,536],{"class":509},[499,724,725],{"class":501,"line":572},[499,726,543],{"emptyLinePlaceholder":542},[499,728,729,731,734,737,740,744,747,749,751,753,757,759,762,765],{"class":501,"line":603},[499,730,549],{"class":505},[499,732,733],{"class":565}," function",[499,735,736],{"class":555}," LogProvider",[499,738,739],{"class":509},"({",[499,741,743],{"class":742},"sHdIc"," children",[499,745,746],{"class":509}," }:",[499,748,510],{"class":509},[499,750,743],{"class":578},[499,752,587],{"class":509},[499,754,756],{"class":755},"sBMFI"," React",[499,758,614],{"class":509},[499,760,761],{"class":755},"ReactNode",[499,763,764],{"class":509}," })",[499,766,569],{"class":509},[499,768,769,772,774,776,778],{"class":501,"line":608},[499,770,771],{"class":555},"  useEffect",[499,773,559],{"class":578},[499,775,562],{"class":509},[499,777,566],{"class":565},[499,779,569],{"class":509},[499,781,782,785,787,789,791,793,795,797,799,801],{"class":501,"line":660},[499,783,784],{"class":555},"    initLog",[499,786,559],{"class":578},[499,788,581],{"class":509},[499,790,584],{"class":578},[499,792,587],{"class":509},[499,794,529],{"class":509},[499,796,592],{"class":532},[499,798,595],{"class":509},[499,800,523],{"class":509},[499,802,600],{"class":578},[499,804,806,809,811,813,815,817,819,821,823,825,827,829,831,833,835,837,839,841,843,845],{"class":501,"line":805},8,[499,807,808],{"class":513},"    log",[499,810,614],{"class":509},[499,812,617],{"class":555},[499,814,559],{"class":578},[499,816,581],{"class":509},[499,818,624],{"class":578},[499,820,587],{"class":509},[499,822,529],{"class":509},[499,824,631],{"class":532},[499,826,595],{"class":509},[499,828,517],{"class":509},[499,830,638],{"class":578},[499,832,587],{"class":509},[499,834,643],{"class":513},[499,836,614],{"class":509},[499,838,648],{"class":513},[499,840,614],{"class":509},[499,842,653],{"class":513},[499,844,523],{"class":509},[499,846,600],{"class":578},[499,848,850,853],{"class":501,"line":849},9,[499,851,852],{"class":509},"  },",[499,854,855],{"class":578}," [])\n",[499,857,859],{"class":501,"line":858},10,[499,860,543],{"emptyLinePlaceholder":542},[499,862,864,867,870,872,875],{"class":501,"line":863},11,[499,865,866],{"class":505},"  return",[499,868,869],{"class":578}," \u003C>",[499,871,581],{"class":509},[499,873,874],{"class":513},"children",[499,876,877],{"class":509},"}\u003C\u002F>\n",[499,879,881],{"class":501,"line":880},12,[499,882,883],{"class":509},"}\n",[488,885,888],{"className":490,"code":886,"filename":887,"language":493,"meta":494,"style":494},"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)",[496,889,890,912,916,939],{"__ignoreMap":494},[499,891,892,894,896,898,900,902,904,906,908,910],{"class":501,"line":502},[499,893,506],{"class":505},[499,895,510],{"class":509},[499,897,514],{"class":513},[499,899,517],{"class":509},[499,901,520],{"class":513},[499,903,523],{"class":509},[499,905,526],{"class":505},[499,907,529],{"class":509},[499,909,533],{"class":532},[499,911,536],{"class":509},[499,913,914],{"class":501,"line":539},[499,915,543],{"emptyLinePlaceholder":542},[499,917,918,921,923,925,927,929,931,933,935,937],{"class":501,"line":546},[499,919,920],{"class":555},"initLog",[499,922,559],{"class":513},[499,924,581],{"class":509},[499,926,584],{"class":578},[499,928,587],{"class":509},[499,930,529],{"class":509},[499,932,592],{"class":532},[499,934,595],{"class":509},[499,936,523],{"class":509},[499,938,600],{"class":513},[499,940,941,944,946,948,950,952,954,956,958,960,962,964,966,968,970,972,974,976,979,981],{"class":501,"line":572},[499,942,943],{"class":513},"log",[499,945,614],{"class":509},[499,947,617],{"class":555},[499,949,559],{"class":513},[499,951,581],{"class":509},[499,953,624],{"class":578},[499,955,587],{"class":509},[499,957,529],{"class":509},[499,959,631],{"class":532},[499,961,595],{"class":509},[499,963,517],{"class":509},[499,965,638],{"class":578},[499,967,587],{"class":509},[499,969,643],{"class":513},[499,971,614],{"class":509},[499,973,648],{"class":513},[499,975,614],{"class":509},[499,977,978],{"class":513},"pathname ",[499,980,663],{"class":509},[499,982,600],{"class":513},[427,984,985,986,988],{},"The ",[496,987,943],{}," object works anywhere in your client code: components, composables, event handlers.",[478,990,992,993,996],{"id":991},"minimum-level-minlevel","Minimum level (",[496,994,995],{},"minLevel",")",[427,998,999,1000,1003,1004,1007,1008,1007,1010,1007,1013,1016,1017,1020],{},"Use ",[496,1001,1002],{},"initLog({ minLevel: 'warn' })"," to keep the browser console quiet (warnings and errors only). Severity order: ",[496,1005,1006],{},"debug"," \u003C ",[496,1009,617],{},[496,1011,1012],{},"warn",[496,1014,1015],{},"error",". Default is ",[496,1018,1019],{},"'debug'"," (all levels).",[427,1022,1023,1024,1028,1029,1032,1033,1036,1037,1039],{},"For a ",[1025,1026,1027],"strong",{},"debug toggle"," without reloading, call ",[496,1030,1031],{},"setMinLevel('debug')"," or ",[496,1034,1035],{},"setMinLevel('warn')"," from ",[496,1038,533],{}," when the user opts in or out of verbose logs.",[427,1041,1042,1044,1045,1049],{},[496,1043,995],{}," applies to both console output and ",[467,1046,1048],{"href":1047},"#sending-logs-to-the-server","server transport"," payloads.",[478,1051,1053],{"id":1052},"two-call-signatures","Two Call Signatures",[427,1055,985,1056,1058],{},[496,1057,943],{}," API accepts two forms depending on the context.",[1060,1061,1063],"h3",{"id":1062},"object-form-structured-context","Object Form (structured context)",[427,1065,1066,1067,587],{},"Pass an object to capture structured data, just like server-side ",[496,1068,1069],{},"log.set()",[488,1071,1074],{"className":490,"code":1072,"filename":1073,"language":493,"meta":494,"style":494},"log.info({ action: 'page_view', path: '\u002Fproducts', referrer: document.referrer })\n","pages\u002Fproducts.vue",[496,1075,1076],{"__ignoreMap":494},[499,1077,1078,1080,1082,1084,1086,1088,1090,1092,1094,1097,1099,1101,1103,1105,1107,1110,1112,1114,1117,1119,1122,1124,1127,1129],{"class":501,"line":502},[499,1079,943],{"class":513},[499,1081,614],{"class":509},[499,1083,617],{"class":555},[499,1085,559],{"class":513},[499,1087,581],{"class":509},[499,1089,624],{"class":578},[499,1091,587],{"class":509},[499,1093,529],{"class":509},[499,1095,1096],{"class":532},"page_view",[499,1098,595],{"class":509},[499,1100,517],{"class":509},[499,1102,638],{"class":578},[499,1104,587],{"class":509},[499,1106,529],{"class":509},[499,1108,1109],{"class":532},"\u002Fproducts",[499,1111,595],{"class":509},[499,1113,517],{"class":509},[499,1115,1116],{"class":578}," referrer",[499,1118,587],{"class":509},[499,1120,1121],{"class":513}," document",[499,1123,614],{"class":509},[499,1125,1126],{"class":513},"referrer ",[499,1128,663],{"class":509},[499,1130,600],{"class":513},[488,1132,1137],{"className":1133,"code":1134,"filename":1135,"language":1136,"meta":494,"style":494},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","[web] info  { action: 'page_view', path: '\u002Fproducts', referrer: 'https:\u002F\u002Fgoogle.com' }\n","Browser console","bash",[496,1138,1139],{"__ignoreMap":494},[499,1140,1141,1144,1146,1149,1152,1154,1157,1159,1161,1163,1165,1168,1170,1172,1174,1176,1179,1181,1184,1186],{"class":501,"line":502},[499,1142,1143],{"class":509},"[",[499,1145,592],{"class":513},[499,1147,1148],{"class":509},"]",[499,1150,1151],{"class":513}," info  ",[499,1153,581],{"class":509},[499,1155,1156],{"class":755}," action:",[499,1158,529],{"class":509},[499,1160,1096],{"class":532},[499,1162,595],{"class":509},[499,1164,517],{"class":532},[499,1166,1167],{"class":532}," path:",[499,1169,529],{"class":509},[499,1171,1109],{"class":532},[499,1173,595],{"class":509},[499,1175,517],{"class":532},[499,1177,1178],{"class":532}," referrer:",[499,1180,529],{"class":509},[499,1182,1183],{"class":532},"https:\u002F\u002Fgoogle.com",[499,1185,595],{"class":509},[499,1187,1188],{"class":532}," }\n",[1060,1190,1192],{"id":1191},"tag-message-form-quick-logs","Tag + Message Form (quick logs)",[427,1194,1195],{},"Pass a tag and a message for quick, readable logs:",[488,1197,1200],{"className":490,"code":1198,"filename":1199,"language":493,"meta":494,"style":494},"log.info('auth', 'User logged in')\n","composables\u002FuseAuth.ts",[496,1201,1202],{"__ignoreMap":494},[499,1203,1204,1206,1208,1210,1212,1214,1217,1219,1221,1223,1226,1228],{"class":501,"line":502},[499,1205,943],{"class":513},[499,1207,614],{"class":509},[499,1209,617],{"class":555},[499,1211,559],{"class":513},[499,1213,595],{"class":509},[499,1215,1216],{"class":532},"auth",[499,1218,595],{"class":509},[499,1220,517],{"class":509},[499,1222,529],{"class":509},[499,1224,1225],{"class":532},"User logged in",[499,1227,595],{"class":509},[499,1229,600],{"class":513},[488,1231,1233],{"className":1133,"code":1232,"filename":1135,"language":1136,"meta":494,"style":494},"[auth] User logged in\n",[496,1234,1235],{"__ignoreMap":494},[499,1236,1237,1239,1241,1243],{"class":501,"line":502},[499,1238,1143],{"class":509},[499,1240,1216],{"class":513},[499,1242,1148],{"class":509},[499,1244,1245],{"class":513}," User logged in\n",[1060,1247,1249],{"id":1248},"available-levels","Available Levels",[427,1251,1252,1253,1256,1257,1256,1260,1263,1264,614],{},"Both forms support four levels: ",[496,1254,1255],{},"log.info()",", ",[496,1258,1259],{},"log.warn()",[496,1261,1262],{},"log.error()",", and ",[496,1265,1266],{},"log.debug()",[427,1268,1269,1270,1272,1273,1276,1277,1280,1281,1284,1285,614],{},"In the browser, ",[496,1271,1266],{}," is emitted with ",[496,1274,1275],{},"console.log"," (not ",[496,1278,1279],{},"console.debug",") so lines stay visible with the default DevTools ",[1025,1282,1283],{},"Info"," filter; the structured event still has ",[496,1286,1287],{},"level: 'debug'",[478,1289,1291],{"id":1290},"identity-context","Identity Context",[427,1293,1294,1295,587],{},"Track which user generated a log with ",[496,1296,1297],{},"setIdentity()",[488,1299,1301],{"className":490,"code":1300,"filename":1199,"language":493,"meta":494,"style":494},"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",[496,1302,1303,1331,1335,1341,1380,1384,1411,1416,1420,1425],{"__ignoreMap":494},[499,1304,1305,1307,1309,1312,1314,1317,1319,1321,1323,1325,1327,1329],{"class":501,"line":502},[499,1306,506],{"class":505},[499,1308,510],{"class":509},[499,1310,1311],{"class":513}," setIdentity",[499,1313,517],{"class":509},[499,1315,1316],{"class":513}," clearIdentity",[499,1318,517],{"class":509},[499,1320,520],{"class":513},[499,1322,523],{"class":509},[499,1324,526],{"class":505},[499,1326,529],{"class":509},[499,1328,533],{"class":532},[499,1330,536],{"class":509},[499,1332,1333],{"class":501,"line":539},[499,1334,543],{"emptyLinePlaceholder":542},[499,1336,1337],{"class":501,"line":546},[499,1338,1340],{"class":1339},"sHwdD","\u002F\u002F After login\n",[499,1342,1343,1346,1348,1350,1353,1355,1357,1360,1362,1364,1367,1369,1371,1374,1376,1378],{"class":501,"line":572},[499,1344,1345],{"class":555},"setIdentity",[499,1347,559],{"class":513},[499,1349,581],{"class":509},[499,1351,1352],{"class":578}," userId",[499,1354,587],{"class":509},[499,1356,529],{"class":509},[499,1358,1359],{"class":532},"usr_123",[499,1361,595],{"class":509},[499,1363,517],{"class":509},[499,1365,1366],{"class":578}," plan",[499,1368,587],{"class":509},[499,1370,529],{"class":509},[499,1372,1373],{"class":532},"pro",[499,1375,595],{"class":509},[499,1377,523],{"class":509},[499,1379,600],{"class":513},[499,1381,1382],{"class":501,"line":603},[499,1383,543],{"emptyLinePlaceholder":542},[499,1385,1386,1388,1390,1392,1394,1396,1398,1400,1402,1405,1407,1409],{"class":501,"line":608},[499,1387,943],{"class":513},[499,1389,614],{"class":509},[499,1391,617],{"class":555},[499,1393,559],{"class":513},[499,1395,581],{"class":509},[499,1397,624],{"class":578},[499,1399,587],{"class":509},[499,1401,529],{"class":509},[499,1403,1404],{"class":532},"dashboard_view",[499,1406,595],{"class":509},[499,1408,523],{"class":509},[499,1410,600],{"class":513},[499,1412,1413],{"class":501,"line":660},[499,1414,1415],{"class":1339},"\u002F\u002F → { userId: 'usr_123', plan: 'pro', action: 'dashboard_view', ... }\n",[499,1417,1418],{"class":501,"line":805},[499,1419,543],{"emptyLinePlaceholder":542},[499,1421,1422],{"class":501,"line":849},[499,1423,1424],{"class":1339},"\u002F\u002F After logout\n",[499,1426,1427,1430],{"class":501,"line":858},[499,1428,1429],{"class":555},"clearIdentity",[499,1431,1432],{"class":513},"()\n",[427,1434,1435],{},"Identity fields are automatically merged into every log event until cleared. This lets you correlate browser events to specific users in your observability tools.",[478,1437,170],{"id":1438},"configuration",[427,1440,1441,1444],{},[496,1442,1443],{},"initLog()"," accepts the following options:",[1446,1447,1448,1464],"table",{},[1449,1450,1451],"thead",{},[1452,1453,1454,1458,1461],"tr",{},[1455,1456,1457],"th",{},"Option",[1455,1459,1460],{},"Default",[1455,1462,1463],{},"Description",[1465,1466,1467,1483,1497,1511,1532,1547],"tbody",{},[1452,1468,1469,1475,1480],{},[1470,1471,1472],"td",{},[496,1473,1474],{},"enabled",[1470,1476,1477],{},[496,1478,1479],{},"true",[1470,1481,1482],{},"Enable or disable all client logging",[1452,1484,1485,1490,1494],{},[1470,1486,1487],{},[496,1488,1489],{},"console",[1470,1491,1492],{},[496,1493,1479],{},[1470,1495,1496],{},"Output logs to the browser console",[1452,1498,1499,1504,1508],{},[1470,1500,1501],{},[496,1502,1503],{},"pretty",[1470,1505,1506],{},[496,1507,1479],{},[1470,1509,1510],{},"Use colored, formatted console output",[1452,1512,1513,1517,1521],{},[1470,1514,1515],{},[496,1516,995],{},[1470,1518,1519],{},[496,1520,1019],{},[1470,1522,1523,1524,1007,1526,1007,1528,1007,1530],{},"Minimum severity: ",[496,1525,1006],{},[496,1527,617],{},[496,1529,1012],{},[496,1531,1015],{},[1452,1533,1534,1539,1544],{},[1470,1535,1536],{},[496,1537,1538],{},"service",[1470,1540,1541],{},[496,1542,1543],{},"'client'",[1470,1545,1546],{},"Service name included in every log event",[1452,1548,1549,1554,1557],{},[1470,1550,1551],{},[496,1552,1553],{},"transport",[1470,1555,1556],{},"-",[1470,1558,1559],{},"Send logs to a server endpoint (see below)",[488,1561,1564],{"className":490,"code":1562,"filename":1563,"language":493,"meta":494,"style":494},"initLog({\n  service: 'web',\n  transport: {\n    enabled: true,\n    endpoint: '\u002Fapi\u002F_evlog\u002Fingest', \u002F\u002F default endpoint\n  },\n})\n","app\u002Fplugins\u002Flogger.client.ts",[496,1565,1566,1575,1591,1600,1613,1632,1637],{"__ignoreMap":494},[499,1567,1568,1570,1572],{"class":501,"line":502},[499,1569,920],{"class":555},[499,1571,559],{"class":513},[499,1573,1574],{"class":509},"{\n",[499,1576,1577,1580,1582,1584,1586,1588],{"class":501,"line":539},[499,1578,1579],{"class":578},"  service",[499,1581,587],{"class":509},[499,1583,529],{"class":509},[499,1585,592],{"class":532},[499,1587,595],{"class":509},[499,1589,1590],{"class":509},",\n",[499,1592,1593,1596,1598],{"class":501,"line":546},[499,1594,1595],{"class":578},"  transport",[499,1597,587],{"class":509},[499,1599,569],{"class":509},[499,1601,1602,1605,1607,1611],{"class":501,"line":572},[499,1603,1604],{"class":578},"    enabled",[499,1606,587],{"class":509},[499,1608,1610],{"class":1609},"sfNiH"," true",[499,1612,1590],{"class":509},[499,1614,1615,1618,1620,1622,1625,1627,1629],{"class":501,"line":603},[499,1616,1617],{"class":578},"    endpoint",[499,1619,587],{"class":509},[499,1621,529],{"class":509},[499,1623,1624],{"class":532},"\u002Fapi\u002F_evlog\u002Fingest",[499,1626,595],{"class":509},[499,1628,517],{"class":509},[499,1630,1631],{"class":1339}," \u002F\u002F default endpoint\n",[499,1633,1634],{"class":501,"line":608},[499,1635,1636],{"class":509},"  },\n",[499,1638,1639,1641],{"class":501,"line":660},[499,1640,663],{"class":509},[499,1642,600],{"class":513},[1644,1645,1646,1256,1648,1263,1650,1652,1653,1655],"callout",{"color":617,"icon":13},[496,1647,1474],{},[496,1649,1489],{},[496,1651,1503],{}," all default to ",[496,1654,1479],{},". You only need to set them if you want to change the defaults.",[478,1657,1659],{"id":1658},"sending-logs-to-the-server","Sending Logs to the Server",[427,1661,1662],{},"By default, client logs only appear in the browser console. To persist them, you have two options:",[1060,1664,1666],{"id":1665},"built-in-transport","Built-in Transport",[427,1668,1669,1670,1672,1673,1676,1677,1680],{},"The simplest approach is to enable the built-in transport in ",[496,1671,1443],{},". Each log is sent individually via ",[496,1674,1675],{},"fetch"," with ",[496,1678,1679],{},"keepalive: true",". Good for low-volume apps.",[485,1682,1683,1802,2002],{},[488,1684,1686],{"className":490,"code":1685,"filename":492,"language":493,"meta":494,"style":494},"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',\n    },\n  })\n})\n",[496,1687,1688,1706,1710,1726,1734,1749,1758,1769,1784,1789,1796],{"__ignoreMap":494},[499,1689,1690,1692,1694,1696,1698,1700,1702,1704],{"class":501,"line":502},[499,1691,506],{"class":505},[499,1693,510],{"class":509},[499,1695,514],{"class":513},[499,1697,523],{"class":509},[499,1699,526],{"class":505},[499,1701,529],{"class":509},[499,1703,533],{"class":532},[499,1705,536],{"class":509},[499,1707,1708],{"class":501,"line":539},[499,1709,543],{"emptyLinePlaceholder":542},[499,1711,1712,1714,1716,1718,1720,1722,1724],{"class":501,"line":546},[499,1713,549],{"class":505},[499,1715,552],{"class":505},[499,1717,556],{"class":555},[499,1719,559],{"class":513},[499,1721,562],{"class":509},[499,1723,566],{"class":565},[499,1725,569],{"class":509},[499,1727,1728,1730,1732],{"class":501,"line":572},[499,1729,575],{"class":555},[499,1731,559],{"class":578},[499,1733,1574],{"class":509},[499,1735,1736,1739,1741,1743,1745,1747],{"class":501,"line":603},[499,1737,1738],{"class":578},"    service",[499,1740,587],{"class":509},[499,1742,529],{"class":509},[499,1744,592],{"class":532},[499,1746,595],{"class":509},[499,1748,1590],{"class":509},[499,1750,1751,1754,1756],{"class":501,"line":608},[499,1752,1753],{"class":578},"    transport",[499,1755,587],{"class":509},[499,1757,569],{"class":509},[499,1759,1760,1763,1765,1767],{"class":501,"line":660},[499,1761,1762],{"class":578},"      enabled",[499,1764,587],{"class":509},[499,1766,1610],{"class":1609},[499,1768,1590],{"class":509},[499,1770,1771,1774,1776,1778,1780,1782],{"class":501,"line":805},[499,1772,1773],{"class":578},"      endpoint",[499,1775,587],{"class":509},[499,1777,529],{"class":509},[499,1779,1624],{"class":532},[499,1781,595],{"class":509},[499,1783,1590],{"class":509},[499,1785,1786],{"class":501,"line":849},[499,1787,1788],{"class":509},"    },\n",[499,1790,1791,1794],{"class":501,"line":858},[499,1792,1793],{"class":509},"  }",[499,1795,600],{"class":578},[499,1797,1798,1800],{"class":501,"line":863},[499,1799,663],{"class":509},[499,1801,600],{"class":513},[488,1803,1808],{"className":1804,"code":1805,"filename":1806,"language":1807,"meta":494,"style":494},"language-tsx shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { EvlogProvider } from 'evlog\u002Fnext\u002Fclient'\n\nexport default function Layout({ children }: { children: React.ReactNode }) {\n  return (\n    \u003Chtml lang=\"en\">\n      \u003Cbody>\n        \u003CEvlogProvider service=\"web\" transport={{ enabled: true, endpoint: '\u002Fapi\u002F_evlog\u002Fingest' }}>\n          {children}\n        \u003C\u002FEvlogProvider>\n      \u003C\u002Fbody>\n    \u003C\u002Fhtml>\n  )\n}\n","app\u002Flayout.tsx (Next.js)","tsx",[496,1809,1810,1830,1834,1867,1874,1899,1909,1956,1965,1974,1983,1992,1997],{"__ignoreMap":494},[499,1811,1812,1814,1816,1819,1821,1823,1825,1828],{"class":501,"line":502},[499,1813,506],{"class":505},[499,1815,510],{"class":509},[499,1817,1818],{"class":513}," EvlogProvider",[499,1820,523],{"class":509},[499,1822,526],{"class":505},[499,1824,529],{"class":509},[499,1826,1827],{"class":532},"evlog\u002Fnext\u002Fclient",[499,1829,536],{"class":509},[499,1831,1832],{"class":501,"line":539},[499,1833,543],{"emptyLinePlaceholder":542},[499,1835,1836,1838,1840,1842,1845,1847,1849,1851,1853,1855,1857,1859,1861,1863,1865],{"class":501,"line":546},[499,1837,549],{"class":505},[499,1839,552],{"class":505},[499,1841,733],{"class":565},[499,1843,1844],{"class":555}," Layout",[499,1846,739],{"class":509},[499,1848,743],{"class":742},[499,1850,746],{"class":509},[499,1852,510],{"class":509},[499,1854,743],{"class":578},[499,1856,587],{"class":509},[499,1858,756],{"class":755},[499,1860,614],{"class":509},[499,1862,761],{"class":755},[499,1864,764],{"class":509},[499,1866,569],{"class":509},[499,1868,1869,1871],{"class":501,"line":572},[499,1870,866],{"class":505},[499,1872,1873],{"class":578}," (\n",[499,1875,1876,1879,1882,1885,1888,1891,1894,1896],{"class":501,"line":603},[499,1877,1878],{"class":509},"    \u003C",[499,1880,1881],{"class":578},"html",[499,1883,1884],{"class":565}," lang",[499,1886,1887],{"class":509},"=",[499,1889,1890],{"class":509},"\"",[499,1892,1893],{"class":532},"en",[499,1895,1890],{"class":509},[499,1897,1898],{"class":509},">\n",[499,1900,1901,1904,1907],{"class":501,"line":608},[499,1902,1903],{"class":509},"      \u003C",[499,1905,1906],{"class":578},"body",[499,1908,1898],{"class":509},[499,1910,1911,1914,1917,1919,1921,1923,1925,1927,1930,1933,1936,1938,1940,1942,1945,1947,1949,1951,1953],{"class":501,"line":660},[499,1912,1913],{"class":509},"        \u003C",[499,1915,1916],{"class":755},"EvlogProvider",[499,1918,584],{"class":565},[499,1920,1887],{"class":509},[499,1922,1890],{"class":509},[499,1924,592],{"class":532},[499,1926,1890],{"class":509},[499,1928,1929],{"class":565}," transport",[499,1931,1932],{"class":509},"={{",[499,1934,1935],{"class":578}," enabled",[499,1937,587],{"class":509},[499,1939,1610],{"class":1609},[499,1941,517],{"class":509},[499,1943,1944],{"class":578}," endpoint",[499,1946,587],{"class":509},[499,1948,529],{"class":509},[499,1950,1624],{"class":532},[499,1952,595],{"class":509},[499,1954,1955],{"class":509}," }}>\n",[499,1957,1958,1961,1963],{"class":501,"line":805},[499,1959,1960],{"class":509},"          {",[499,1962,874],{"class":513},[499,1964,883],{"class":509},[499,1966,1967,1970,1972],{"class":501,"line":849},[499,1968,1969],{"class":509},"        \u003C\u002F",[499,1971,1916],{"class":755},[499,1973,1898],{"class":509},[499,1975,1976,1979,1981],{"class":501,"line":858},[499,1977,1978],{"class":509},"      \u003C\u002F",[499,1980,1906],{"class":578},[499,1982,1898],{"class":509},[499,1984,1985,1988,1990],{"class":501,"line":863},[499,1986,1987],{"class":509},"    \u003C\u002F",[499,1989,1881],{"class":578},[499,1991,1898],{"class":509},[499,1993,1994],{"class":501,"line":880},[499,1995,1996],{"class":578},"  )\n",[499,1998,2000],{"class":501,"line":1999},13,[499,2001,883],{"class":509},[488,2003,2005],{"className":490,"code":2004,"filename":887,"language":493,"meta":494,"style":494},"import { initLog } from 'evlog\u002Fclient'\n\ninitLog({\n  service: 'web',\n  transport: {\n    enabled: true,\n    endpoint: '\u002Fapi\u002F_evlog\u002Fingest',\n  },\n})\n",[496,2006,2007,2025,2029,2037,2051,2059,2069,2083,2087],{"__ignoreMap":494},[499,2008,2009,2011,2013,2015,2017,2019,2021,2023],{"class":501,"line":502},[499,2010,506],{"class":505},[499,2012,510],{"class":509},[499,2014,514],{"class":513},[499,2016,523],{"class":509},[499,2018,526],{"class":505},[499,2020,529],{"class":509},[499,2022,533],{"class":532},[499,2024,536],{"class":509},[499,2026,2027],{"class":501,"line":539},[499,2028,543],{"emptyLinePlaceholder":542},[499,2030,2031,2033,2035],{"class":501,"line":546},[499,2032,920],{"class":555},[499,2034,559],{"class":513},[499,2036,1574],{"class":509},[499,2038,2039,2041,2043,2045,2047,2049],{"class":501,"line":572},[499,2040,1579],{"class":578},[499,2042,587],{"class":509},[499,2044,529],{"class":509},[499,2046,592],{"class":532},[499,2048,595],{"class":509},[499,2050,1590],{"class":509},[499,2052,2053,2055,2057],{"class":501,"line":603},[499,2054,1595],{"class":578},[499,2056,587],{"class":509},[499,2058,569],{"class":509},[499,2060,2061,2063,2065,2067],{"class":501,"line":608},[499,2062,1604],{"class":578},[499,2064,587],{"class":509},[499,2066,1610],{"class":1609},[499,2068,1590],{"class":509},[499,2070,2071,2073,2075,2077,2079,2081],{"class":501,"line":660},[499,2072,1617],{"class":578},[499,2074,587],{"class":509},[499,2076,529],{"class":509},[499,2078,1624],{"class":532},[499,2080,595],{"class":509},[499,2082,1590],{"class":509},[499,2084,2085],{"class":501,"line":805},[499,2086,1636],{"class":509},[499,2088,2089,2091],{"class":501,"line":849},[499,2090,663],{"class":509},[499,2092,600],{"class":513},[1644,2094,2095,2096,2100],{"color":617,"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 ",[467,2097,2099],{"href":2098},"\u002Fadapters\u002Fbuilding-blocks\u002Fhttp#server-endpoint","HTTP drain"," docs for Express and Hono examples.",[1060,2102,2104],{"id":2103},"http-drain-pipeline","HTTP drain pipeline",[427,2106,2107,2108,2111],{},"For higher volume or when you need batching, retries, and page-exit flushing, use the HTTP drain (",[496,2109,2110],{},"evlog\u002Fhttp","). This works with any frontend and has no framework dependency.",[485,2113,2114,2342],{},[488,2115,2117],{"className":490,"code":2116,"filename":492,"language":493,"meta":494,"style":494},"import { initLogger, log } from 'evlog'\nimport { createHttpLogDrain } from 'evlog\u002Fhttp'\n\nexport default defineNuxtPlugin(() => {\n  const drain = createHttpLogDrain({\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",[496,2118,2119,2143,2162,2166,2182,2199,2221,2230,2260,2279,2283,2289,2293,2308,2335],{"__ignoreMap":494},[499,2120,2121,2123,2125,2128,2130,2132,2134,2136,2138,2141],{"class":501,"line":502},[499,2122,506],{"class":505},[499,2124,510],{"class":509},[499,2126,2127],{"class":513}," initLogger",[499,2129,517],{"class":509},[499,2131,520],{"class":513},[499,2133,523],{"class":509},[499,2135,526],{"class":505},[499,2137,529],{"class":509},[499,2139,2140],{"class":532},"evlog",[499,2142,536],{"class":509},[499,2144,2145,2147,2149,2152,2154,2156,2158,2160],{"class":501,"line":539},[499,2146,506],{"class":505},[499,2148,510],{"class":509},[499,2150,2151],{"class":513}," createHttpLogDrain",[499,2153,523],{"class":509},[499,2155,526],{"class":505},[499,2157,529],{"class":509},[499,2159,2110],{"class":532},[499,2161,536],{"class":509},[499,2163,2164],{"class":501,"line":546},[499,2165,543],{"emptyLinePlaceholder":542},[499,2167,2168,2170,2172,2174,2176,2178,2180],{"class":501,"line":572},[499,2169,549],{"class":505},[499,2171,552],{"class":505},[499,2173,556],{"class":555},[499,2175,559],{"class":513},[499,2177,562],{"class":509},[499,2179,566],{"class":565},[499,2181,569],{"class":509},[499,2183,2184,2187,2190,2193,2195,2197],{"class":501,"line":603},[499,2185,2186],{"class":565},"  const",[499,2188,2189],{"class":513}," drain",[499,2191,2192],{"class":509}," =",[499,2194,2151],{"class":555},[499,2196,559],{"class":578},[499,2198,1574],{"class":509},[499,2200,2201,2204,2206,2208,2210,2212,2214,2216,2218],{"class":501,"line":608},[499,2202,2203],{"class":578},"    drain",[499,2205,587],{"class":509},[499,2207,510],{"class":509},[499,2209,1944],{"class":578},[499,2211,587],{"class":509},[499,2213,529],{"class":509},[499,2215,1624],{"class":532},[499,2217,595],{"class":509},[499,2219,2220],{"class":509}," },\n",[499,2222,2223,2226,2228],{"class":501,"line":660},[499,2224,2225],{"class":578},"    pipeline",[499,2227,587],{"class":509},[499,2229,569],{"class":509},[499,2231,2232,2235,2237,2239,2242,2244,2248,2250,2253,2255,2258],{"class":501,"line":805},[499,2233,2234],{"class":578},"      batch",[499,2236,587],{"class":509},[499,2238,510],{"class":509},[499,2240,2241],{"class":578}," size",[499,2243,587],{"class":509},[499,2245,2247],{"class":2246},"sbssI"," 25",[499,2249,517],{"class":509},[499,2251,2252],{"class":578}," intervalMs",[499,2254,587],{"class":509},[499,2256,2257],{"class":2246}," 2000",[499,2259,2220],{"class":509},[499,2261,2262,2265,2267,2269,2272,2274,2277],{"class":501,"line":849},[499,2263,2264],{"class":578},"      retry",[499,2266,587],{"class":509},[499,2268,510],{"class":509},[499,2270,2271],{"class":578}," maxAttempts",[499,2273,587],{"class":509},[499,2275,2276],{"class":2246}," 2",[499,2278,2220],{"class":509},[499,2280,2281],{"class":501,"line":858},[499,2282,1788],{"class":509},[499,2284,2285,2287],{"class":501,"line":863},[499,2286,1793],{"class":509},[499,2288,600],{"class":578},[499,2290,2291],{"class":501,"line":880},[499,2292,543],{"emptyLinePlaceholder":542},[499,2294,2295,2298,2300,2302,2304,2306],{"class":501,"line":1999},[499,2296,2297],{"class":555},"  initLogger",[499,2299,559],{"class":578},[499,2301,581],{"class":509},[499,2303,2189],{"class":513},[499,2305,523],{"class":509},[499,2307,600],{"class":578},[499,2309,2311,2313,2315,2317,2319,2321,2323,2325,2327,2329,2331,2333],{"class":501,"line":2310},14,[499,2312,611],{"class":513},[499,2314,614],{"class":509},[499,2316,617],{"class":555},[499,2318,559],{"class":578},[499,2320,581],{"class":509},[499,2322,624],{"class":578},[499,2324,587],{"class":509},[499,2326,529],{"class":509},[499,2328,631],{"class":532},[499,2330,595],{"class":509},[499,2332,523],{"class":509},[499,2334,600],{"class":578},[499,2336,2338,2340],{"class":501,"line":2337},15,[499,2339,663],{"class":509},[499,2341,600],{"class":513},[488,2343,2345],{"className":490,"code":2344,"filename":887,"language":493,"meta":494,"style":494},"import { initLogger, log } from 'evlog'\nimport { createHttpLogDrain } from 'evlog\u002Fhttp'\n\nconst drain = createHttpLogDrain({\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",[496,2346,2347,2369,2387,2391,2407,2429,2438,2463,2480,2484,2490,2494,2509],{"__ignoreMap":494},[499,2348,2349,2351,2353,2355,2357,2359,2361,2363,2365,2367],{"class":501,"line":502},[499,2350,506],{"class":505},[499,2352,510],{"class":509},[499,2354,2127],{"class":513},[499,2356,517],{"class":509},[499,2358,520],{"class":513},[499,2360,523],{"class":509},[499,2362,526],{"class":505},[499,2364,529],{"class":509},[499,2366,2140],{"class":532},[499,2368,536],{"class":509},[499,2370,2371,2373,2375,2377,2379,2381,2383,2385],{"class":501,"line":539},[499,2372,506],{"class":505},[499,2374,510],{"class":509},[499,2376,2151],{"class":513},[499,2378,523],{"class":509},[499,2380,526],{"class":505},[499,2382,529],{"class":509},[499,2384,2110],{"class":532},[499,2386,536],{"class":509},[499,2388,2389],{"class":501,"line":546},[499,2390,543],{"emptyLinePlaceholder":542},[499,2392,2393,2396,2399,2401,2403,2405],{"class":501,"line":572},[499,2394,2395],{"class":565},"const",[499,2397,2398],{"class":513}," drain ",[499,2400,1887],{"class":509},[499,2402,2151],{"class":555},[499,2404,559],{"class":513},[499,2406,1574],{"class":509},[499,2408,2409,2412,2414,2416,2418,2420,2422,2425,2427],{"class":501,"line":603},[499,2410,2411],{"class":578},"  drain",[499,2413,587],{"class":509},[499,2415,510],{"class":509},[499,2417,1944],{"class":578},[499,2419,587],{"class":509},[499,2421,529],{"class":509},[499,2423,2424],{"class":532},"https:\u002F\u002Flogs.example.com\u002Fv1\u002Fingest",[499,2426,595],{"class":509},[499,2428,2220],{"class":509},[499,2430,2431,2434,2436],{"class":501,"line":608},[499,2432,2433],{"class":578},"  pipeline",[499,2435,587],{"class":509},[499,2437,569],{"class":509},[499,2439,2440,2443,2445,2447,2449,2451,2453,2455,2457,2459,2461],{"class":501,"line":660},[499,2441,2442],{"class":578},"    batch",[499,2444,587],{"class":509},[499,2446,510],{"class":509},[499,2448,2241],{"class":578},[499,2450,587],{"class":509},[499,2452,2247],{"class":2246},[499,2454,517],{"class":509},[499,2456,2252],{"class":578},[499,2458,587],{"class":509},[499,2460,2257],{"class":2246},[499,2462,2220],{"class":509},[499,2464,2465,2468,2470,2472,2474,2476,2478],{"class":501,"line":805},[499,2466,2467],{"class":578},"    retry",[499,2469,587],{"class":509},[499,2471,510],{"class":509},[499,2473,2271],{"class":578},[499,2475,587],{"class":509},[499,2477,2276],{"class":2246},[499,2479,2220],{"class":509},[499,2481,2482],{"class":501,"line":849},[499,2483,1636],{"class":509},[499,2485,2486,2488],{"class":501,"line":858},[499,2487,663],{"class":509},[499,2489,600],{"class":513},[499,2491,2492],{"class":501,"line":863},[499,2493,543],{"emptyLinePlaceholder":542},[499,2495,2496,2499,2501,2503,2505,2507],{"class":501,"line":880},[499,2497,2498],{"class":555},"initLogger",[499,2500,559],{"class":513},[499,2502,581],{"class":509},[499,2504,2398],{"class":513},[499,2506,663],{"class":509},[499,2508,600],{"class":513},[499,2510,2511,2513,2515,2517,2519,2521,2523,2525,2527,2529,2531,2533],{"class":501,"line":1999},[499,2512,943],{"class":513},[499,2514,614],{"class":509},[499,2516,617],{"class":555},[499,2518,559],{"class":513},[499,2520,581],{"class":509},[499,2522,624],{"class":578},[499,2524,587],{"class":509},[499,2526,529],{"class":509},[499,2528,631],{"class":532},[499,2530,595],{"class":509},[499,2532,523],{"class":509},[499,2534,600],{"class":513},[427,2536,2537],{},"The HTTP drain automatically:",[442,2539,2540,2546,2552],{},[445,2541,2542,2545],{},[1025,2543,2544],{},"Batches"," events by size and time interval",[445,2547,2548,2551],{},[1025,2549,2550],{},"Retries"," failed sends with exponential backoff",[445,2553,2554,2557,2558,2561],{},[1025,2555,2556],{},"Flushes"," buffered events via ",[496,2559,2560],{},"sendBeacon"," when the page becomes hidden (tab switch, navigation, close)",[1644,2563,2566,2567,2569],{"color":2564,"icon":2565},"neutral","i-lucide-arrow-right","See the ",[467,2568,2099],{"href":393}," adapter docs for full configuration reference, authentication, and server endpoint examples.",[478,2571,2573],{"id":2572},"next-steps","Next Steps",[442,2575,2576,2581,2586],{},[445,2577,2578,2580],{},[467,2579,2099],{"href":393}," - Batching, retry, and sendBeacon fallback",[445,2582,2583,2585],{},[467,2584,387],{"href":388}," - Advanced pipeline configuration",[445,2587,2588,2590],{},[467,2589,56],{"href":57}," - Surface client errors with actionable context",[2592,2593,2594],"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 .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}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}",{"title":494,"searchDepth":539,"depth":539,"links":2596},[2597,2598,2600,2605,2606,2607,2611],{"id":480,"depth":539,"text":20},{"id":991,"depth":539,"text":2599},"Minimum level (minLevel)",{"id":1052,"depth":539,"text":1053,"children":2601},[2602,2603,2604],{"id":1062,"depth":546,"text":1063},{"id":1191,"depth":546,"text":1192},{"id":1248,"depth":546,"text":1249},{"id":1290,"depth":539,"text":1291},{"id":1438,"depth":539,"text":170},{"id":1658,"depth":539,"text":1659,"children":2608},[2609,2610],{"id":1665,"depth":546,"text":1666},{"id":2103,"depth":546,"text":2104},{"id":2572,"depth":539,"text":2573},"Capture browser events with structured logging. Same API as the server, with automatic console styling, user identity context, and optional server transport.","md",[2615,2617],{"label":2099,"icon":395,"to":393,"color":2564,"variant":2616},"subtle",{"label":51,"icon":54,"to":52,"color":2564,"variant":2616},{},{"icon":69},{"title":66,"description":2612},"nfgdBKV184y_8Gpl4JnyR_XuZdcW46q-orGfTgvGPLM",[2623,2625],{"title":61,"path":62,"stem":63,"description":2624,"icon":64,"children":-1},"Scale typed error and audit catalogs from a single file to multi-package monorepos. Conventions, npm packaging recipe, composition patterns, and the type-augmentation deep dive.",{"title":41,"path":77,"stem":78,"description":2626,"icon":44,"children":-1},"Capture token usage, tool calls, model info, and streaming metrics from the Vercel AI SDK into wide events. Wrap your model and get full AI observability with one line.",1778333316670]