Uncaught ReflectionException: Class log does not exist Laravel 5.2

时间:2016-01-24 17:12:30

标签: php laravel centos7 laravel-5.2

I am currently trying to clone an existing project of mine from github. After clone I run composer install during the process I receive the following error:

Uncaught ReflectionException: Class log does not exist

I am running Laravel 5.2 on Centos 7.

I have seen references to:

  • Removing spaces within the .env file.
  • Removing the vendor directory & re-installing
  • Removing certain packages required in composer.json

I have:

  • Replaced my .env with the example.env to avoid any custom config errors.
  • I have removed & re-cloned the repo.
  • I have used the default composer.json shipped with Laravel to see if that makes a difference.

None of the above have brought me any joy. I also have the same environment set up on another machine with the application working fine. The only difference here is the machine (working) wasn't cloned from git - it was the initial build environment.

The stack trace I am receiving:

PHP Fatal error:  Uncaught ReflectionException: Class log does not exist in /var/www/html/Acme/vendor/laravel/framework/src/Illuminate/Container/Container.php:736
    Stack trace:
    #0 /var/www/html/Acme/vendor/laravel/framework/src/Illuminate/Container/Container.php(736): ReflectionClass->__construct('log')
    #1 /var/www/html/Acme/vendor/laravel/framework/src/Illuminate/Container/Container.php(631): Illuminate\Container\Container->build('log', Array)
    #2 /var/www/html/Acme/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(674): Illuminate\Container\Container->make('log', Array)
    #3 /var/www/html/Acme/vendor/laravel/framework/src/Illuminate/Container/Container.php(845): Illuminate\Foundation\Application->make('log')
    #4 /var/www/html/Acme/vendor/laravel/framework/src/Illuminate/Container/Container.php(800): Illuminate\Container\Container->resolveClass(Object(ReflectionParameter))
    #5 /var/www/html/Acme/vendor/laravel/framework/src/Illuminate/Container/Container.php(769): Illuminate\Container\Container->getDependenc in /var/www/html/Acme/vendor/laravel/framework/src/Illuminate/Container/Container.php on line 736

Any help would be much appreciated. Thanks in advance.

26 个答案:

答案 0 :(得分:51)

好的,经过多个小时的挖掘,找到了我的问题的解决方案。我之所以说我的问题是因为Exception非常错误。

Uncaught ReflectionException: Class log does not exist

此异常仅表示Laravel尝试记录错误但无法实例化Laravel的Log类。这不是由于Log类进行了漫游或隐藏。这是因为Laravel仍在进行启动过程。尚未加载Log类。

因此,抛出此异常是因为在Laravel的引导周期期间发生了错误 - 当发生此错误时它尝试抛出异常 - 但它不能抛出异常,因为Log类是然而被装载。因此我们得到ReflectionException

的原因

这个已经出现在Laravel的所有版本中,这是我们看到laravel 5.1< =抛出异常的唯一原因,因为之前Laravel默默地放弃了这个问题&通过它的启动过程继续 - 基本上,你的应用程序仍然会破坏,但你不会收到Log class exception

在我的特定情况下,我没有安装php-mysql扩展程序,导致Laravel在启动过程中中断。

最终,由于错误引导错误,调试你可能做错了什么是非常困难的。

我希望这有助于某人!

答案 1 :(得分:33)

在.env文件中,确保没有值空格

例如允许

DB_USERNAME=homestead

这是不允许的

DB_USERNAME=home stead

如果有空格,可以将值包装在引号中。

DB_USERNAME="home stead"

非常希望他们使用json作为.env文件,也许我们应该请求该功能

答案 2 :(得分:19)

通过修改vendor/laravel/framework/src/Illuminate/Container/Container.php并将以下内容置于顶部来揭示潜在错误:

<?php

namespace {
    use Monolog\Logger as Monolog;
    class log extends Illuminate\Log\Writer {
       function __construct()
       {
            $this->monolog = new Monolog("local");
       }
    }
}

//Add curly-braces around the original content, like so:

namespace Illuminate\Container {
    //All original code in this file goes here.

    //...
}

(感谢https://laracasts.com/discuss/channels/general-discussion/class-log-does-not-exist/replies/160902这个想法。)

要添加到此消息的根本原因列表,在配置文件中调用php artisan config:cache定义一个闭包将导致此问题(至少在Laravel 5.1中)。此表现形式的解决方案:根据https://github.com/laravel/framework/issues/9625,不要在Laravel配置文件中定义闭包。

答案 3 :(得分:10)

删除档案bootstrap/cache/config.php。此文件可能不会显示在Windows上,如果是这样,请使用双指令器。 Definitelly会工作!

编辑:

这可能是由缓存.env文件引起的,如果是你的情况,请尝试删除 bootstrap/cache/config.php

答案 4 :(得分:4)

在我的.env文件中添加几行后,我注意到了同样的行为。不带引号的空格,因此可以修改如下:

APP_YOUR_NAME="A value with some spaces"

答案 5 :(得分:3)

在我的情况下,缺少PDO扩展是问题所在。安装后,问题得到解决。

答案 6 :(得分:3)

修改::

因为我对相当笨拙的调试和改造路径等不满意以使VM顺利运行,所以我反思过程并重新安装了流浪盒laravel / homestead(virtualbox 1.0.1

对我来说问题可能源于config/app.php中缺少逗号。缺少的逗号可能会停止编译过程并吐出Uncaught ReflectionException: Class log does not exist错误。

这不是一个直接的答案,但更多的是作为指导那些冒险进入沉默错误深渊的人

系统:macOS Sierra

Vagrant:1.9.1(撰写本文时的最新版本)

VM:laravel / homestead(virtualbox 0.4.0

Laravel版本:5.1.*

PHP:7.0.*

在反复尝试解决问题后,包括:

  1. 重写,删除.env以查找潜在的解析问题
  2. php7.1和mcrypt / mbstring问题
  3. 安装composer建议包
  4. 更新homestead.rb
  5. PATH相关问题
  6. 重要的是,(对我来说)似乎是初始设置中的虚拟版本:

    vagrant box add laravel/homestead

    而是尝试提供版本号,如下所示:

    vagrant box add laravel/homestead --box-version 0.4.0

    <强>其它

    我尝试过以下laravel/homestead个虚拟机版本并尝试失败:

    • 1.0.1(默认)

    laravel/homestead-7

    • 0.2.1

答案 7 :(得分:2)

我在CLI中输入了CMD,并在app配置文件中意外输入了它。我必须遵循这个程序才能找到问题。

解决方案,如何找到问题:

  • 制作配置文件夹的备份副本。尝试删除
  • 中的一个配置
  • 时间并尝试运行失败的composer / artisan命令。当你
  • 查找失败的文件 - 搜索可能失败的行。
  • 失败的原因是:您使用未加载的类常量
  • 尚未。您使用尚未加载的类/函数。等

https://laracasts.com/discuss/channels/general-discussion/class-log-does-not-exist?page=2

答案 8 :(得分:2)

此外,这是由于 conf /目录 .env文件中某些文件中出现语法错误。 在我的情况下,我得到了这个错误,因为我忘了在添加服务提供者和外观时将::class放在行的末尾,添加到数组提供者和conf / app.php文件中的alises。我纠正了这个错误消失了。

答案 9 :(得分:1)

此错误可能是由其中一个配置文件中的错误引起的。 要找到导致它的文件,请将/vendor/laravel/framework/src/Illuminate/Foundation/Bootstrap/LoadConfiguration.php中的函数loadConfigurationFiles更改为:

protected function loadConfigurationFiles(Application $app, RepositoryContract $repository)
{
    foreach ($this->getConfigurationFiles($app) as $key => $path) {
        var_dump('loading key: ' . $key . ' -- path: ' . $path);
        $repository->set($key, require $path);
    }
}

运行php artisan和最后一次加载&#34;键&#34;是导致错误的配置文件。 纠正它并且不要忘记删除你的var_dump命令...... 祝你好运。

答案 10 :(得分:1)

在更新作曲家时,我认为laravel会进行一些验证。

  • 如果未安装,请安装“ unzip”软件包(“ sudo apt install unzip”)。
  • 检查所有必需的扩展名,例如“ mysql”,“ json”,“ curl”,“ xml”,“ zip”等,如果未安装,请安装(“ sudo apt install php7.1-mysql”)。 / li>
  • 检查文件/文件夹权限。
  • 检查您的“ .env”文件。
  • 检查您的“配置”文件。
  • 再次运行“ composer update”。

安装解压文件对我有效。祝你好运:)

答案 11 :(得分:1)

Uncaught ReflectionException: Class log does not exist

此错误来自laravel 5.2&amp; &GT;版本:

我的错误是:

<强> TIPS1: 当您在配置文件

中缺少(;)代码结束时

其他语法错误此错误来了。

我的错误代码:

<?php
return [
'data' => [
    'common' => [
        'AuthKey1' =>  "17086...........9a87a1",
        'AuthKey2' =>  "17086...........9a87a1",
        'AuthKey3'   =>  "17043...........59969531",
    ],
]
]

正确代码:缺少(;)返回结束数组

<?php
return [
'data' => [
    'common' => [
        'AuthKey1' =>  "17086...........9a87a1",
        'AuthKey2' =>  "17086...........9a87a1",
        'AuthKey3'   =>  "17043...........59969531",
    ],
]
];

答案 12 :(得分:1)

此问题通常是由.env文件中的单词之间的空格引起的。 确保你有类似

的东西
SITE_DESCRIPTION = Social Network for dogs

替换它
SITE_DESCRIPTION = 'Social Network for dogs'

答案 13 :(得分:0)

是的,正如@jakehallas所说。它与异常中显示的内容无关。

实际上,如果有任何dababase问题或其他配置变量问题导致此问题。

实际上,当我试图在database.php中更改某些内容时,我只是复制了与database-copy.php相同的文件。我没有解决这个问题。

在我刚刚删除了这个数据库-copy.php文件之后,我已经完成了所做的事情,它的工作正常...

谢谢...

答案 14 :(得分:0)

就我而言,我在配置文件中使用了route()方法。显然,这种方法不起作用,因为这些文件不使用Illuminate Helper,它们很简单.php包含数据。

在实例化Log类之前会读取配置文件,这会导致Jakehallas解释错误。

答案 15 :(得分:0)

在删除 .env文件 e中的空间后解决了此问题(在sublime中查看.env,因为vi编辑器未在.env文件的末尾显示空格。)并运行以下命令。

命令:

php artisan config:clear
php artisan cache:clear
composer dump-autoload
php artisan clear-compiled

答案 16 :(得分:0)

我尝试了这里和其他地方提供的许多解决方案。它对我不起作用。我通过手动删除/var/www/html/bootstrap/cache/compiled.php并更新自动加载文件来解决此问题:

rm /var/www/html/bootstrap/cache/compiled.php
composer dump-autoload

答案 17 :(得分:0)

我遇到了同样的问题,这里没有一个解决方案

我发现config文件夹的权限被拒绝了

修复权限后一切正常!


如何计算?

在其中插入一个断点 vendor/laravel/framework/src/illluminate/Foundation/Http/Kernel.php

handle函数的catch中的第101行。

这就是我发现有关拒绝权限的方式。

答案 18 :(得分:0)

当您错过项目的任何依赖项时,会出现此类错误。  运行php composer.phar update

答案 19 :(得分:0)

运行php artisan config:cache为我解决了此问题。

或者,如果您在共享托管中而无法访问终端/ CMD,请将其添加到您的Routs.php文件中:

Route::get('/config-cache', function() {
    Artisan::call('config:cache');
    return '<h1>Config cache cleared successfully</h1>';
});

然后转到yourdomain.com/config-cache运行此脚本。

答案 20 :(得分:0)

因为没有人提到管弦乐队/测试台,但我想我只是将解决方案添加到我的问题中。

在其中一个单元测试中遇到此错误时,我正在编写Laravel软件包。我使用orchestra/testbench来测试代码的Laravel特定部分。

问题很简单,就是测试类正在扩展PHPUnit\Framework\TestCase而不是Orchestra\Testbench\TestCase

答案 21 :(得分:0)

我有一些负值,例如

BUSINESS_RECONCILIATION_DAYS=-8

我需要包装

BUSINESS_RECONCILIATION_DAYS="-8"

答案 22 :(得分:0)

在我的情况下,将分支合并到master后,配置文件(config / app.php)中缺少逗号。

my code snippet

这是语法错误,但未显示。

答案 23 :(得分:0)

如先前的答案所述,我们在laravel中的一个配置文件出现了问题。我们使用了全局$ app变量,该变量在laravel 5.2+中不再可用。

我们发现这的方法是在src / Illuminate / Foundation / Bootstrap / LoadConfiguration.php的loadConfigurationFiles方法中检查哪个文件加载失败。

答案 24 :(得分:0)

即使这是一个旧线程,希望我的回答有一天能帮助某人(像我一样)。 就我而言,我发现我应该像这样从终端运行工匠:

sudo php artisan command

那是崩溃,因为它没有写入日志文件的权限。

答案 25 :(得分:-1)

只需运行

composer update

解决了该问题。