日志文件未在 Laravel 5.5 中写入
Posted
技术标签:
【中文标题】日志文件未在 Laravel 5.5 中写入【英文标题】:Log file is not being written in Laravel 5.5 【发布时间】:2020-04-13 12:14:53 【问题描述】:我在 Laravel 5.5 上默认启用了日志记录。
设置如下:
在config/app.php
文件中:
'log' => env('APP_LOG', 'single'),
'log_level' => env('APP_LOG_LEVEL', 'debug'),
在.env
文件中:
APP_LOG_LEVEL=debug
如果应用程序发生任何错误,我可以看到异常页面。但我不再在日志文件中看到它了。几个月前它工作得很好。即使我尝试手动记录,它也不会记录。
Log::debug('Notification');
我有使用Storage
创建文件的代码,它工作正常。所以,我不认为这是一些权限问题。这可能是什么原因?
【问题讨论】:
试试php artisan config:clear && php artisan optimize
@TsaiKoga 不,它没有帮助。
$request
的内容是什么?
@apokryfos 它可以是任何东西。那是作为例子写的。即使我遇到致命错误,它也不会记录,尽管它会在屏幕上显示异常。
您也可以从 tinker 尝试获取实际记录器的实例 $logger = \Illuminate\Support\Facades\Log::getLogger();`` then print it
print_r($logger);` 您应该能够在对象的某处看到预期的日志文件
【参考方案1】:
这里有两件事:
-
仔细检查您的
.env
文件中是否确实包含以下内容,
基本上检查它是否不是虚假值。:
APP_LOG=daily
-
确保您的
storage
目录对服务器用户是可写的:
chmod -R 755 storage
【讨论】:
【参考方案2】:试试
php artisan config:cache
如果问题与 laravel 应用程序缓存有关,那么 artisan 命令将有助于将所有配置文件(包括当前更改)缓存到一个文件中。在 laravel 中,配置值是从应用程序缓存中获取的,因此无论何时更改配置文件都必须运行此命令。使用最新更改更新应用程序缓存。
如果问题与应用程序缓存无关,您可以使用 apache2 错误日志跟踪真正的原因。
tail -f /var/log/apache2/error.log
【讨论】:
【参考方案3】:可能是您授予了存储文件夹而不是内部文件夹的权限和所有权,例如:在 redhat 上处理案例,因为在 redhat apache 的情况下,用户是 apache,而在 debian 或大多数其他 www-data 的情况下
folder | Permission | ownership
storage | 775 | root:apache
storage/logs | 755 | root:apache
storage/logs | 775 | root:root
应该是最小的
storage/logs | 775 | root:apache
or
storage/logs | 755 | apache:apache
请检查一次 APP_DEBUG=真
【讨论】:
【参考方案4】:您可能不小心更改了默认日志路径或配置数组中的任何内容
'single' => [
'driver' => 'single',
'path' => storage_path('logs/laravel.log'),
'level' => 'debug',
],
【讨论】:
【参考方案5】:将文件权限更改为 777,如果日志文件中存在错误,则为权限。您可以使用以下命令检查用户运行 php:
ps 辅助 | egrep '(apache|httpd)'
并更正文件权限。
如果问题不是因为权限问题,那么您可以在日志文件中编写的代码行之后使用 error_get_last() 并查看错误是什么。
如果你没有错误,可能是config中写日志文件的地址不正确
【讨论】:
【参考方案6】:确保您的日志级别设置为调试,并记住在更改该值后清除配置缓存
.env file
APP_LOG_LEVEL=debug
run in console
php artisan config:cache
【讨论】:
【参考方案7】:我发现了问题。我正在使用 Bugsnag(用于生产)并且我已经在项目中设置了它。
当我集成它时,我使用了它在仪表板上的说明,我认为这并不完整,因为他们在 documentation 上有它。所以,我在我的应用服务提供者 app/Providers/AppServiceProvider.php 的 register 方法中添加了以下代码。
$this->app->alias('bugsnag.logger', \Illuminate\Contracts\Logging\Log::class);
$this->app->alias('bugsnag.logger', \Psr\Log\LoggerInterface::class);
在我的本地环境中,我没有在我的.env
文件中设置BUGSNAG_API_KEY
。因此,它既没有将异常发送到 Bugsnag,也没有登录到本地 laravel.log 文件。
当我将 Bugsnag 集成到另一个在 Laravel 6 上运行的项目时,我怀疑这个问题并检查了文档。在那里,我找到了继续记录到我的原始记录器以及 Bugsnag 所需的代码。
$this->app->alias('bugsnag.multi', \Illuminate\Contracts\Logging\Log::class);
$this->app->alias('bugsnag.multi', \Psr\Log\LoggerInterface::class);
【讨论】:
以上是关于日志文件未在 Laravel 5.5 中写入的主要内容,如果未能解决你的问题,请参考以下文章