芽萌丸プログラミング部 @programming
@programming
2020/5/12 17:04 更新✏

簡単設定&高パフォーマンスなsimple-node-logger

Node.jsのnpmパッケージにsimple-node-loggerというロガーモジュールがあります。 simple-node-loggerは設定がとても簡単で即席で導入しやすいロガーです。 また、ログ出力時のイベントループのブロッキング時間も極めて短く、パフォーマンス面でも優秀なロガーです。

以下は、simple-node-loggerの使い方とパフォーマンス検証用のコードです。

目次

前提

検証コード

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 を利用するのは良い選択だと思います。ちょっとしたログを取りたい場面などで重宝しそうです。

関連

Node.js

芽萌丸プログラミング部 @programming
芽萌丸プログラミング部@programming
プログラミング関連アカウント。Web標準技術を中心に書いていきます。フロントエンドからサーバサイドまで JavaScript だけで済ませたい人たちの集いです。記事は主に @TanakaSoftwareLab が担当。
オススメ:Zattoyomiで時事ネタチェックの時間節約!