【初心者向け】Node.jsでWinstonライブラリを使ってログにタイムスタンプを追加する方法
Node.jsでWinstonライブラリを使ってログにタイムスタンプを追加する方法
Winstonは、Node.js向けの強力なロギングライブラリです。ログにタイムスタンプを追加することは、ログをデバッグおよび分析する際に非常に役立ちます。このチュートリアルでは、Winstonを使用してログにタイムスタンプを追加する方法を説明します。
手順
- Winstonをインストールする
npm install winston
- ロガーを作成する
const winston = require('winston');
const logger = winston.createLogger({
transports: [
new winston.transports.Console({
format: winston.format.combine(
winston.format.timestamp(),
winston.format.json()
)
})
]
});
上記のコードは、コンソールにログを出力するロガーを作成します。 winston.format.timestamp()
フォーマッターは、ログメッセージにタイムスタンプを追加します。 winston.format.json()
フォーマッターは、ログメッセージをJSON形式で出力します。
- ログを記録する
logger.info('Hello, world!');
logger.error('An error occurred.');
上記のコードは、info
レベルと error
レベルのログメッセージを記録します。 各ログメッセージには、タイムスタンプが含まれます。
- ログメッセージにフォーマットされた日時を含めるには、
winston.format.prettyPrint()
フォーマッターを使用することもできます。 - ログをファイルに記録するには、
winston.transports.File()
トランスポートを使用します。 - ログメッセージにレベルを追加するには、
winston.format.level()
フォーマッターを使用します。
const winston = require('winston');
const logger = winston.createLogger({
transports: [
new winston.transports.Console({
format: winston.format.combine(
winston.format.timestamp({
format: 'YYYY-MM-DD HH:mm:ss'
}),
winston.format.json()
)
})
]
});
logger.info('Hello, world!');
logger.error('An error occurred.');
説明
- このコードは、コンソールにログを出力するロガーを作成します。
winston.format.timestamp()
フォーマッターは、ログメッセージにタイムスタンプを追加します。format
オプションを使用して、タイムスタンプの形式を指定できます。 この例では、タイムスタンプはYYYY-MM-DD HH:mm:ss
形式で出力されます。winston.format.json()
フォーマッターは、ログメッセージをJSON形式で出力します。logger.info()
メソッドは、info
レベルのログメッセージを記録します。
実行方法
このコードを実行するには、次のコマンドを実行します。
node index.js
上記のコマンドを実行すると、次の出力がコンソールに表示されます。
{"level":"info","message":"Hello, world!","timestamp":"2024-07-06T09:24:00.000Z"}
{"level":"error","message":"An error occurred.","timestamp":"2024-07-06T09:24:00.000Z"}
simple-timestamp
フォーマッターは、軽量で使いやすいタイムスタンプフォーマッターです。 以下のコード例をご覧ください。
const winston = require('winston');
const simpleTimestamp = require('simple-timestamp');
const logger = winston.createLogger({
transports: [
new winston.transports.Console({
format: winston.format.combine(
winston.format.timestamp({ format: simpleTimestamp }),
winston.format.json()
)
})
]
});
logger.info('Hello, world!');
logger.error('An error occurred.');
ロガーオプションで timestamp オプションを使用する
Winston 3 以降では、logger
オプションで timestamp
オプションを直接使用して、ログメッセージにタイムスタンプを追加できます。 以下のコード例をご覧ください。
const winston = require('winston');
const logger = winston.createLogger({
transports: [
new winston.transports.Console({
timestamp: true,
format: winston.format.json()
})
]
});
logger.info('Hello, world!');
logger.error('An error occurred.');
カスタムフォーマッターを作成する
独自のフォーマット要件がある場合は、カスタムフォーマッターを作成することができます。 以下のコード例は、ログメッセージにミリ秒単位のタイムスタンプを追加するカスタムフォーマッターを示しています。
const winston = require('winston');
const myTimestamp = () => {
const now = new Date();
return now.getFullYear() + '-' +
(now.getMonth() + 1).toString().padStart(2, '0') + '-' +
now.getDate().toString().padStart(2, '0') + ' ' +
now.getHours().toString().padStart(2, '0') + ':' +
now.getMinutes().toString().padStart(2, '0') + ':' +
now.getSeconds().toString().padStart(2, '0') + '.' +
now.getMilliseconds().toString().padStart(3, '0');
};
const logger = winston.createLogger({
transports: [
new winston.transports.Console({
format: winston.format.combine(
winston.format.timestamp({ format: myTimestamp }),
winston.format.json()
)
})
]
});
logger.info('Hello, world!');
logger.error('An error occurred.');
Winston で Node.js ログにタイムスタンプを追加するには、さまざまな方法があります。 上記の例は、ニーズに合った方法を選択するための出発点となるでしょう。
- ログレベルを使用して、ログメッセージの詳細度を制御できます。
- 複数のトランスポートを使用して、ログをさまざまな場所に記録できます。
- カスタムフォーマッターを使用して、ログメッセージのレイアウトをカスタマイズできます。
node.js logging winston