2011-05-14 23 views
3

我目前正在從我們自己的專有日誌解決方案轉移到我們項目之一的log4php。我們自己的解決方案有一個幫助方法,我在下面發佈。該方法的目的是將變量的內容(以及它的任何成員遞歸)寫入日誌。如何用log4php實現「對象傾銷」?

這個方法在log4php中的等價位置應該是Logger類(我假設)。但是我想知道集成這些功能的正確方法。

我應該從Logger中派生並擴展它嗎?或者有沒有辦法「插入」這個功能。

在此先感謝。

/** 
* Dump the complete content of the target object to the log. 
* 
* @param mixed $target The object to dump. 
* @param int $level The verbosity level. 
* @param int $indent Indentation level. 
*/ 
public static function dump($target, $level = Logging::eDEBUG, $indent = 0) { 
    if($level < self::getInstance()->logLevel) return; 

    if(null == $target) { 
    self::log("d", "> " . str_repeat("\t", $indent) . "null", $level); 
    return; 
    } 

    if(is_string($target) || is_numeric($target)) { 
    self::log("d", "> " . str_repeat("\t", $indent) . $target, $level); 
    return; 
    } 

    foreach($target as $key => $value) { 
    if(is_array($value)) { 
     self::log("d", "> " . str_repeat("\t", $indent) . $key . " -> Array (", $level); 
     self::dump($value, $level, $indent + 1); 
     self::log("d", "> " . str_repeat("\t", $indent) . ")", $level); 
     continue; 
    } 

    if(is_object($value)) { 
     self::log("d", "> " . str_repeat("\t", $indent) . $key . " -> Object (", $level); 
     self::dump((array)$value, $level, $indent + 1); 
     self::log("d", "> " . str_repeat("\t", $indent) . ")", $level); 

    } else { 
     self::log("d", "> " . str_repeat("\t", $indent) . $key . " -> " . $value, $level); 
    } 
    } 
} 
+0

爲什麼不使用'print_r()'? – 2011-05-14 16:36:52

+2

您也可以使用var_export() – 2011-05-14 16:44:22

回答

2

這全部在log4php docs中解釋。

+0

看起來我必須跳過那一節。我不知道log4php會隱式地執行這個任務。謝謝。 – 2011-05-14 17:34:21