この記事は最終更新日から1年以上が経過しています。
@programming
投稿日 2020/5/12
更新日 2020/5/12 ✏
簡単設定&高パフォーマンスなsimple-node-logger
Node.jsのnpmパッケージにsimple-node-loggerというロガーモジュールがあります。 simple-node-loggerは設定がとても簡単で即席で導入しやすいロガーです。 また、ログ出力時のイベントループのブロッキング時間も極めて短く、パフォーマンス面でも優秀なロガーです。
以下は、simple-node-loggerの使い方とパフォーマンス検証用のコードです。
目次
前提
- Ubuntu 16.04 LTS
- node v12.16.1
- simple-node-logger v18.12.24
検証コード
simple-node-logger-test.js
const blocked = require("blocked-at");
// EventLoopブロッキング検出用:
blocked((time, stack) => {
console.log(`Blocked for ${time}ms, operation started here:`, stack)
}, {
// 1ミリ秒以上のブロッキングを検出:
threshold: 1,
});
const LOGLEVEL = 'info';
let interval = 0;
// ロガー生成 (output to stdout and file)
const simpleLogger = require('simple-node-logger').createSimpleLogger('simple-node-logger.log');
simpleLogger.setLevel(LOGLEVEL);
// ログ出力
interval += 1000;
setTimeout(() => {
console.log("*** simple-node-logger logging start ...");
simpleLogger.info("simpleLogger log");
}, interval);
interval += 1000;
setTimeout(() => {
simpleLogger.info("simpleLogger log");
}, interval);
interval += 1000;
setTimeout(() => {
simpleLogger.info("simpleLogger log");
}, interval);
require('simple-node-logger').createSimpleLogger('simple-node-logger.log')
で標準出力とファイル出力(simple-node-logger.log というファイルに出力)の両方を行うロガーのインスタンスを生成しています。 標準出力+ファイル出力という割とありきたりなログ設定のために面倒な設定をする必要が無いのが地味に助かります。
実行結果
$ node simple-node-logger-test.js
*** simple-node-logger logging start ...
...
16:32:17.702 INFO simpleLogger log
Blocked for 1.9099149990081787ms, operation started here: [
' at process.nextTick (internal/process/task_queues.js:135:5)',...
]
16:32:18.698 INFO simpleLogger log
16:32:19.698 INFO simpleLogger log
ブロッキングが検出されたのは1回目のログ出力だけで、残りの2回のログ出力でのブロッキングは 1 ms 未満です!
結論
bunyanは処理パフォーマンスが高く、ログもJSON形式なので加工がしやすいですが、bunyanほどリッチなログが必要ないのであれば、設定がシンプルで軽量な simple-node-logger を利用するのは良い選択だと思います。ちょっとしたログを取りたい場面などで重宝しそうです。