【保存版】Node.jsのログ出力:ロギングモジュール、環境変数、リダイレクトを使いこなす
Node.js のログファイルの場所
ログの確認方法
ログを確認するには、いくつかの方法があります。
- コンソール: アプリケーションを実行すると、ログメッセージがコンソールに表示されます。
- ファイルへのリダイレクト:
>
演算子を使用して、ログメッセージをファイルにリダイレクトできます。例えば、次のコマンドを実行すると、output.log
ファイルにログが保存されます。
node my-app.js > output.log
- ロギングモジュールを使用する: Winston や Bunyan などのロギングモジュールを使用すると、ログのフォーマットや保存場所をより詳細に制御できます。
ログファイルのデフォルトの場所
一部のロギングモジュールは、デフォルトで特定の場所にログファイルを保存するように設定されています。例えば、New Relic エージェントは、newrelic_agent.log
という名前のログファイルを現在の作業ディレクトリに保存します。
ログファイルの場所を変更する方法
ロギングモジュールを使用している場合は、そのモジュールのドキュメントを参照して、ログファイルの場所を変更する方法を確認してください。ロギングモジュールを使用していない場合は、以下の方法でログファイルの場所を変更できます。
- process.env.NODE_ENV 環境変数を使用する:
process.env.NODE_ENV
環境変数がproduction
に設定されている場合、Node.js はログメッセージをstderr
ではなくfile
に出力します。ログファイルの場所は、process.env.NODE_LOGFILE
環境変数で指定できます。
ログファイルには、通常、次の情報が含まれています。
- タイムスタンプ
- ログレベル (INFO、WARN、ERROR など)
- メッセージ
- スタックトレース (エラーの場合)
ログファイルの重要性
ログファイルは、アプリケーションの動作をデバッグおよびトラブルシューティングするのに役立ちます。ログファイルを確認することで、アプリケーションで発生している問題を特定し、その原因を突き止めることができます。
const winston = require('winston');
const { createLogger, format, transports } = winston;
const logger = createLogger({
level: 'info',
format: combine(
format.timestamp(),
format.json(),
),
transports: [
new transports.File({ filename: 'app.log' }),
],
});
logger.info('Application started');
// Some code that generates log messages
logger.info('Processing request');
logger.warn('Potential issue detected');
logger.error('An error occurred');
logger.end();
このコードでは、次のことが行われます。
winston
モジュールをインポートします。createLogger
関数を使用して、ロガーを作成します。level
オプションを使用して、ログレベルを設定します。この例では、info
レベル以上のメッセージのみがログに記録されます。format
オプションを使用して、ログメッセージのフォーマットを設定します。この例では、ログメッセージにタイムスタンプと JSON 形式のデータが含まれます。transports
オプションを使用して、ログメッセージを送信する場所を設定します。この例では、ログメッセージはapp.log
ファイルに保存されます。logger.info()
メソッドを使用して、Application started
というメッセージをログに記録します。- アプリケーションのロジックを実行します。
- ログメッセージを記録します。
logger.end()
メソッドを使用して、ロガーを閉じます。
このコードは、ロギングモジュール winston
を使用してログをファイルに出力する方法の例です。具体的な要件に応じて、コードをカスタマイズする必要があります。
以下のサンプルコードは、Node.js でコンソールにログを出力する方法を示しています。
console.log('Application started');
// Some code that generates log messages
console.log('Processing request');
console.warn('Potential issue detected');
console.error('An error occurred');
このコードでは、console.log()
メソッドを使用して、ログメッセージをコンソールに出力しています。
Node.js でログを記録するには、さまざまな方法があります。上記のサンプルコードは、ロギングの基本的な方法を示しています。具体的な要件に応じて、コードをカスタマイズする必要があります。
Node.js でログをファイルに出力するその他の方法
process.env.NODE_ENV = production;
process.env.NODE_LOGFILE = 'app.log';
// Run your application
この方法の利点は、コードを変更する必要がないことです。ただし、ログファイルのフォーマットや保存場所を制御することはできません。
stdout をファイルにリダイレクトする
node my-app.js > output.log
カスタムロギング関数を使用する
独自のロギング関数を作成して、ログメッセージをファイルに出力することもできます。
const fs = require('fs');
function logMessage(message) {
const timestamp = new Date().toISOString();
const logEntry = `[${timestamp}] ${message}\n`;
fs.appendFileSync('app.log', logEntry);
}
// Use the logMessage function to log messages
logMessage('Application started');
// Some code that generates log messages
logMessage('Processing request');
logMessage('Potential issue detected');
logMessage('An error occurred');
この方法の利点は、ログファイルのフォーマットや保存場所を完全に制御できます。ただし、コードが複雑になる可能性があります。
適切な方法の選択
- シンプルで使いやすい方法が必要な場合は、
process.env.NODE_ENV
環境変数を使用するか、stdout
をファイルにリダイレクトします。 - ログファイルのフォーマットや保存場所を制御する必要がある場合は、ロギングモジュールを使用するか、カスタムロギング関数を作成します。
node.js