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