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