我使用調試字符串來調試Loopback 2.0應用程序。 Loopback documentation說:在Loopback 2.0中動態設置調試字符串
迴環框架有很多內置的調試字符串,以幫助 調試。經由 環境變量指定如下的命令行的字符串:
MacOS和Linux的
$ DEBUG=<pattern>[,<pattern>...] node .
是否有可能改變模式動態地在運行?或者有可能使用environment-specific configuration?
我使用調試字符串來調試Loopback 2.0應用程序。 Loopback documentation說:在Loopback 2.0中動態設置調試字符串
迴環框架有很多內置的調試字符串,以幫助 調試。經由 環境變量指定如下的命令行的字符串:
MacOS和Linux的
$ DEBUG=<pattern>[,<pattern>...] node .
是否有可能改變模式動態地在運行?或者有可能使用environment-specific configuration?
在我深入瞭解之前,請注意,該調試日誌記錄工具使用了幾乎處理所有邏輯的visionmedia's debug
module。
是否可以在運行時動態更改模式?
前孔裝載任何模塊,我相信是剛剛操縱環境變量最安全,最好的辦法:
if (process.env.NODE_ENV === 'development') {
process.env.DEBUG = process.env.DEBUG + ',loopback:*';
}
另一種方法是先裝載debug
和使用它的.enable
方法:
require('debug').enable('loopabck:*');
但請注意,它只適用於以前這樣做的情況,因爲在創建實例之前它只允許進行更改,在此情況下需要進行環回opback被加載。另一件事是,可能會安裝多個調試模塊,具體取決於相關性和包管理器(npm @ 3,npm @ 2和yarn的行爲不同)。 debug
可能位於您的node_modules目錄中,或者可能位於每個模塊的node_modules目錄的回送中。所以確保你需要它的所有實例並啓用,如果你想這樣做。
現在,如果不想在啓動時執行此操作,那麼API不允許在運行時進行更改。您可以查看關於這個here的討論。雖然有一些骯髒的方法來解決它,但這些可能會在未來打破,所以要小心。
首先,有一個名爲hot-debug的模塊,據說require('debug').enable
也可以在先前創建的實例上工作,但是當我嘗試它時,它不能正常工作,而且很麻煩,但它有可能對您工作正常。
如果這對您不適用另一種方法是重寫require('debug').log
方法。如果這是定義的,debug
將調用此方法而不是console.log
格式化的參數。您可以設置DEBUG=*
,然後自己將其過濾:
require('debug').log = function (string) {
if (string.contains('loopback:security')) {
console.log(string);
}
};
這種方式將是生產緩慢但正如所有的調試輸出將被過濾,即使沒有任何可能被輸出到控制檯之前進行格式化。
重寫require('debug').init
方法的另一件事。每次創建新的調試實例時都會調用它。由於每個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;
});
}
儘管可以對此做很多改進,但您明白了。
謝謝您的詳細解答。儘管它包含幾種不同的解決方案,但我將其標記爲正確答案對我而言,personnaly操縱環境變量是完美的。 – Serg
歡迎,不同的使用情況,有不同的解決方案。 –