Laravel 5.6 升级导致日志记录中断
Posted
技术标签:
【中文标题】Laravel 5.6 升级导致日志记录中断【英文标题】:Laravel 5.6 Upgrade caused Logging to break 【发布时间】:2018-08-10 22:19:14 【问题描述】:嘿!
所以我最近被赋予了将 Laravel 5.2 升级到 5.6 的任务。这似乎很好......直到我尝试做一个\Log::info()
。每次我运行它,我都会得到一个很大的错误,但最后,它仍然会打印到日志中。我看到了关于创建config/logger.php
的 5.6 文档。我从 github 上拿了一份新的副本。在那之后我做的唯一一件事就是为LOG_CHANNEL
设置一个环境变量为单一的。这是我得到的错误:
[2018-03-02 08:28:59] laravel.EMERGENCY:无法创建配置的记录器。使用紧急记录器。 "exception":"[object] (InvalidArgumentException(code: 0): Log [] is not defined. at I:\xampp\htdocs\mtm\vendor\laravel\framework\src\Illuminate\Log\LogManager.php: 181) [ ....
我在 Laravel 5.2 和 5.6 之间进行了文件比较。我没有看到任何会破坏日志记录功能的东西。
有人在升级 Laravel 时遇到过这个问题吗?
【问题讨论】:
'Log' => Illuminate\Support\Facades\Log::class,
在您的aliases
中在config/app.php
中吗?
@ceejayoz 是的!我确实证实了这一点。 :) 好问题。
嗯,很奇怪。如果您在 Tinker 中拨打Log::info
怎么办?同样的错误?
是的。 Tinker 输出 null 并且 laravel.EMERGENCY 出现在错误日志中。
我希望您的错误已经解决。我们遇到了同样的问题,调试后发现APP_LOG_LEVEL需要全部小写。不幸的是,我们添加了导致问题的 APP_LOG_LEVEL=ERROR
【参考方案1】:
将此文件添加到您的配置文件夹 https://github.com/laravel/laravel/blob/develop/config/logging.php
并将其添加到您的 .env 文件中 LOG_CHANNEL=stack
【讨论】:
我已经添加了我提到的logger.php。它在升级中。我在 .env 中尝试了堆栈而不是单个,但都带回了相同的错误。感谢您的参与! @cbloss793 是logging.php
而不是 logger.php
。它解决了我的问题。
@AmitShah 可能就是这样。我最终只是从一个新版本开始,然后把这些片段移过来。不过还是谢谢!!
那个链接坏了
更新链接:github.com/laravel/laravel/blob/5.6/config/logging.php 对我来说,我必须添加空驱动程序,因为我已经有了 logging.php 文件 `` 'null' => [ 'driver' => 'monolog' , 'handler' => NullHandler::class, ], 'emergency' => [ 'path' => storage_path('logs/laravel.log'), ], ```【参考方案2】:
由于我的 laravel 版本从 5.3 升级到 5.7,我遇到了同样的问题。但在搜索了一些薄荷糖后,我找到了解决方案。 您只需按照以下步骤操作即可。
-
在 config 文件夹中创建 logging.php 文件。
从 Laravel 的 Official Link 复制代码。
将此代码粘贴到您的 logging.php 文件中。
运行这个命令——php artisan config:clear
全部完成。快乐编码:)
【讨论】:
我也是这样做的。我想我错过的远不止这些。全新安装和移动文件效果最好。不过谢谢!欢迎来到堆栈! :) 非常感谢,为我工作【参考方案3】:我遇到了同样的问题,并尝试像你一样做所有事情,但没有成功。
最后发现是因为缓存配置的原因,清空就好了:
php artisan config:clear
【讨论】:
【参考方案4】:我最近在我的开发机器上遇到了同样的错误(奇怪的是,在生产机器上却没有)。在我的开发机器中,我同时安装了php 7.1
和php 7.2
。检查phpinfo()
,我发现7.1是默认版本,所以我决定切换到7.2。
sudo a2dismod php7.1
sudo a2enmod php7.2
sudo systemctl restart apache2
这并没有解决问题(但也许是问题的一部分)。
花了几个小时尝试了网络上的所有建议后,我通过以下方式找到了解决方案:
-
检查存储文件夹中的所有权限。
在我的项目文件夹中,清除所有缓存和配置。
转储所有作曲家自动加载文件。
详细说明:
cd your_project_full_path
sudo chmod -R 0775 storage
sudo chown -R www-data:www-data storage
php artisan config:clear
php artisan view:clear
php artisan route:clear
composer dump-autoload
在这之后,我再也没有问题了。也许尝试 0755 作为存储文件夹的权限。希望这会有所帮助!
【讨论】:
哦!感谢您详细介绍!我正在使用 PHP 7.1.7,根据 Laravel 文档应该没问题。可悲的是,我在 Windows 机器上,所以权限不是问题。我确实做了你建议的所有工匠清除和作曲家转储。还是不行。我想知道我是否需要升级到 PHP 7.2。 附言。我给了你一个完全彻底的答案。我知道这会对某人有所帮助。只是在我的情况下不起作用。 感谢您的投票 :) 无论如何,如果您仍在为此苦苦挣扎,您可以做的另一个测试是尝试创建一个新应用程序:如果您仍然有这个问题,也许这是一个问题环境,否则应该是与您当前升级本身相关的问题(从 5.2 到 5.6 的跳跃很大!)。 这就是我的想法。这是我拥有的第一个 5.6 应用程序。我在其他5.5,他们很好。这是我做过的第一个大规模更新应用程序。我几乎刚刚创建了一个新的应用程序并移动了一些东西,但我没有启动这个应用程序,并且有很多定制的东西。我可能仍然会这样做。感谢您的提示! 我花了三个小时在这上面,你有正确的答案!像魅力一样工作!【参考方案5】:使用 upgrade guide ,并将 logging.php
添加到您的配置文件中。
【讨论】:
正如我之前提到的,我做到了。谢谢你的尝试。【参考方案6】:经过两天的研究,我在 Github 上找到了解决方案。
如果您使用的是 Laravel 5.5.4 到 Laravel 5.6.*,那么您只需安装和配置 Graham Campbell 的异常包。
链接:https://github.com/GrahamCampbell/Laravel-Exceptions
这对我在 Mac OSX (PHP 7.1.7)、Laravel 5.6.22 上非常有效
我最初的错误:
2018-05-25 14:35:07] laravel.EMERGENCY: Unable to create configured logger.
Using emergency logger. "exception":"[object] (InvalidArgumentException(code: 0): Log [] is not defined. at /Users/pro/Sites/metiwave/vendor/laravel/framework/src/Illuminate/Log/LogManager.php:181)
【讨论】:
好发现!我将不得不在我的旧项目上尝试这个,并让你知道它是否对我有用。我最终只使用了全新安装的 Laravel 5.6 并将这些部件移过来。它让事情变得更干净了。我很好奇它是否有效! +1 用于研究! @cblos793 我确信它会为您工作,因为您会看到应用程序上的错误并轻松修复它。感谢您的赞许【参考方案7】:在我的例子中,APP_LOG=
在 .env 文件中是空白的,所以我将它保存为 APP_LOG=single
,它可以工作。
【讨论】:
【参考方案8】:我有同样的问题,原来我不小心移动了配置文件夹。如果您发现自己处于相同的情况,(可能和我一样尴尬)将其移回项目的根文件夹。
问候
【讨论】:
我不会撒谎,这让我发笑。我们都做过这样的傻事。 :) 很高兴你能找到它!【参考方案9】:好的,我知道了 看看官方库,复制log config配置代码:
链接:https://github.com/laravel/laravel/blob/5.6/config/logging.php
在你项目的配置目录下创建 logging.php 文件 复制代码
清除缓存:php artisan config:clear
就是这样。继续跺脚……
【讨论】:
以上是关于Laravel 5.6 升级导致日志记录中断的主要内容,如果未能解决你的问题,请参考以下文章