如何用log4php实现“对象转储”?

时间:2011-05-14 16:35:40

标签: php logging 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 );
    }
  }
} 

1 个答案:

答案 0 :(得分:2)

这一点在log4php docs中解释。