2011-05-14 89 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