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