2011-04-24 90 views
2

所以我有這個記錄器(實際上是一個包裝),它可以通過Log::getInstance()->log_this->log_that等應用程序訪問,等等.Ini中有一個配置參數,它會關閉註銷但禁用LogWrapper執行不完全正確:如何優雅地禁用PHP日誌記錄類

private function __construct() { 
    if(config::get('logging_enabled')) { 
      $this->logger = new Log(); 
     } 
     //else? 
} 

public static function getInstance() { 
    if(self::$_instance == NULL) { 
     self::$_instance = new LogWrapper(); 
    } 
    return self::$_instance; 
} 

呼叫至getInstance()->any_method代表到$記錄器實例,但會失敗,因爲$記錄是沒有什麼。

我可以在哪裏停止此流程?這不是修改Log類的選項,我也不能通過應用程序中的每個調用來訪問LogWrapper。我似乎無法得到我的頭,我知道一個巧妙的線將修復它...

感謝您的任何幫助!

回答

3

爲什麼不實施一個虛擬記錄器類,它不會記錄任何東西?

,然後,實例化要麼Log或僞無用類,根據不同的配置:

if(config::get('logging_enabled')) { 
    $this->logger = new Log(); 
} 
else { 
    $this->logger = new DummyLogThatDoesntLog(); 
} 
+0

是啊,這是一種選擇,但我不想創建另一個類。 – Ethan 2011-04-24 14:21:04

+1

那麼,爲了能夠調用函數,你需要一個實現你的Log接口的類的實例,我不認爲你有很多選擇,如果你不想改變你的代碼的其他部分。 – 2011-04-24 14:25:56

+0

是的,應用程序期待與這些方法的對象 - 我希望有一些欺騙它欺騙! – Ethan 2011-04-24 14:35:22