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