情報アイランド

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

Node.js+winstonで独自の出力先を作成する

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

  • log
  • npmlog
  • bunyan
  • winston
  • log4js

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

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

独自の出力先

winstonモジュールで独自の出力先を作成するにはwinston.Transportクラスの派生クラスを作成します。

winston.Transportクラスのコンストラクタの第1引数にはオプションをオブジェクトとして指定します。

また、ログの出力を行うlog関数を実装します。この関数の第1引数はレベルであり、第2引数はメッセージであり、第3引数はメタデータであり、第4引数はコールバック関数です。出力処理が完了した場合や出力処理の実行中にエラーが発生した場合には必ずこのコールバック関数を呼び出さなければなりません。このコールバック関数の第1引数にはエラーオブジェクト(エラーが発生しなかった場合にはnull)を指定し、第2引数には出力が成功したかを真偽値として指定します。

var winston = require('winston');
var util = require('util');

function Xxx (option) {
    winston.Transport.call(this, option);
};
util.inherits(Xxx, winston.Transport);
Xxx.prototype.log = function (level, msg, meta, callback) {
    callback(null, true);
    //or
    callback(null, false);
    //or
    callback(new Error('zzz'), null);
};

サンプルコード1

winston-transport.js

var winston = require('winston');
var util = require('util');

function MyLogger (option) {
    winston.Transport.call(this, option);
};
util.inherits(MyLogger, winston.Transport);
MyLogger.prototype.log = function (level, msg, meta, callback) {
    console.log('this is from my logger - ' + msg);
    callback(null, true);
};

var mylog = new winston.Logger({
    transports: [
        new MyLogger({
            name: 'my', 
            level: 'debug'
        })
    ]
});

mylog.error('error.');
mylog.warn('warn.');
mylog.info('info.');
mylog.verbose('verbose.');
mylog.debug('debug.');
mylog.silly('silly.');

使用パッケージ

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

実行結果

C:\work\node>node winston-transport.js
this is from my logger - error.
this is from my logger - warn.
this is from my logger - info.
this is from my logger - verbose.
this is from my logger - debug.

関連

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

-Node.js