9

私は、sockjs を介してどこからでもイベントをクライアントにディスパッチするために使用できる nodejs 用のこのモジュールを作成しました。

ここで、構成可能なロギング メカニズムをいくつか含めたいと思います。

現時点では、winston を依存関係として追加し、各クラスのロガーとしてそれを必要とし、logger.error、logger.warn などを使用しています。

#logger.js
var logger = require('winston');
module.exports=logger;

#myClass
var logger = require("./logger");
logger.error("Something went wrong")

では、ロガーをカスタム ロガーに置き換え可能にする方法、またはユーザーにモジュールの外からログ レベルを設定させる方法を教えてください。

もちろん、ロガーを変更するためにモジュールコードに触れる必要はありませんが、ログレベルでロガーを作成できる必要があり、利用可能な場合、私のモジュールはそれを使用する必要があります。

それを行う方法に関する推奨事項はありますか?

または、「winston」への強い依存関係は問題なく、npm-config でログ レベルを設定できますか?

4

2 に答える 2

7

ウィンストンをまったく含めないことをお勧めします。Winston はかなり巨大で、ユーザーが使用しないかもしれない多くの優れた機能が含まれています。ユーザーが常にすべての機能を使用できるように、モジュールは十分に小さくする必要があると思います。組み込みのロガーを使用したくない場合がある場合は、十分に小さくないと思います。そうは言っても、デバッグに必要なときにモジュールのログを記録すると便利です。

モジュールを使用している開発者がログを使用してモジュールをデバッグする方法が必要な場合は、オン/オフを切り替えることができるデバッグ モードを使用することをお勧めします。

次のようなものを使用して支援できます: https://www.npmjs.org/package/debug

また、ユーザーが独自のログ システムを統合したい場合は、モジュールにログ機能を渡す方法を用意することをお勧めします。このようなもの(モジュールをrock-the-sockと呼びましょう:

var rockTheSock = require('rock-the-sock');
var rockTheSock.logger = function (level, message, metadata) {
    console.log('level :', level, message, metadata); // TODO: Integrate winston
};
rockTheSock.startRocking();

そして、モジュールにはデフォルトのロガーがあり、上記のようにオーバーライドできます。

socket.io は、それがどのように行われるかの良い例です (configure メソッドは実際には必要ありませんが、それは単なるおまけです):

socket.io のデフォルト ロガーをオーバーライドする方法は次のとおりです: https://github.com/LearnBoost/Socket.IO/wiki/Configuring-Socket.IO

ロガーがこのように実装されている場合: https://github.com/LearnBoost/Socket.IO/blob/0.9.14/lib/logger.js

何か問題が発生した場合は、エラーをスローするか、「エラー」イベントを発行するか、エラーでコールバックを呼び出してください (該当する方を実行してください)。黙ってログに記録するのは得策ではありません。報告する場合は、ユーザー コードに処理させます。たぶん、エラーは予期されていたものです (人々があなたのモジュールをどんなクレイジーな方法で使用しているのか、あなたにはわかりません!)。

于 2014-04-04T16:20:37.313 に答える
1

ロガーとしては winston が一番使われていますが、bunyan も広く採用されています。そうです、ユーザーに選択を任せて、ロガーをモジュールに挿入できるようにする必要があります。Elasticsearch クライアント モジュールはこれをうまく解決します。同じようにできます。

于 2014-04-24T21:35:37.363 に答える