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