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