我收到错误“在Kohana :: $ log
上的非对象上调用成员函数add()没有登录application/logs
目录。我描述的错误可以在 apache error_log
找到。这是它出现的方式
[Fri Aug 17 17:07:09 2012] [错误] [客户端MY.IPA.DDR.ESS] PHP致命错误:在/ var / www /中的非对象上调用成员函数add()第8行的html / application / classes / kohana / exception.php
这是我的错误控制器。
<?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);
}
}
}
}
从代码看来Kohana::$log
尚未初始化。但是这段代码已经有很长一段时间了。是什么让它无法运作?
我在 Fedora 15上使用 Kohana-3.2 PHP 5.3.13
答案 0 :(得分:1)
我已经解决了这个问题。如果任何其他kohana开发人员出现此问题,他来自谷歌这里是解决方案。
从root shell运行以下命令。请记住,如果重新启动服务器,则必须再次运行它。
setsebool -P httpd_unified 1
检查这些位置
/var/log/messages
。如果发生SElinux问题,您将在/var/log/messages
上找到日志条目。这就是我得到的。
setroubleshoot: SELinux阻止/ usr / sbin / httpd对目录/ var / www / html / 应用程序/缓存进行写入访问。完整的SELinux消息。运行sealert -l 087dfdb5-c7de-4238-8e6b-a713213a456d
如上所述,运行sealert -l 087dfdb5-c7de-4238-8e6b-a713213a456d
将揭示我作为解决方案编写的命令。
答案 1 :(得分:0)
尝试查看:
Log::instance()->add(Log::ERROR, "own exception handler");
的工作原理。当前的Kohana文档似乎表明使用$ log仍然可以工作,但在异常处理之前它可能会被取消。但是,应该可以随时从Log类中检索实例。
答案 2 :(得分:0)
您可能遇到权限问题。在我的例子中,httpd服务(apache2)无法访问项目文件。 这是一个残酷的解决方案(仅在您的安全情况允许时才这样做):
$ sudo chmod -R 0777 / var / www / html / mysite /