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