Laravel 5.5 中未写入日志文件
Log file is not being written in Laravel 5.5
我在 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
创建文件的代码,它工作正常。所以,我不认为这是一些许可问题。这背后的原因可能是什么?
这里有两件事:
- 仔细检查您的
.env
文件中是否确实包含以下内容,
基本上检查它是否不是假值。:
APP_LOG=daily
- 确保您的
storage
目录对服务器用户是可写的:
chmod -R 755 storage
尝试
php artisan config:cache
如果问题与 laravel 应用程序缓存有关,那么 artisan 命令将有助于将所有配置文件(包含当前更改)缓存到一个文件中。在 laravel 中,配置值是从应用程序缓存中获取的,因此无论何时更改配置文件,您都必须 运行 此命令。使用最新更改更新应用程序缓存。
如果问题与应用程序缓存无关,您可以使用 apache2 错误日志跟踪真正的原因。
tail -f /var/log/apache2/error.log
可能是您授予了存储文件夹的权限和所有权,而不是内部文件夹,例如:以 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=真
您可能不小心更改了默认日志路径或配置数组中的任何内容
'single' => [
'driver' => 'single',
'path' => storage_path('logs/laravel.log'),
'level' => 'debug',
],
将文件权限更改为 777,如果日志文件中存在错误,则为权限。您可以使用 :
检查用户 运行 php
ps 辅助 | egrep '(apache|httpd)'
并更正文件权限。
如果问题不是权限问题,那么您可以在日志文件中写入的代码行之后使用 error_get_last() 并查看错误是什么。
如果没有报错可能是配置中写入日志文件的地址不正确
确保您的日志级别设置为调试,并记得在更改该值后清除您的配置缓存
.env file
APP_LOG_LEVEL=debug
run in console
php artisan config:cache
我发现了问题。我正在使用 Bugsnag(用于生产)并且我已经在项目中设置了它。
当我集成它时,我使用了它在其仪表板上的说明,我认为它并不像他们 documentation 上那样完整。因此,我在我的应用程序服务提供商 app/Providers/AppServiceProvider.php.
的注册方法中添加了以下代码
$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);
如果之前日志记录正常,但您看到错误的编码字符串g
然后很容易修复。
清除日志文件并在下拉列表中非常 bottom-right(我的是 UTF-16LE)拾取 utf-8 编码。
点击 convert 按钮(在出现的带有三个按钮的弹出对话框中)
您还可以进一步使用:
echo "" > storage/logs/laravel.log
我在 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
创建文件的代码,它工作正常。所以,我不认为这是一些许可问题。这背后的原因可能是什么?
这里有两件事:
- 仔细检查您的
.env
文件中是否确实包含以下内容, 基本上检查它是否不是假值。:
APP_LOG=daily
- 确保您的
storage
目录对服务器用户是可写的:
chmod -R 755 storage
尝试
php artisan config:cache
如果问题与 laravel 应用程序缓存有关,那么 artisan 命令将有助于将所有配置文件(包含当前更改)缓存到一个文件中。在 laravel 中,配置值是从应用程序缓存中获取的,因此无论何时更改配置文件,您都必须 运行 此命令。使用最新更改更新应用程序缓存。
如果问题与应用程序缓存无关,您可以使用 apache2 错误日志跟踪真正的原因。
tail -f /var/log/apache2/error.log
可能是您授予了存储文件夹的权限和所有权,而不是内部文件夹,例如:以 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=真
您可能不小心更改了默认日志路径或配置数组中的任何内容
'single' => [
'driver' => 'single',
'path' => storage_path('logs/laravel.log'),
'level' => 'debug',
],
将文件权限更改为 777,如果日志文件中存在错误,则为权限。您可以使用 :
检查用户 运行 phpps 辅助 | egrep '(apache|httpd)'
并更正文件权限。
如果问题不是权限问题,那么您可以在日志文件中写入的代码行之后使用 error_get_last() 并查看错误是什么。
如果没有报错可能是配置中写入日志文件的地址不正确
确保您的日志级别设置为调试,并记得在更改该值后清除您的配置缓存
.env file
APP_LOG_LEVEL=debug
run in console
php artisan config:cache
我发现了问题。我正在使用 Bugsnag(用于生产)并且我已经在项目中设置了它。
当我集成它时,我使用了它在其仪表板上的说明,我认为它并不像他们 documentation 上那样完整。因此,我在我的应用程序服务提供商 app/Providers/AppServiceProvider.php.
的注册方法中添加了以下代码$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);
如果之前日志记录正常,但您看到错误的编码字符串g
然后很容易修复。 清除日志文件并在下拉列表中非常 bottom-right(我的是 UTF-16LE)拾取 utf-8 编码。 点击 convert 按钮(在出现的带有三个按钮的弹出对话框中) 您还可以进一步使用:
echo "" > storage/logs/laravel.log