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