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.1php 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 升级导致日志记录中断的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 不断记录 NotFoundHttpException

Laravel 日志配置以及设置按日期记录日志

Laravel技巧之记录多日志

Laravel 记录日志

记一次Laravel定时任务导致日志没有写入权限的坑

mysql日志