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