Laravel 5.6升级导致日志记录出现问题

44

嘿!

最近我被分配了一个任务,将 Laravel 5.2 升级到5.6。一切看起来都还好……直到我尝试使用 \Log::info()。每次运行时我都会得到一个大错误,但最终它仍然会打印到日志中。我查看了5.6版本的文档,了解了如何创建 config/logger.php。我从 github 上获取了一个全新的副本,之后唯一做的就是设置了一个环境变量 LOG_CHANNEL 为单一模式。以下是我收到的错误:

  

[2018-03-02 08:28:59] laravel.EMERGENCY: Unable to create configured logger. Using emergency logger. {"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 升级过程中遇到过这个问题吗?


1
在你的 config/app.php 文件中的 aliases 中是否有 'Log' => Illuminate\Support\Facades\Log::class, - ceejayoz
@ceejayoz 是的,没错!我已经确认了。 :) 好问题。 - cbloss793
哦,非常奇怪。那么如果您在 Tinker 中进行 Log::info 调用会发生什么?还是同样的错误吗? - ceejayoz
是的。Tinker输出为空,而laravel.EMERGENCY出现在错误日志中。 - cbloss793
1
希望你的错误已经解决了。我们遇到了同样的问题,在调试后发现 APP_LOG_LEVEL 需要全部小写。不幸的是,我们添加了 APP_LOG_LEVEL=ERROR,这导致了问题。 - jtanmay
@jtanmay 我刚刚安装了 Laravel 5.6,问题得到了解决。虽然以后也会有用处,但现在我知道该怎么做了!我会记住的。 - cbloss793
10个回答

49

1
我已经按照我之前提到的添加了logger.php。它是在升级中完成的。我尝试过在.env中使用stack而不是single,但两者都会带回相同的错误。感谢你的参与! - cbloss793
@cbloss793,是 logging.php 而不是 logger.php。这解决了我的问题。 - Amit Shah
@AmitShah 可能是这样。我最终选择了从头开始使用新版本,并将部分内容移植过去。不过还是谢谢你!! - cbloss793
4
该链接已损坏。 - kadrian
1
更新的链接:https://github.com/laravel/laravel/blob/5.6/config/logging.php对于我来说,由于我已经有了logging.php文件,所以我不得不添加null驱动程序。 'null' => [ 'driver' => 'monolog', 'handler' => NullHandler::class, ], 'emergency' => [ 'path' => storage_path('logs/laravel.log'), ], - Zombiesplat

23
由于我的Laravel版本从5.3升级到5.7,我也遇到了同样的问题。但经过几分钟的搜索,我找到了解决方法。 您只需要按照以下步骤操作:
  1. config文件夹中创建logging.php文件。
  2. 从此Laravel官方链接复制代码。
  3. 将此代码粘贴到您的logging.php文件中。
  4. 运行此命令 -- php artisan config:clear

完成了。祝您编码愉快 :)


我也遇到了同样的问题。我认为我错过了更多的东西。重新安装并将文件移动过去效果最好。不过还是谢谢你!欢迎来到 Stack!! :) - cbloss793

11

我遇到了同样的问题,尝试按照你所做的一切,但没有用。

最终,我发现这是因为缓存的配置造成的,只需清除它,一切都会变得好起来:

php artisan config:clear

7

最近我在开发机上遇到了同样的错误(但在生产环境中没有出现,很奇怪)。在我的开发机上,我安装了php 7.1php 7.2。通过使用phpinfo()检查,我发现7.1是默认版本,所以我决定切换到7.2。

sudo a2dismod php7.1
sudo a2enmod php7.2
sudo systemctl restart apache2

这并没有解决问题(但可能是问题的一部分)。

在花费了几个小时尝试网上建议的所有方法后,我通过以下方式找到了解决方案:

  1. 检查存储文件夹中的所有权限。
  2. 在我的项目文件夹中清除所有缓存和配置。
  3. 转储所有composer自动加载文件。

详细说明如下:

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。希望这能帮到你!


哦!我很感激你提供了详细的信息!根据 Laravel 文档,我正在使用 PHP 7.1.7,这应该是没问题的。不幸的是,我在使用 Windows 机器,所以权限不是问题。我已经按照你建议的做了所有 artisan clears 和 composer dump,但仍然无法正常工作。我想知道是否需要升级到 PHP 7.2。 - cbloss793
PS. 我为你的完整详细回答点了赞。我知道那会对某些人有所帮助。只是在我的情况下没有起作用。 - cbloss793
谢谢你的投票 :) 无论如何,如果你仍然在苦苦挣扎,另一个测试你可以尝试创建一个新的应用程序:如果你仍然有这个问题,可能是环境的问题,否则应该是与你当前的升级本身有关的问题(从5.2到5.6的跳跃非常大!)。 - Marco Cazzaro
这正是我所思考的。这是我拥有的第一个5.6应用程序。我在使用其他5.5版本,它们都很好。这是我所做的第一个大规模更新的应用程序。我几乎要创建一个新的应用程序并移动部分内容,但我没有开始这个应用程序,并且有很多定制的东西。我可能仍然会这样做。感谢您的建议! - cbloss793
1
我花了三个小时在这上面,你的答案是正确的!运行得非常好! - Alex Rindone

5

使用升级指南,并将logging.php添加到您的配置文件中。


就像我之前提到的那样,我已经完成了。不过还是谢谢你的尝试。 - cbloss793

4
经过两天的研究,我在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. 

使用紧急日志记录器。{"exception":"[object] (InvalidArgumentException(code: 0): Log []未定义。位于/Users/pro/Sites/metiwave/vendor/laravel/framework/src/Illuminate/Log/LogManager.php的第181行)


1
好发现!我得在我的旧项目上试一试,然后告诉你它对我起作用了没有。最终我使用了一个全新的 Laravel 5.6 安装,并将部分内容移植过去。这使得事情变得更加清洁。但我很好奇它是否可行!+1 给你的研究工作! - cbloss793
@cbloss793 我相信这对你来说会很有效,因为你可以在应用程序上看到错误并轻松修复它。感谢你的支持。 - nensamuel

1
在我的情况下,APP_LOG=.env 文件中是空白的,所以我将其保存为 APP_LOG=single,然后它就可以工作了。

0

好的,我明白了。 看一下官方库,复制日志配置代码:

链接:https://github.com/laravel/laravel/blob/5.6/config/logging.php

在您的项目配置目录中创建 logging.php 文件 将代码复制进去

清除缓存:php artisan config:clear

就这样。继续加油...


0

我遇到了同样的问题,原来是我不小心移动了配置文件夹。如果你发现自己处于同样的情况下,(可能和我一样尴尬)请将它移回项目的根目录。

敬礼


我不会撒谎,这让我笑了。我们都做过像这样的傻事。 :) 你能找到它真是太好了! - cbloss793

0

问题声明

[2023-03-10 09:41:21] laravel.EMERGENCY: 无法创建配置的日志记录器。使用紧急日志记录器。{"exception":"[object] (InvalidArgumentException(code: 0): 日志[]未定义。位于/home/5835934853094/domains/--------.com/public_html/vendor/laravel/framework/src/Illuminate/Log/LogManager.php:207)

100%解决方案

  1. 这个问题是由缓存和PHP版本引起的。
  2. 您需要从以下目录中删除缓存:
  3. storage/Framework/views/
  4. storage/Framework/session/
  5. storage/Framework/cache/
  6. 如果您正在使用laravel 9.19或更高版本,则需要升级到PHP版本8.1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接