2011-08-18 46 views
8

我已设置log4php使用LoggerAppenderRollingFile appender和LoggerLayoutTTCC布局登录到文件。但是,当我记录一个异常时,它不会显示异常详细信息,例如我以前在log4net中看到的堆栈跟踪。如何用log4php在日志文件中输出异常信息?

我已经通过代码快速浏览了一下,它看上去像LoggerAppenderMongoDB支持显示formatThrowable method的例外,但在其他appender中没有看到类似的东西。

我觉得我失去了一些明显的东西。有什么我需要配置为了将这些细节打印到日志文件?我是否需要创建一个自定义LoggerAppender类?或者可以用不同的布局或自定义渲染器来完成这些工作?

回答

1

您应该使用PHP set_exception_handler函数并使用此函数包装log4php。 检查出来的:http://php.net/manual/en/function.set-exception-handler.php

function exception_handler($exception) { 

$对数>调试($ exception->的getMessage()); }

set_exception_handler('exception_handler');

1

我得出了同样的结论:它看起来像log4php只对LoggerAppenderMongoDB.php appender中的$throwable参数做了一些处理。

LoggerAppenderFile基类依赖布局LoggerLayoutTTCC来格式化消息(如预期的那样)。该类有一个方法ignoresThrowable(),它返回true。尽管这种方法看起来并没有被调用,但它的确适度传达了作者似乎没有打算记录这个错误。

我已经添加扩展LoggerLayoutTTCC并覆盖格式我自己的布局类()

class LoggerLayoutTTCCWithException extends LoggerLayoutTTCC 
    { 
     public function format(LoggerLoggingEvent $event) { 
      $format = parent::format($event); 

      $throwableInfo = $event->getThrowableInformation(); 
      if ($throwableInfo === null) { 
       return $format; 
      } 

      $renderer = new LoggerRendererException(); 
      return $format . $renderer->render($throwableInfo->getThrowable()); 
     } 
    }