Advanced

Logging

Configure module logging for debugging SSR, auth, queries, and real-time subscriptions.

Quick Start

Enable logging in your nuxt.config.ts:

nuxt.config.ts
export default defineNuxtConfig({
  modules: ['better-convex-nuxt'],

  convex: {
    url: process.env.CONVEX_URL,
    logging: 'info',
  },
})

Configuration

OptionTypeDefaultDescription
loggingfalse | 'info' | 'debug'falseLog level. false = no logs, 'info' = canonical events, 'debug' = verbose details

Logging Levels

nuxt.config.ts
convex: {
  // false - No logs (production default)
  // 'info' - Canonical events (plugin init, auth changes, operations)
  // 'debug' - Include debug-level details and timing
  logging: process.env.NODE_ENV === 'development' ? 'debug' : false,
}

Output Format

Logs are styled using ANSI colors (server) and CSS-styled console.log (browser). There is no configurable format option.

[better-convex-nuxt] > plugin:init [ok] client 47ms | url: happy-dog-123.convex.cloud, auth: enabled
[better-convex-nuxt] * auth:change loading -> authenticated | trigger: ssr-hydration, user: abc12345
[better-convex-nuxt] > query [ok] api.users.get 23ms (cached)
[better-convex-nuxt] > mutation [err] api.posts.create 156ms | error: ConvexError "Unauthorized", retriable

Common Debugging Scenarios

SSR Issues

Enable logging and look for plugin:init events on both server and client:

[better-convex-nuxt] > plugin:init [ok] server 120ms | url: happy-dog-123.convex.cloud, auth: enabled
[better-convex-nuxt] > plugin:init [ok] client 47ms | url: happy-dog-123.convex.cloud, auth: enabled

If the server init fails, check your CONVEX_URL environment variable.

Authentication Flow

Track auth state transitions:

[better-convex-nuxt] * auth:change loading -> unauthenticated | trigger: init
[better-convex-nuxt] * auth:change unauthenticated -> authenticated | trigger: login, user: abc12345

Query Performance

Monitor operation timing:

[better-convex-nuxt] > query [ok] api.posts.list 230ms
[better-convex-nuxt] > query [ok] api.posts.list 12ms (cached)

The (cached) indicator shows when data comes from an existing subscription.

Subscription Lifecycle

Track real-time subscription health:

[better-convex-nuxt] ~ subscription api.posts.list subscribed
[better-convex-nuxt] ~ subscription api.posts.list unsubscribed, updates: 15

Connection Issues

Monitor WebSocket connectivity:

[better-convex-nuxt] || connection Connected -> Disconnected
[better-convex-nuxt] || connection Disconnected -> Connected, retry: 2, offline: 3500ms

Production Usage

For production, enable logging only when needed via environment variable:

nuxt.config.ts
export default defineNuxtConfig({
  convex: {
    logging: process.env.CONVEX_LOGGING === 'true' ? 'info' : false,
  },
})

Best Practices

  1. Development: Use logging: 'debug' for maximum visibility
  2. Production: Keep logging: false by default, enable via environment variable when debugging
  3. Performance: Logging is a no-op when disabled - no runtime overhead