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