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