情報アイランド

「情報を制する者は世界を制す」をモットーに様々な情報を提供することを目指すブログです。現在はプログラミング関連情報が多めですが、投資関連情報も取り扱っていきたいです。

Node.js+Bunyanでログに実際に出力する項目を作成する

ログを出力するには下のようなモジュールを利用する方法があります。

  • log
  • npmlog
  • bunyan
  • winston
  • log4js

この記事ではbunyanモジュールを利用する方法を取り上げます。

bunyanモジュールの基本的な使用方法に関しては下の記事を参照してください。

シリアライザ

bunyanモジュールでログに出力する項目として渡されたものから実際に出力する項目を作成するにはbunyan.createLogger関数の第1引数のオプションにserializersオプションを指定します。

serializersオプションには項目を作成する処理をオブジェクトとして指定します。オブジェクトのプロパティ名を項目名とし、プロパティの値を関数とします。

この関数の第1引数はログに出力する項目として渡されたログを表すオブジェクトです。

また、この関数では返り値としてログに実際に出力する項目を返すようにします。

var bunyan = require('bunyan');

var logger = bunyan.createLogger({
    name: 'xxx', 
    serializers: {
        foo: function (foo) {
            return 'yyy';
        }, 
        bar function (bar) {
            return 'zzz';
        }
    }
});

あるいは、logger.addSerializers関数を使用することもできます。

logger.addSerializers({
    foo: function (foo) {
        return 'yyy';
    }, 
    bar function (bar) {
        return 'zzz';
    }
});

第1引数に項目を作成する処理をオブジェクトとして指定します。

標準の関数

bunyanモジュールでは下のような標準の関数が提供されています。

  • bunyan.stdSerializers.err・・・エラーオブジェクト用の関数です。
  • bunyan.stdSerializers.req・・・HTTPリクエストを表すオブジェクト用の関数です。
  • bunyan.stdSerializers.res・・・HTTPレスポンスを表すオブジェクト用の関数です。

サンプルコード1

bunyan-serializers.js

var bunyan = require('bunyan');

var logger = bunyan.createLogger({
    name: 'main', 
    serializers: {
        desu: function (desu) {
            return desu + ' desu.';
        }, 
        desi: function (desi) {
            return desi + ' desi.';
        }, 
        dasu: function (dasu) {
            return dasu + ' dasu.';
        }
    }
});

logger.info({ desu: 100, desi: 200, dasu: 300 }, 'information 1');

使用パッケージ

  • Bunyan
    npm install bunyanでインストールします。

実行結果

C:\work\node>node bunyan-serializers.js
{"name":"main","hostname":"mainnote","pid":2260,"level":30,"desu":"100 desu.","desi":"200 desi.","dasu":"300 dasu.","msg":"information 1","time":"2016-08-22T06:52:15.368Z","v":0}

関連

pizyumi
プログラミング歴19年のベテランプログラマー。業務システム全般何でも作れます。現在はWeb系の技術を勉強中。
スポンサーリンク

-未分類