私は、このデバッグロギング機能がほぼすべてのロジックを処理するvisionmedia's debug
moduleを使用していることに注意しています。
実行時に動的にパターンを変更できますか?
どのモジュールがロードされているまあ前に、私はちょうど環境変数を操作することであると信じて最も安全で最良の方法:
if (process.env.NODE_ENV === 'development') {
process.env.DEBUG = process.env.DEBUG + ',loopback:*';
}
debug
をロードし、それが.enable
方法の使用には、もう一つの方法は、次のようになります。
require('debug').enable('loopabck:*');
しかし、Loopbackが必要になる前にこれを行うのは、インスタンスが作成される前にのみ変更が許可されるためです。この場合、lo opbackが読み込まれます。別のことは、依存関係とパッケージマネージャ(npm @ 3、npm @ 2と糸の動作が異なる)に応じて、複数のデバッグモジュールがインストールされている可能性があります。 debug
がnode_modulesディレクトリにあるか、各モジュールのnode_modulesディレクトリにループバックされている可能性があります。このようにしたい場合は、すべてのインスタンスを必要とし、有効にしてください。
スタートアップ時に実行したくない場合、ウェルAPIは実行時に変更を許可しません。このhereに関するディスカッションを閲覧することができます。それを回避するにはいくつかの汚い方法がありますが、将来的にこれらが壊れる可能性があるので注意してください。
はまず、おそらくまた、以前に作成したインスタンス上require('debug').enable
作業を行いhot-debugと呼ばれるモジュールがありますが、私はそれをしようとしたとき、それは完全に動作しませんでしたし、それはバグだらけだったが、それはそれはあなたのために正常に動作可能性があることが可能です。
これがうまくいかない場合は、require('debug').log
メソッドをオーバーライドする方法があります。これが定義されている場合、debug
は、フォーマットされた引数を使用してconsole.log
の代わりにこのメソッドを呼び出します。あなたはDEBUG=*
を設定し、それを自分でフィルタリングすることができますなど、すべてのデバッグ出力が何もコンソールに出力されないかもしれないにもかかわらず、濾過する前にフォーマットされますけれども
require('debug').log = function (string) {
if (string.contains('loopback:security')) {
console.log(string);
}
};
この方法では、生産が遅くなります。
require('debug').init
メソッドを上書きするもう1つのこと。これは、新しいデバッグインスタンスが作成されるたびに呼び出されます。 debug
のインスタンスはすべてenabled
プロパティを使用して、有効になっているかどうかをチェックするので、それを切り替えることができます。
const debug = require('debug');
const { init } = debug;
const instances = [];
debug.init = function(debugInstance) {
init(debugInstance);
instances.push(debugInstance);
};
// You can call this function later to enable a given namespace like loopback.security.acl
function enableNamespace(namespace) {
instances.forEach(instance => {
instance.enabled = instance.namespace === namespace;
});
}
これには多くの改善がありますが、あなたはそのアイデアを得ることができます。
詳細な回答ありがとうございます。いくつかの異なるソリューションが含まれていますが、正解とマークします。個人的に環境変数を操作する私のためには完璧に動作します。 – Serg
ようこそ、異なるユースケースのために、さまざまなソリューションがあります。 –