Php 科哈纳错误“;对非对象调用成员函数add();关于科哈纳::$log

Php 科哈纳错误“;对非对象调用成员函数add();关于科哈纳::$log,php,error-handling,kohana,fatal-error,Php,Error Handling,Kohana,Fatal Error,我在Kohana::$log上收到错误“在非对象上调用成员函数add()” 没有登录应用程序/logs目录。我描述的错误可以在apache错误日志中找到。这就是它的样子 [Fri Aug 17:07:09 2012][error][client MY.IPA.DDR.ESS]PHP致命错误:在第8行的/var/www/html/application/classes/kohana/exception.PHP中对非对象调用成员函数add() 这是我的错误控制器 <?php class Koh

我在Kohana::$log上收到错误“在非对象上调用成员函数add()”

没有登录
应用程序/logs
目录。我描述的错误可以在apache
错误日志中找到。这就是它的样子

[Fri Aug 17:07:09 2012][error][client MY.IPA.DDR.ESS]PHP致命错误:在第8行的/var/www/html/application/classes/kohana/exception.PHP中对非对象调用成员函数add()

这是我的错误控制器

<?php
class Kohana_Exception extends Kohana_Kohana_Exception {
    public static function handler(Exception $e) {
        if (Kohana::DEVELOPMENT === Kohana::$environment) {
            parent::handler($e);
        } else {
            try {
                Kohana::$log->add(Log::ERROR, "own exception handler");
                Kohana::$log->add(Log::ERROR, parent::text($e));
                $attributes = array('action' => 500, 'message' => rawurlencode($e->getMessage()));
                if ($e instanceof HTTP_Exception) {
                    $attributes['action'] = $e->getCode();
                }
                // Error sub-request.
                echo Request::factory(Route::get('error')->uri($attributes))->execute()->send_headers()->body();
            }
            catch(Exception $e) {
                // Clean the output buffer if one exists
                ob_get_level() and ob_clean();
                // Display the exception text
                echo parent::text($e);
                // Exit with an error status
                exit(1);
            }
        }
    }
}
尝试查看是否:

Log::instance()->add(Log::ERROR, "own exception handler");

工作。当前的Kohana文档似乎表明使用$log仍然可以工作,但在异常处理之前可能会在某个地方被取消设置。但是,从日志类检索实例应该随时可用。

我已经解决了这个问题。如果这个问题发生在任何其他kohana开发者身上,并且他来自谷歌,那么这里就是解决方案

从根shell运行以下命令。请记住,如果重新启动服务器,则必须再次运行它

setsebool -P httpd_unified 1
附加信息:如何追踪它。 检查这些位置

  • Apache错误日志
  • Kohana在应用程序目录上记录(如果您记录调试)
  • 检查
    /var/log/messages
  • 如果是SElinux问题,您将在
    /var/log/messages
    上找到日志条目。这就是我得到的

    setroubleshoot:SELinux正在阻止/usr/sbin/httpd对/var/www/html/应用程序/cache目录进行写访问。获取完整的SELinux消息。运行密封件-l 087dfdb5-c7de-4238-8e6b-a713213a456d


    如前所述,运行sealert-l 087dfdb5-c7de-4238-8e6b-a713213a456d将显示我作为解决方案编写的命令。

    您可能有权限问题。在我的例子中,是httpd服务(apache2)无法访问项目文件。 这是一个残酷的解决方案(只有在您的安全状况允许的情况下才这样做):

    $sudo chmod-R 0777/var/www/html/mysite/

    发件人:

    找到了问题。阻止缓存写操作的是SELinux。5个月后,我在同一个文件上得到了同样的错误!我在谷歌上搜索,这引出了我自己的问题:oBe小心
    chmod-R0777
    :这通常是错误的。