我有一個大型谷歌應用程式腳本向日志瀏覽器寫入大量日志行。如果需要,我希望能夠禁用或啟用日志記錄。
這是一個似乎在瀏覽器上按預期作業的代碼。這allowlog是在代碼中設定的,但將從外部源中檢索。這對于本文的目的并不重要。
如果需要,自提取功能會覆寫console.log并阻止日志記錄。
let allowLog = false;
function func1(){
console.log("func1 log msg");
}
(function(){
//test log 1
console.log("self extracting");
//keep ref to global console.log
const _consolelog = console.log;
//test log 2 - verify it works
_consolelog("self extracting2");
//override global console.log
console.log = function(val){
if (allowLog){
_consolelog(val);
_consolelog("allowing");
}else{
_consolelog("log disabled");
}
}
})();
此代碼不適用于 google app 腳本,并且日志不斷寫入。
在應用程式腳本中,我可以 在加載模塊時查看console.log("self extracting");并 記錄訊息。_consolelog("self extracting2");然而,當func1被稱為日志時,即使allowLog = false.
_consolelog("allowing");也_consolelog("log disabled");沒有記錄。全域 console.log 未被覆寫。
為什么會這樣,以及如何(如果有的話)修復它?
上述代碼的預期日志為 ( allowLog=false):
- 自提取
- 自提取2
- 日志已禁用
對于以下情況allowLog=true:
- 自提取
- 自提取2
- func1 日志訊息
- 允許
當執行匿名自呼叫函式時,前兩行selfextracting和selfextracting2應該只列印一次。另一個應該來自覆寫全域的內部功能
uj5u.com熱心網友回復:
這是因為 is 的log屬性console不是writable。您可以使用Object.getOwnPropertyDescriptors. 然而,它仍然是
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/416499.html
標籤:
