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