Fix: Invalid logLevel Option in Nuxt

Error message:
Invalid `logLevel` option: {value}. Must be one of: silent, error, warn, info, verbose.
initialization 2025-01-25

What Causes This Error?

This error occurs when you configure an invalid log level in your Nuxt configuration. Nuxt only accepts specific log level values.

The Problem

// nuxt.config.ts
export default defineNuxtConfig({
  // ❌ Wrong - invalid log levels
  logLevel: 'debug',
  logLevel: 'all',
  logLevel: 'trace',
  logLevel: 'none',
  logLevel: 3,  // Numbers don't work
})

The Fix

Use Valid Log Levels

// nuxt.config.ts
export default defineNuxtConfig({
  // ✅ Valid options
  logLevel: 'silent',   // No output
  logLevel: 'error',    // Only errors
  logLevel: 'warn',     // Errors and warnings
  logLevel: 'info',     // Default - errors, warnings, info
  logLevel: 'verbose',  // Everything
})

Log Levels Explained

LevelShowsUse Case
silentNothingCI/CD, production
errorErrors onlyProduction
warnErrors + warningsProduction
info+ Info messagesDevelopment (default)
verboseEverythingDebugging

Environment-Based Logging

// nuxt.config.ts
export default defineNuxtConfig({
  logLevel: process.env.NODE_ENV === 'production' ? 'warn' : 'verbose'
})

Or using environment variables:

# .env
NUXT_LOG_LEVEL=verbose
// nuxt.config.ts
export default defineNuxtConfig({
  logLevel: process.env.NUXT_LOG_LEVEL || 'info'
})

CLI Override

# Override via CLI
npx nuxi dev --log-level verbose
npx nuxi build --log-level error

Nitro Log Level

// nuxt.config.ts
export default defineNuxtConfig({
  nitro: {
    logLevel: 'info'  // Same options: silent, error, warn, info, verbose
  }
})

Vite Log Level

// nuxt.config.ts
export default defineNuxtConfig({
  vite: {
    logLevel: 'info'  // Vite uses: 'silent' | 'error' | 'warn' | 'info'
  }
})

Debug Mode

For more detailed debugging:

# Enable debug mode
DEBUG=nuxt:* npx nuxi dev

# Specific namespaces
DEBUG=nuxt:vite npx nuxi dev
DEBUG=nitro:* npx nuxi dev

Custom Logging

// nuxt.config.ts
export default defineNuxtConfig({
  hooks: {
    'build:before'() {
      // Use consola for consistent logging
      console.log('Build starting...')
    }
  }
})

Or use consola directly:

import { consola } from 'consola'

// Set log level programmatically
consola.level = 4  // 0=silent, 1=error, 2=warn, 3=info, 4=debug, 5=trace

TypeScript Type

// Valid type definition
type LogLevel = 'silent' | 'error' | 'warn' | 'info' | 'verbose'

export default defineNuxtConfig({
  logLevel: 'info' as LogLevel
})

CI/CD Configuration

# GitHub Actions
jobs:
  build:
    steps:
      - name: Build
        run: npx nuxi build
        env:
          NUXT_LOG_LEVEL: error  # Quieter CI output

Quick Reference

// nuxt.config.ts
export default defineNuxtConfig({
  // Main Nuxt log level
  logLevel: 'info',

  // Server (Nitro) log level
  nitro: {
    logLevel: 'info'
  },

  // Build tool (Vite) log level
  vite: {
    logLevel: 'warn'
  }
})

Troubleshooting Silent Mode

If logs aren’t showing:

// Check current log level
console.log('NODE_ENV:', process.env.NODE_ENV)
console.log('Log level:', process.env.NUXT_LOG_LEVEL)

// Force console output (bypasses log level)
process.stdout.write('Direct output\n')

Quick Checklist

  • Use only: silent, error, warn, info, verbose
  • Check spelling and case (lowercase required)
  • Use string values, not numbers
  • Consider environment-based configuration
  • Use DEBUG=nuxt:* for detailed debugging
  • Check Nitro and Vite log levels separately