brand logo

ドキュメント

ロギング

Nuxt Kit は、ロギングを扱うための一連のユーティリティを提供します。これらの関数を使用すると、追加機能付きでメッセージをログに記録できます。

Nuxt は、追加機能付きでメッセージをログに記録するために使用できるロガーインスタンスを提供します。useLogger を使用すると、ロガーインスタンスを取得できます。

useLogger

ロガーインスタンスを返します。内部では consola を使用しています。

使用法

import { defineNuxtModule, useLogger } from '@nuxt/kit'

export default defineNuxtModule({
  setup (options, nuxt) {
    const logger = useLogger('my-module')

    logger.info('Hello from my module!')
  },
})

function useLogger (tag?: string, options?: Partial<ConsolaOptions>): ConsolaInstance

パラメータ

tag: すべてのログメッセージにサフィックスとして付加されるタグで、タイムスタンプの右側に表示されます。

options: Consola の設定オプション。

import { defineNuxtModule, useLogger } from '@nuxt/kit'

export default defineNuxtModule({
  setup (options, nuxt) {
    const logger = useLogger('my-module', { level: options.quiet ? 0 : 3 })

    logger.info('Hello from my module!')
  },
})

tips

このセクションは公式ドキュメントの翻訳ではなく、本サイト独自の補足記事です。

NuxtのuseLoggerとは?ログ管理の課題を解決する便利なツール

Webアプリケーション開発において、ログは問題の早期発見や動作確認に欠かせない重要な要素です。特にNuxtのようなフレームワークでは、サーバーサイドレンダリング(SSR)とクライアントサイドレンダリング(CSR)が混在するため、ログの管理が複雑になりがちです。

useLoggerは、Nuxt Kitが提供するロギングユーティリティで、開発者が簡単にログを出力し、タグ付けやログレベルの制御を行えるように設計されています。これにより、ログの可読性が向上し、問題の切り分けやデバッグが効率化されます。

本記事では、useLoggerの基本的な使い方から、実務での活用例、注意すべきポイントまでを丁寧に解説します。


まず結論:useLoggerのポイントまとめ

  • 簡単にロガーインスタンスを取得できる
    useLogger('タグ名')でタグ付きのロガーを作成可能。

  • ログレベルや出力形式を柔軟に設定できる
    Consolaのオプションを渡して細かく制御可能。

  • タグ付けによりログの出所が明確になる
    複数モジュールや機能のログを区別しやすい。

  • SSR/CSR両方で動作し、Nuxtの開発体験を向上
    サーバー・クライアント両方のログを一元管理。

  • 過剰なログ出力はパフォーマンス低下の原因になるため注意が必要


いつ使うべきか?使わない方がよいケース

使うべきケース

  • モジュールやプラグイン開発時のログ管理
    複数の機能が混在する環境で、どのログがどの機能由来かを明確にしたい場合。

  • 開発中のデバッグや動作確認
    ログレベルを切り替えながら詳細な情報を取得したいとき。

  • 本番環境でのエラーログ収集
    ログレベルを調整して重要な情報だけを記録し、運用監視に活用。

使わない方がよいケース

  • 単純なコンソールログで十分な小規模プロジェクト
    ログ管理の複雑さが不要な場合は過剰な導入になることも。

  • パフォーマンスが極めて重要なリアルタイム処理
    ログ出力がボトルネックになる可能性があるため、必要最低限に留めるべき。


実務でよくあるユースケースとサンプルコード

1. モジュール開発でのタグ付きログ

複数のモジュールを開発している場合、どのモジュールからのログかをタグで区別すると便利です。

import { defineNuxtModule, useLogger } from '@nuxt/kit'

export default defineNuxtModule({
  setup (options, nuxt) {
    const logger = useLogger('auth-module')

    logger.info('認証モジュールが初期化されました。')
  },
})

2. ログレベルを環境変数で制御

開発環境では詳細ログを出し、本番環境では警告以上のみ出力する例です。

import { defineNuxtModule, useLogger } from '@nuxt/kit'

export default defineNuxtModule({
  setup (options, nuxt) {
    const level = process.env.NODE_ENV === 'production' ? 2 : 4 // 2: warn, 4: debug
    const logger = useLogger('payment', { level })

    logger.debug('支払い処理の詳細ログ')
    logger.warn('支払い処理で警告が発生しました')
  },
})

3. 非同期処理のエラーハンドリングでのログ活用

API呼び出しなど非同期処理の失敗時にログを残すことで、問題解析が容易になります。

import { useLogger } from '@nuxt/kit'

const logger = useLogger('api-client')

async function fetchData() {
  try {
    const res = await fetch('/api/data')
    if (!res.ok) throw new Error('APIエラー')
    return await res.json()
  } catch (error) {
    logger.error('データ取得に失敗しました:', error)
    throw error
  }
}

よくある落とし穴・注意点

SSRとCSRでのログの違いに注意

Nuxtはサーバーサイドとクライアントサイドの両方で動作するため、ログがどちらの環境で出力されているかを意識する必要があります。特にサーバー側のログはサーバーコンソールに、クライアント側はブラウザのコンソールに出力されます。

Hydration時のログの重複に注意

SSRでレンダリングした後、クライアント側でHydrationが行われる際に同じ処理が走ると、ログが重複して出力されることがあります。これを防ぐには、ログ出力のタイミングや環境を条件分岐で制御する工夫が必要です。

過剰なログはパフォーマンスに影響

大量のログを出力すると、特に本番環境でパフォーマンス低下やログファイルの肥大化を招きます。ログレベルを適切に設定し、必要な情報だけを記録することが重要です。

ログの非同期性とタイミング

非同期処理中にログを出す場合、処理の完了前にログが出力されることがあるため、ログの順序や内容に注意してください。


まとめ

NuxtのuseLoggerは、タグ付けやログレベル制御が簡単にできる強力なロギングツールです。モジュール開発やデバッグ、運用監視においてログの可読性と管理性を大幅に向上させます。

ただし、SSR/CSRの違いやHydration時の重複、パフォーマンスへの影響など、使い方には注意が必要です。適切に設定し活用することで、開発効率と品質の向上に大きく貢献するでしょう。

ぜひ本記事のポイントを参考に、Nuxtプロジェクトでのログ管理をより効果的に行ってください。