[{"data":1,"prerenderedAt":1569},["ShallowReactive",2],{"navigation_docs":3,"-core-concepts-vite-plugin":392,"-core-concepts-vite-plugin-surround":1564},[4,35,159,201,289,376],{"title":5,"path":6,"stem":7,"children":8,"page":34},"Getting Started","\u002Fgetting-started","1.getting-started",[9,14,19,24,29],{"title":10,"path":11,"stem":12,"icon":13},"Introduction","\u002Fgetting-started\u002Fintroduction","1.getting-started\u002F1.introduction","i-lucide-info",{"title":15,"path":16,"stem":17,"icon":18},"Installation","\u002Fgetting-started\u002Finstallation","1.getting-started\u002F2.installation","i-lucide-download",{"title":20,"path":21,"stem":22,"icon":23},"Quick Start","\u002Fgetting-started\u002Fquick-start","1.getting-started\u002F3.quick-start","i-lucide-zap",{"title":25,"path":26,"stem":27,"icon":28},"Agent Skills","\u002Fgetting-started\u002Fagent-skills","1.getting-started\u002F4.agent-skills","i-lucide-sparkles",{"title":30,"path":31,"stem":32,"icon":33},"vs Other Loggers","\u002Fgetting-started\u002Fvs-other-loggers","1.getting-started\u002F5.vs-other-loggers","i-lucide-scale",false,{"title":36,"path":37,"stem":38,"children":39,"page":34},"Logging","\u002Flogging","2.logging",[40,45,50,55,60,65,70,99,127],{"title":41,"path":42,"stem":43,"icon":44},"Overview","\u002Flogging\u002Foverview","2.logging\u002F0.overview","i-lucide-list",{"title":46,"path":47,"stem":48,"icon":49},"Simple Logging","\u002Flogging\u002Fsimple-logging","2.logging\u002F1.simple-logging","i-lucide-terminal",{"title":51,"path":52,"stem":53,"icon":54},"Wide Events","\u002Flogging\u002Fwide-events","2.logging\u002F2.wide-events","i-lucide-layers",{"title":56,"path":57,"stem":58,"icon":59},"Structured Errors","\u002Flogging\u002Fstructured-errors","2.logging\u002F3.structured-errors","i-lucide-shield-alert",{"title":61,"path":62,"stem":63,"icon":64},"Catalogs","\u002Flogging\u002Fcatalogs","2.logging\u002F4.catalogs","i-lucide-book-open",{"title":66,"path":67,"stem":68,"icon":69},"Client Logging","\u002Flogging\u002Fclient-logging","2.logging\u002F5.client-logging","i-lucide-monitor",{"title":71,"icon":72,"path":73,"stem":74,"children":75,"page":34},"AI SDK","i-simple-icons-vercel","\u002Flogging\u002Fai-sdk","2.logging\u002F6.ai-sdk",[76,79,84,89,94],{"title":41,"path":77,"stem":78,"icon":44},"\u002Flogging\u002Fai-sdk\u002Foverview","2.logging\u002F6.ai-sdk\u002F01.overview",{"title":80,"path":81,"stem":82,"icon":83},"Usage","\u002Flogging\u002Fai-sdk\u002Fusage","2.logging\u002F6.ai-sdk\u002F02.usage","i-lucide-code",{"title":85,"path":86,"stem":87,"icon":88},"Options","\u002Flogging\u002Fai-sdk\u002Foptions","2.logging\u002F6.ai-sdk\u002F03.options","i-lucide-sliders",{"title":90,"path":91,"stem":92,"icon":93},"Metadata","\u002Flogging\u002Fai-sdk\u002Fmetadata","2.logging\u002F6.ai-sdk\u002F04.metadata","i-lucide-database",{"title":95,"path":96,"stem":97,"icon":98},"Telemetry","\u002Flogging\u002Fai-sdk\u002Ftelemetry","2.logging\u002F6.ai-sdk\u002F05.telemetry","i-lucide-activity",{"title":100,"icon":101,"path":102,"stem":103,"children":104,"page":34},"Better Auth","i-simple-icons-betterauth","\u002Flogging\u002Fbetter-auth","2.logging\u002F7.better-auth",[105,108,113,118,122],{"title":41,"path":106,"stem":107,"icon":44},"\u002Flogging\u002Fbetter-auth\u002Foverview","2.logging\u002F7.better-auth\u002F01.overview",{"title":109,"path":110,"stem":111,"icon":112},"Identify User","\u002Flogging\u002Fbetter-auth\u002Fidentify-user","2.logging\u002F7.better-auth\u002F02.identify-user","i-lucide-user-check",{"title":114,"path":115,"stem":116,"icon":117},"Middleware","\u002Flogging\u002Fbetter-auth\u002Fmiddleware","2.logging\u002F7.better-auth\u002F03.middleware","i-lucide-shield",{"title":119,"path":120,"stem":121,"icon":69},"Client Sync","\u002Flogging\u002Fbetter-auth\u002Fclient-sync","2.logging\u002F7.better-auth\u002F04.client-sync",{"title":123,"path":124,"stem":125,"icon":126},"Performance","\u002Flogging\u002Fbetter-auth\u002Fperformance","2.logging\u002F7.better-auth\u002F05.performance","i-lucide-gauge",{"title":128,"icon":129,"path":130,"stem":131,"children":132,"page":34},"Audit Logs","i-lucide-shield-check","\u002Flogging\u002Faudit","2.logging\u002F8.audit",[133,136,141,146,151,155],{"title":41,"path":134,"stem":135,"icon":44},"\u002Flogging\u002Faudit\u002Foverview","2.logging\u002F8.audit\u002F01.overview",{"title":137,"path":138,"stem":139,"icon":140},"Schema","\u002Flogging\u002Faudit\u002Fschema","2.logging\u002F8.audit\u002F02.schema","i-lucide-file-text",{"title":142,"path":143,"stem":144,"icon":145},"Recording","\u002Flogging\u002Faudit\u002Frecording","2.logging\u002F8.audit\u002F03.recording","i-lucide-pen-line",{"title":147,"path":148,"stem":149,"icon":150},"Drains","\u002Flogging\u002Faudit\u002Fpipeline","2.logging\u002F8.audit\u002F04.pipeline","i-lucide-link",{"title":152,"path":153,"stem":154,"icon":129},"Compliance","\u002Flogging\u002Faudit\u002Fcompliance","2.logging\u002F8.audit\u002F05.compliance",{"title":156,"path":157,"stem":158,"icon":64},"Recipes","\u002Flogging\u002Faudit\u002Frecipes","2.logging\u002F8.audit\u002F06.recipes",{"title":160,"path":161,"stem":162,"children":163,"page":34},"Core Concepts","\u002Fcore-concepts","3.core-concepts",[164,169,174,179,184,188,191,196],{"title":165,"path":166,"stem":167,"icon":168},"Lifecycle","\u002Fcore-concepts\u002Flifecycle","3.core-concepts\u002F0.lifecycle","i-lucide-arrow-right-left",{"title":170,"path":171,"stem":172,"icon":173},"Configuration","\u002Fcore-concepts\u002Fconfiguration","3.core-concepts\u002F1.configuration","i-lucide-settings",{"title":175,"path":176,"stem":177,"icon":178},"Sampling","\u002Fcore-concepts\u002Fsampling","3.core-concepts\u002F2.sampling","i-lucide-filter",{"title":180,"path":181,"stem":182,"icon":183},"Typed Fields","\u002Fcore-concepts\u002Ftyped-fields","3.core-concepts\u002F3.typed-fields","i-simple-icons-typescript",{"title":185,"path":186,"stem":187,"icon":129},"Best Practices","\u002Fcore-concepts\u002Fbest-practices","3.core-concepts\u002F4.best-practices",{"title":123,"path":189,"stem":190,"icon":126},"\u002Fcore-concepts\u002Fperformance","3.core-concepts\u002F5.performance",{"title":192,"path":193,"stem":194,"icon":195},"Vite Plugin","\u002Fcore-concepts\u002Fvite-plugin","3.core-concepts\u002F6.vite-plugin","i-custom-vite",{"title":197,"path":198,"stem":199,"icon":200},"Auto-Redaction","\u002Fcore-concepts\u002Fredaction","3.core-concepts\u002F7.redaction","i-lucide-eye-off",{"title":202,"path":203,"stem":204,"children":205,"page":34},"Frameworks","\u002Fframeworks","4.frameworks",[206,210,215,220,225,230,235,240,245,250,255,260,265,270,274,279,284],{"title":41,"path":207,"stem":208,"icon":209},"\u002Fframeworks\u002Foverview","4.frameworks\u002F00.overview","i-lucide-layout-grid",{"title":211,"path":212,"stem":213,"icon":214},"Nuxt","\u002Fframeworks\u002Fnuxt","4.frameworks\u002F01.nuxt","i-simple-icons-nuxtdotjs",{"title":216,"path":217,"stem":218,"icon":219},"Next.js","\u002Fframeworks\u002Fnextjs","4.frameworks\u002F02.nextjs","i-simple-icons-nextdotjs",{"title":221,"path":222,"stem":223,"icon":224},"SvelteKit","\u002Fframeworks\u002Fsveltekit","4.frameworks\u002F03.sveltekit","i-simple-icons-svelte",{"title":226,"path":227,"stem":228,"icon":229},"Nitro","\u002Fframeworks\u002Fnitro","4.frameworks\u002F04.nitro","i-custom-nitro",{"title":231,"path":232,"stem":233,"icon":234},"TanStack Start","\u002Fframeworks\u002Ftanstack-start","4.frameworks\u002F05.tanstack-start","i-custom-tanstack",{"title":236,"path":237,"stem":238,"icon":239},"NestJS","\u002Fframeworks\u002Fnestjs","4.frameworks\u002F06.nestjs","i-simple-icons-nestjs",{"title":241,"path":242,"stem":243,"icon":244},"Express","\u002Fframeworks\u002Fexpress","4.frameworks\u002F07.express","i-simple-icons-express",{"title":246,"path":247,"stem":248,"icon":249},"Hono","\u002Fframeworks\u002Fhono","4.frameworks\u002F08.hono","i-simple-icons-hono",{"title":251,"path":252,"stem":253,"icon":254},"Fastify","\u002Fframeworks\u002Ffastify","4.frameworks\u002F09.fastify","i-simple-icons-fastify",{"title":256,"path":257,"stem":258,"icon":259},"Elysia","\u002Fframeworks\u002Felysia","4.frameworks\u002F10.elysia","i-custom-elysia",{"title":261,"path":262,"stem":263,"icon":264},"React Router","\u002Fframeworks\u002Freact-router","4.frameworks\u002F11.react-router","i-custom-reactrouter",{"title":266,"path":267,"stem":268,"icon":269},"Cloudflare Workers","\u002Fframeworks\u002Fcloudflare-workers","4.frameworks\u002F12.cloudflare-workers","i-simple-icons-cloudflare",{"title":271,"path":272,"stem":273,"icon":183},"Standalone","\u002Fframeworks\u002Fstandalone","4.frameworks\u002F13.standalone",{"title":275,"path":276,"stem":277,"icon":278},"Astro","\u002Fframeworks\u002Fastro","4.frameworks\u002F14.astro","i-simple-icons-astro",{"title":280,"path":281,"stem":282,"icon":283},"AWS Lambda","\u002Fframeworks\u002Faws-lambda","4.frameworks\u002F16.aws-lambda","i-custom-lambda",{"title":285,"path":286,"stem":287,"icon":288},"Custom Integration","\u002Fframeworks\u002Fcustom-integration","4.frameworks\u002F17.custom-integration","i-lucide-puzzle",{"title":290,"path":291,"stem":292,"children":293,"page":34},"Adapters","\u002Fadapters","6.adapters",[294,297,337,352],{"title":41,"path":295,"stem":296,"icon":44},"\u002Fadapters\u002Foverview","6.adapters\u002F01.overview",{"title":298,"path":299,"stem":300,"children":301,"page":34},"Cloud destinations","\u002Fadapters\u002Fcloud","6.adapters\u002F02.cloud",[302,307,312,317,322,327,332],{"title":303,"path":304,"stem":305,"icon":306},"Axiom","\u002Fadapters\u002Fcloud\u002Faxiom","6.adapters\u002F02.cloud\u002F01.axiom","i-custom-axiom",{"title":308,"path":309,"stem":310,"icon":311},"OTLP","\u002Fadapters\u002Fcloud\u002Fotlp","6.adapters\u002F02.cloud\u002F02.otlp","i-simple-icons-opentelemetry",{"title":313,"path":314,"stem":315,"icon":316},"PostHog","\u002Fadapters\u002Fcloud\u002Fposthog","6.adapters\u002F02.cloud\u002F03.posthog","i-simple-icons-posthog",{"title":318,"path":319,"stem":320,"icon":321},"Sentry","\u002Fadapters\u002Fcloud\u002Fsentry","6.adapters\u002F02.cloud\u002F04.sentry","i-simple-icons-sentry",{"title":323,"path":324,"stem":325,"icon":326},"Better Stack","\u002Fadapters\u002Fcloud\u002Fbetter-stack","6.adapters\u002F02.cloud\u002F05.better-stack","i-simple-icons-betterstack",{"title":328,"path":329,"stem":330,"icon":331},"Datadog","\u002Fadapters\u002Fcloud\u002Fdatadog","6.adapters\u002F02.cloud\u002F06.datadog","i-simple-icons-datadog",{"title":333,"path":334,"stem":335,"icon":336},"HyperDX","\u002Fadapters\u002Fcloud\u002Fhyperdx","6.adapters\u002F02.cloud\u002F07.hyperdx","i-custom-hyperdx",{"title":338,"path":339,"stem":340,"children":341,"page":34},"Self-hosted","\u002Fadapters\u002Fself-hosted","6.adapters\u002F03.self-hosted",[342,347],{"title":343,"path":344,"stem":345,"icon":346},"File System","\u002Fadapters\u002Fself-hosted\u002Ffs","6.adapters\u002F03.self-hosted\u002F01.fs","i-lucide-hard-drive",{"title":348,"path":349,"stem":350,"icon":351},"NuxtHub","\u002Fadapters\u002Fself-hosted\u002Fnuxthub","6.adapters\u002F03.self-hosted\u002F02.nuxthub","i-simple-icons-nuxt",{"title":353,"path":354,"stem":355,"children":356,"page":34},"Building blocks","\u002Fadapters\u002Fbuilding-blocks","6.adapters\u002F04.building-blocks",[357,362,367,371],{"title":358,"path":359,"stem":360,"icon":361},"Pipeline","\u002Fadapters\u002Fbuilding-blocks\u002Fpipeline","6.adapters\u002F04.building-blocks\u002F01.pipeline","i-lucide-workflow",{"title":363,"path":364,"stem":365,"icon":366},"HTTP","\u002Fadapters\u002Fbuilding-blocks\u002Fhttp","6.adapters\u002F04.building-blocks\u002F02.http","i-lucide-globe",{"title":368,"path":369,"stem":370,"icon":83},"Custom Adapters","\u002Fadapters\u002Fbuilding-blocks\u002Fcustom","6.adapters\u002F04.building-blocks\u002F03.custom",{"title":372,"path":373,"stem":374,"icon":375},"Toolkit","\u002Fadapters\u002Fbuilding-blocks\u002Ftoolkit","6.adapters\u002F04.building-blocks\u002F04.toolkit","i-lucide-blocks",{"title":377,"path":378,"stem":379,"children":380,"page":34},"Enrichers","\u002Fenrichers","7.enrichers",[381,384,388],{"title":41,"path":382,"stem":383,"icon":28},"\u002Fenrichers\u002Foverview","7.enrichers\u002F1.overview",{"title":385,"path":386,"stem":387,"icon":288},"Built-in","\u002Fenrichers\u002Fbuilt-in","7.enrichers\u002F2.built-in",{"title":389,"path":390,"stem":391,"icon":83},"Custom","\u002Fenrichers\u002Fcustom","7.enrichers\u002F3.custom",{"id":393,"title":192,"body":394,"description":1551,"extension":1552,"links":1553,"meta":1560,"navigation":1561,"path":193,"seo":1562,"stem":194,"__hash__":1563},"docs\u002F3.core-concepts\u002F6.vite-plugin.md",{"type":395,"value":396,"toc":1534},"minimark",[397,406,427,431,436,507,514,679,682,700,704,707,724,728,768,772,778,852,863,867,873,931,935,947,991,994,1013,1034,1038,1056,1157,1160,1369,1373,1384,1508,1512,1530],[398,399,400,401,405],"p",{},"The ",[402,403,404],"code",{},"evlog\u002Fvite"," plugin adds build-time DX features to any Vite-based project. It works with SvelteKit, Hono, Express, Fastify, Elysia, and any framework using Vite as its build tool.",[407,408,410,414,415,418,419,422,423,426],"callout",{"color":409,"icon":13},"info",[411,412,413],"strong",{},"Nuxt users",": These features are already integrated into the ",[402,416,417],{},"evlog\u002Fnuxt"," module via ",[402,420,421],{},"strip"," and ",[402,424,425],{},"sourceLocation"," options. You don't need to install the Vite plugin separately.",[428,429,20],"h2",{"id":430},"quick-start",[432,433,435],"h3",{"id":434},"_1-install","1. Install",[437,438,439,464,478,492],"code-group",{},[440,441,447],"pre",{"className":442,"code":443,"filename":444,"language":445,"meta":446,"style":446},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","pnpm add evlog\n","pnpm","bash","",[402,448,449],{"__ignoreMap":446},[450,451,454,457,461],"span",{"class":452,"line":453},"line",1,[450,455,444],{"class":456},"sBMFI",[450,458,460],{"class":459},"sfazB"," add",[450,462,463],{"class":459}," evlog\n",[440,465,468],{"className":442,"code":466,"filename":467,"language":445,"meta":446,"style":446},"bun add evlog\n","bun",[402,469,470],{"__ignoreMap":446},[450,471,472,474,476],{"class":452,"line":453},[450,473,467],{"class":456},[450,475,460],{"class":459},[450,477,463],{"class":459},[440,479,482],{"className":442,"code":480,"filename":481,"language":445,"meta":446,"style":446},"yarn add evlog\n","yarn",[402,483,484],{"__ignoreMap":446},[450,485,486,488,490],{"class":452,"line":453},[450,487,481],{"class":456},[450,489,460],{"class":459},[450,491,463],{"class":459},[440,493,496],{"className":442,"code":494,"filename":495,"language":445,"meta":446,"style":446},"npm install evlog\n","npm",[402,497,498],{"__ignoreMap":446},[450,499,500,502,505],{"class":452,"line":453},[450,501,495],{"class":456},[450,503,504],{"class":459}," install",[450,506,463],{"class":459},[432,508,510,511],{"id":509},"_2-add-to-viteconfigts","2. Add to ",[402,512,513],{},"vite.config.ts",[440,515,519],{"className":516,"code":517,"filename":513,"language":518,"meta":446,"style":446},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { defineConfig } from 'vite'\nimport evlog from 'evlog\u002Fvite'\n\nexport default defineConfig({\n  plugins: [\n    evlog({\n      service: 'my-api',\n      environment: 'production',\n    }),\n  ],\n})\n","typescript",[402,520,521,550,567,574,592,605,615,634,651,662,670],{"__ignoreMap":446},[450,522,523,527,531,535,538,541,544,547],{"class":452,"line":453},[450,524,526],{"class":525},"s7zQu","import",[450,528,530],{"class":529},"sMK4o"," {",[450,532,534],{"class":533},"sTEyZ"," defineConfig",[450,536,537],{"class":529}," }",[450,539,540],{"class":525}," from",[450,542,543],{"class":529}," '",[450,545,546],{"class":459},"vite",[450,548,549],{"class":529},"'\n",[450,551,553,555,558,561,563,565],{"class":452,"line":552},2,[450,554,526],{"class":525},[450,556,557],{"class":533}," evlog ",[450,559,560],{"class":525},"from",[450,562,543],{"class":529},[450,564,404],{"class":459},[450,566,549],{"class":529},[450,568,570],{"class":452,"line":569},3,[450,571,573],{"emptyLinePlaceholder":572},true,"\n",[450,575,577,580,583,586,589],{"class":452,"line":576},4,[450,578,579],{"class":525},"export",[450,581,582],{"class":525}," default",[450,584,534],{"class":585},"s2Zo4",[450,587,588],{"class":533},"(",[450,590,591],{"class":529},"{\n",[450,593,595,599,602],{"class":452,"line":594},5,[450,596,598],{"class":597},"swJcz","  plugins",[450,600,601],{"class":529},":",[450,603,604],{"class":533}," [\n",[450,606,608,611,613],{"class":452,"line":607},6,[450,609,610],{"class":585},"    evlog",[450,612,588],{"class":533},[450,614,591],{"class":529},[450,616,618,621,623,625,628,631],{"class":452,"line":617},7,[450,619,620],{"class":597},"      service",[450,622,601],{"class":529},[450,624,543],{"class":529},[450,626,627],{"class":459},"my-api",[450,629,630],{"class":529},"'",[450,632,633],{"class":529},",\n",[450,635,637,640,642,644,647,649],{"class":452,"line":636},8,[450,638,639],{"class":597},"      environment",[450,641,601],{"class":529},[450,643,543],{"class":529},[450,645,646],{"class":459},"production",[450,648,630],{"class":529},[450,650,633],{"class":529},[450,652,654,657,660],{"class":452,"line":653},9,[450,655,656],{"class":529},"    }",[450,658,659],{"class":533},")",[450,661,633],{"class":529},[450,663,665,668],{"class":452,"line":664},10,[450,666,667],{"class":533},"  ]",[450,669,633],{"class":529},[450,671,673,676],{"class":452,"line":672},11,[450,674,675],{"class":529},"}",[450,677,678],{"class":533},")\n",[398,680,681],{},"That's it. The plugin automatically:",[683,684,685,693],"ul",{},[686,687,688,689,692],"li",{},"Initializes the logger at compile time (no ",[402,690,691],{},"initLogger()"," call needed)",[686,694,695,696,699],{},"Strips ",[402,697,698],{},"log.debug()"," calls from production builds",[428,701,703],{"id":702},"features","Features",[705,706],"vite-strip-build",{},[398,708,709,710,712,713,716,717,719,720,723],{},"The plugin transforms your source at build time — ",[402,711,698],{}," calls are deleted from the output, ",[402,714,715],{},"__source: 'file:line'"," is injected into object-form log calls, and ",[402,718,691],{}," is wired in via Vite's ",[402,721,722],{},"define"," hook so you never have to call it yourself.",[432,725,727],{"id":726},"auto-initialization","Auto-initialization",[398,729,730,731,733,734,737,738,737,741,737,744,737,747,750,751,754,755,737,758,750,761,764,765,767],{},"The plugin injects logger configuration at compile time via Vite's ",[402,732,722],{}," hook. The ",[402,735,736],{},"service",", ",[402,739,740],{},"environment",[402,742,743],{},"pretty",[402,745,746],{},"silent",[402,748,749],{},"enabled",", and ",[402,752,753],{},"sampling"," options are serialized and injected at build time, so ",[402,756,757],{},"log",[402,759,760],{},"createLogger()",[402,762,763],{},"createRequestLogger()"," work immediately without an ",[402,766,691],{}," call.",[432,769,771],{"id":770},"debug-stripping","Debug stripping",[398,773,774,775,777],{},"By default, all ",[402,776,698],{}," calls are removed from production builds. This is a compile-time transformation, the calls are completely eliminated from the output, not just silenced.",[440,779,781],{"className":516,"code":780,"filename":513,"language":518,"meta":446,"style":446},"evlog({\n  service: 'my-api',\n  \u002F\u002F Default: strip debug logs in production builds\n  \u002F\u002F strip: ['debug'],\n\n  \u002F\u002F Strip debug and info in production:\n  \u002F\u002F strip: ['debug', 'info'],\n\n  \u002F\u002F Disable stripping:\n  \u002F\u002F strip: [],\n})\n",[402,782,783,792,807,813,818,822,827,832,836,841,846],{"__ignoreMap":446},[450,784,785,788,790],{"class":452,"line":453},[450,786,787],{"class":585},"evlog",[450,789,588],{"class":533},[450,791,591],{"class":529},[450,793,794,797,799,801,803,805],{"class":452,"line":552},[450,795,796],{"class":597},"  service",[450,798,601],{"class":529},[450,800,543],{"class":529},[450,802,627],{"class":459},[450,804,630],{"class":529},[450,806,633],{"class":529},[450,808,809],{"class":452,"line":569},[450,810,812],{"class":811},"sHwdD","  \u002F\u002F Default: strip debug logs in production builds\n",[450,814,815],{"class":452,"line":576},[450,816,817],{"class":811},"  \u002F\u002F strip: ['debug'],\n",[450,819,820],{"class":452,"line":594},[450,821,573],{"emptyLinePlaceholder":572},[450,823,824],{"class":452,"line":607},[450,825,826],{"class":811},"  \u002F\u002F Strip debug and info in production:\n",[450,828,829],{"class":452,"line":617},[450,830,831],{"class":811},"  \u002F\u002F strip: ['debug', 'info'],\n",[450,833,834],{"class":452,"line":636},[450,835,573],{"emptyLinePlaceholder":572},[450,837,838],{"class":452,"line":653},[450,839,840],{"class":811},"  \u002F\u002F Disable stripping:\n",[450,842,843],{"class":452,"line":664},[450,844,845],{"class":811},"  \u002F\u002F strip: [],\n",[450,847,848,850],{"class":452,"line":672},[450,849,675],{"class":529},[450,851,678],{"class":533},[398,853,854,855,858,859,862],{},"Stripping only activates during ",[402,856,857],{},"vite build"," (not ",[402,860,861],{},"vite dev",").",[432,864,866],{"id":865},"source-location-injection","Source location injection",[398,868,869,870,872],{},"When enabled, the plugin injects ",[402,871,715],{}," into object-form log calls so you know exactly which file and line produced each log entry.",[440,874,876],{"className":516,"code":875,"filename":513,"language":518,"meta":446,"style":446},"evlog({\n  service: 'my-api',\n  sourceLocation: true,      \u002F\u002F Always inject\n  \u002F\u002F sourceLocation: 'dev',  \u002F\u002F Only in development\n})\n",[402,877,878,886,900,917,925],{"__ignoreMap":446},[450,879,880,882,884],{"class":452,"line":453},[450,881,787],{"class":585},[450,883,588],{"class":533},[450,885,591],{"class":529},[450,887,888,890,892,894,896,898],{"class":452,"line":552},[450,889,796],{"class":597},[450,891,601],{"class":529},[450,893,543],{"class":529},[450,895,627],{"class":459},[450,897,630],{"class":529},[450,899,633],{"class":529},[450,901,902,905,907,911,914],{"class":452,"line":569},[450,903,904],{"class":597},"  sourceLocation",[450,906,601],{"class":529},[450,908,910],{"class":909},"sfNiH"," true",[450,912,913],{"class":529},",",[450,915,916],{"class":811},"      \u002F\u002F Always inject\n",[450,918,919,922],{"class":452,"line":576},[450,920,921],{"class":811},"  \u002F\u002F sourceLocation: 'dev',",[450,923,924],{"class":811},"  \u002F\u002F Only in development\n",[450,926,927,929],{"class":452,"line":594},[450,928,675],{"class":529},[450,930,678],{"class":533},[432,932,934],{"id":933},"auto-imports-opt-in","Auto-imports (opt-in)",[398,936,937,938,737,940,737,943,946],{},"Automatically detect and import evlog symbols (",[402,939,757],{},[402,941,942],{},"createEvlogError",[402,944,945],{},"parseError",", etc.) without manual import statements. Disabled by default.",[440,948,950],{"className":516,"code":949,"filename":513,"language":518,"meta":446,"style":446},"evlog({\n  service: 'my-api',\n  autoImports: true,\n})\n",[402,951,952,960,974,985],{"__ignoreMap":446},[450,953,954,956,958],{"class":452,"line":453},[450,955,787],{"class":585},[450,957,588],{"class":533},[450,959,591],{"class":529},[450,961,962,964,966,968,970,972],{"class":452,"line":552},[450,963,796],{"class":597},[450,965,601],{"class":529},[450,967,543],{"class":529},[450,969,627],{"class":459},[450,971,630],{"class":529},[450,973,633],{"class":529},[450,975,976,979,981,983],{"class":452,"line":569},[450,977,978],{"class":597},"  autoImports",[450,980,601],{"class":529},[450,982,910],{"class":909},[450,984,633],{"class":529},[450,986,987,989],{"class":452,"line":576},[450,988,675],{"class":529},[450,990,678],{"class":533},[398,992,993],{},"When enabled, the plugin:",[995,996,997,1000,1006],"ol",{},[686,998,999],{},"Scans your code for evlog symbols",[686,1001,1002,1003,1005],{},"Adds the correct ",[402,1004,526],{}," statements automatically",[686,1007,1008,1009,1012],{},"Generates a ",[402,1010,1011],{},".d.ts"," file for TypeScript support",[407,1014,1017,1018,1020,1021,1024,1025,1027,1028,1030,1031,1033],{"color":1015,"icon":1016},"amber","i-lucide-triangle-alert","The auto-imported error constructor is ",[402,1019,942],{},", not ",[402,1022,1023],{},"createError",". This avoids conflicts with framework-native ",[402,1026,1023],{}," (Nuxt, Nitro, h3). The standalone ",[402,1029,1023],{}," from ",[402,1032,787],{}," is still available via explicit import.",[432,1035,1037],{"id":1036},"client-side-injection","Client-side injection",[398,1039,1040,1041,1044,1045,1048,1049,737,1052,1055],{},"When the ",[402,1042,1043],{},"client"," option is provided, the plugin injects a ",[402,1046,1047],{},"\u003Cscript>"," tag into HTML pages that initializes the client-side logger. This enables ",[402,1050,1051],{},"log.info()",[402,1053,1054],{},"log.error()",", etc. in browser code.",[440,1057,1059],{"className":516,"code":1058,"filename":513,"language":518,"meta":446,"style":446},"evlog({\n  service: 'my-api',\n  client: {\n    console: false,\n    transport: {\n      enabled: true,\n      endpoint: '\u002Fapi\u002F_evlog\u002Fingest',\n    },\n  },\n})\n",[402,1060,1061,1069,1083,1093,1105,1114,1125,1141,1146,1151],{"__ignoreMap":446},[450,1062,1063,1065,1067],{"class":452,"line":453},[450,1064,787],{"class":585},[450,1066,588],{"class":533},[450,1068,591],{"class":529},[450,1070,1071,1073,1075,1077,1079,1081],{"class":452,"line":552},[450,1072,796],{"class":597},[450,1074,601],{"class":529},[450,1076,543],{"class":529},[450,1078,627],{"class":459},[450,1080,630],{"class":529},[450,1082,633],{"class":529},[450,1084,1085,1088,1090],{"class":452,"line":569},[450,1086,1087],{"class":597},"  client",[450,1089,601],{"class":529},[450,1091,1092],{"class":529}," {\n",[450,1094,1095,1098,1100,1103],{"class":452,"line":576},[450,1096,1097],{"class":597},"    console",[450,1099,601],{"class":529},[450,1101,1102],{"class":909}," false",[450,1104,633],{"class":529},[450,1106,1107,1110,1112],{"class":452,"line":594},[450,1108,1109],{"class":597},"    transport",[450,1111,601],{"class":529},[450,1113,1092],{"class":529},[450,1115,1116,1119,1121,1123],{"class":452,"line":607},[450,1117,1118],{"class":597},"      enabled",[450,1120,601],{"class":529},[450,1122,910],{"class":909},[450,1124,633],{"class":529},[450,1126,1127,1130,1132,1134,1137,1139],{"class":452,"line":617},[450,1128,1129],{"class":597},"      endpoint",[450,1131,601],{"class":529},[450,1133,543],{"class":529},[450,1135,1136],{"class":459},"\u002Fapi\u002F_evlog\u002Fingest",[450,1138,630],{"class":529},[450,1140,633],{"class":529},[450,1142,1143],{"class":452,"line":636},[450,1144,1145],{"class":529},"    },\n",[450,1147,1148],{"class":452,"line":653},[450,1149,1150],{"class":529},"  },\n",[450,1152,1153,1155],{"class":452,"line":664},[450,1154,675],{"class":529},[450,1156,678],{"class":533},[428,1158,170],{"id":1159},"configuration",[1161,1162,1163,1182],"table",{},[1164,1165,1166],"thead",{},[1167,1168,1169,1173,1176,1179],"tr",{},[1170,1171,1172],"th",{},"Option",[1170,1174,1175],{},"Type",[1170,1177,1178],{},"Default",[1170,1180,1181],{},"Description",[1183,1184,1185,1205,1221,1241,1259,1276,1295,1313,1331,1354],"tbody",{},[1167,1186,1187,1192,1197,1202],{},[1188,1189,1190],"td",{},[402,1191,736],{},[1188,1193,1194],{},[402,1195,1196],{},"string",[1188,1198,1199],{},[402,1200,1201],{},"'app'",[1188,1203,1204],{},"Service name in logs",[1167,1206,1207,1211,1215,1218],{},[1188,1208,1209],{},[402,1210,740],{},[1188,1212,1213],{},[402,1214,1196],{},[1188,1216,1217],{},"Auto-detected",[1188,1219,1220],{},"Environment name",[1167,1222,1223,1227,1232,1238],{},[1188,1224,1225],{},[402,1226,743],{},[1188,1228,1229],{},[402,1230,1231],{},"boolean",[1188,1233,1234,1237],{},[402,1235,1236],{},"true"," in dev",[1188,1239,1240],{},"Pretty print logs",[1167,1242,1243,1247,1251,1256],{},[1188,1244,1245],{},[402,1246,746],{},[1188,1248,1249],{},[402,1250,1231],{},[1188,1252,1253],{},[402,1254,1255],{},"false",[1188,1257,1258],{},"Suppress console output",[1167,1260,1261,1265,1269,1273],{},[1188,1262,1263],{},[402,1264,749],{},[1188,1266,1267],{},[402,1268,1231],{},[1188,1270,1271],{},[402,1272,1236],{},[1188,1274,1275],{},"Enable\u002Fdisable all logging",[1167,1277,1278,1282,1287,1292],{},[1188,1279,1280],{},[402,1281,421],{},[1188,1283,1284],{},[402,1285,1286],{},"LogLevel[]",[1188,1288,1289],{},[402,1290,1291],{},"['debug']",[1188,1293,1294],{},"Log levels to remove from production builds",[1167,1296,1297,1301,1306,1310],{},[1188,1298,1299],{},[402,1300,425],{},[1188,1302,1303],{},[402,1304,1305],{},"boolean | 'dev'",[1188,1307,1308],{},[402,1309,1255],{},[1188,1311,1312],{},"Inject source file:line into log calls",[1167,1314,1315,1320,1324,1328],{},[1188,1316,1317],{},[402,1318,1319],{},"autoImports",[1188,1321,1322],{},[402,1323,1231],{},[1188,1325,1326],{},[402,1327,1255],{},[1188,1329,1330],{},"Auto-import evlog symbols",[1167,1332,1333,1337,1342,1345],{},[1188,1334,1335],{},[402,1336,1043],{},[1188,1338,1339],{},[402,1340,1341],{},"object",[1188,1343,1344],{},"—",[1188,1346,1347,1348,737,1351,659],{},"Client-side injection config (",[402,1349,1350],{},"console",[402,1352,1353],{},"transport",[1167,1355,1356,1360,1364,1366],{},[1188,1357,1358],{},[402,1359,753],{},[1188,1361,1362],{},[402,1363,1341],{},[1188,1365,1344],{},[1188,1367,1368],{},"Head\u002Ftail sampling rates",[428,1370,1372],{"id":1371},"nuxt-integration","Nuxt Integration",[398,1374,1375,1376,422,1378,1380,1381,601],{},"The Nuxt module exposes ",[402,1377,421],{},[402,1379,425],{}," directly in ",[402,1382,1383],{},"nuxt.config.ts",[440,1385,1387],{"className":516,"code":1386,"filename":1383,"language":518,"meta":446,"style":446},"export default defineNuxtConfig({\n  modules: ['evlog\u002Fnuxt'],\n  evlog: {\n    env: { service: 'my-app' },\n    strip: ['debug'],           \u002F\u002F Default\n    sourceLocation: 'dev',      \u002F\u002F Inject in dev only\n  },\n})\n",[402,1388,1389,1402,1423,1432,1456,1479,1498,1502],{"__ignoreMap":446},[450,1390,1391,1393,1395,1398,1400],{"class":452,"line":453},[450,1392,579],{"class":525},[450,1394,582],{"class":525},[450,1396,1397],{"class":585}," defineNuxtConfig",[450,1399,588],{"class":533},[450,1401,591],{"class":529},[450,1403,1404,1407,1409,1412,1414,1416,1418,1421],{"class":452,"line":552},[450,1405,1406],{"class":597},"  modules",[450,1408,601],{"class":529},[450,1410,1411],{"class":533}," [",[450,1413,630],{"class":529},[450,1415,417],{"class":459},[450,1417,630],{"class":529},[450,1419,1420],{"class":533},"]",[450,1422,633],{"class":529},[450,1424,1425,1428,1430],{"class":452,"line":569},[450,1426,1427],{"class":597},"  evlog",[450,1429,601],{"class":529},[450,1431,1092],{"class":529},[450,1433,1434,1437,1439,1441,1444,1446,1448,1451,1453],{"class":452,"line":576},[450,1435,1436],{"class":597},"    env",[450,1438,601],{"class":529},[450,1440,530],{"class":529},[450,1442,1443],{"class":597}," service",[450,1445,601],{"class":529},[450,1447,543],{"class":529},[450,1449,1450],{"class":459},"my-app",[450,1452,630],{"class":529},[450,1454,1455],{"class":529}," },\n",[450,1457,1458,1461,1463,1465,1467,1470,1472,1474,1476],{"class":452,"line":594},[450,1459,1460],{"class":597},"    strip",[450,1462,601],{"class":529},[450,1464,1411],{"class":533},[450,1466,630],{"class":529},[450,1468,1469],{"class":459},"debug",[450,1471,630],{"class":529},[450,1473,1420],{"class":533},[450,1475,913],{"class":529},[450,1477,1478],{"class":811},"           \u002F\u002F Default\n",[450,1480,1481,1484,1486,1488,1491,1493,1495],{"class":452,"line":607},[450,1482,1483],{"class":597},"    sourceLocation",[450,1485,601],{"class":529},[450,1487,543],{"class":529},[450,1489,1490],{"class":459},"dev",[450,1492,630],{"class":529},[450,1494,913],{"class":529},[450,1496,1497],{"class":811},"      \u002F\u002F Inject in dev only\n",[450,1499,1500],{"class":452,"line":617},[450,1501,1150],{"class":529},[450,1503,1504,1506],{"class":452,"line":636},[450,1505,675],{"class":529},[450,1507,678],{"class":533},[428,1509,1511],{"id":1510},"vite-compatibility","Vite Compatibility",[398,1513,1514,1515,1518,1519,1522,1523,422,1526,1529],{},"The plugin supports ",[411,1516,1517],{},"Vite 7+"," and is optimized for ",[411,1520,1521],{},"Vite 8"," (Rolldown). On Vite 8, transform hooks use Rolldown-native ",[402,1524,1525],{},"filter",[402,1527,1528],{},"moduleType"," for maximum performance, non-matching files are skipped entirely on the Rust side without crossing the JS bridge.",[1531,1532,1533],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}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 .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 .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}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}",{"title":446,"searchDepth":552,"depth":552,"links":1535},[1536,1541,1548,1549,1550],{"id":430,"depth":552,"text":20,"children":1537},[1538,1539],{"id":434,"depth":569,"text":435},{"id":509,"depth":569,"text":1540},"2. Add to vite.config.ts",{"id":702,"depth":552,"text":703,"children":1542},[1543,1544,1545,1546,1547],{"id":726,"depth":569,"text":727},{"id":770,"depth":569,"text":771},{"id":865,"depth":569,"text":866},{"id":933,"depth":569,"text":934},{"id":1036,"depth":569,"text":1037},{"id":1159,"depth":552,"text":170},{"id":1371,"depth":552,"text":1372},{"id":1510,"depth":552,"text":1511},"Build-time optimizations for any Vite-based framework. Auto-init, debug stripping, source location injection, and optional auto-imports.","md",[1554],{"label":1555,"icon":1556,"to":1557,"color":1558,"variant":1559},"Source Code","i-simple-icons-github","https:\u002F\u002Fgithub.com\u002Fhugorcd\u002Fevlog\u002Ftree\u002Fmain\u002Fpackages\u002Fevlog\u002Fsrc\u002Fvite","neutral","subtle",{},{"icon":195},{"title":192,"description":1551},"fTEwYzgoQFbwH0Wyzs30hnx0ROwbyqB5CGCcsX1LdpI",[1565,1567],{"title":123,"path":189,"stem":190,"description":1566,"icon":126,"children":-1},"evlog adds ~3µs per request. Faster than pino, consola, and winston in most scenarios while emitting richer, more useful events.",{"title":197,"path":198,"stem":199,"description":1568,"icon":200,"children":-1},"Automatically scrub PII from wide events before console output and drains. Built-in smart masking for credit cards, emails, IPs, phone numbers, JWTs, and more.",1778106394712]