Laravel 5.5中日志文件未被写入

10

我在 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创建文件的代码,它正常运行。因此,我认为这不是权限问题。导致这种情况的原因是什么?


@apokryfos 可能是任何东西。这只是一个示例。即使我遇到致命错误,它也不会记录日志,尽管它在屏幕上显示异常。 - Debiprasad
为了避免出现“数组转换字符串”错误,它不能是任何东西。它应该是字符串或可转换为字符串的东西。对于['exception' => $exception]情况有特殊处理,可以在该键中传递一个异常。这是除非您使用自定义日志处理程序。 - apokryfos
@apokryfos 谢谢你的解释。但是,即使是没有上下文数据的简单日志记录也无法工作。 - Debiprasad
你可以执行 php artisan tinker,然后输入 config('logging') 命令,这样你就可以获取已解析的日志配置信息。这样你就可以确定记录器正在使用哪些设置,而不受环境文件、环境变量等的影响。 - Danny Ebbers
1
你也可以尝试从 Tinker 中获取实际记录器的实例: $logger = \Illuminate\Support\Facades\Log::getLogger(); 然后打印它 print_r($logger);你应该能够在对象中看到预期的日志文件。 - Danny Ebbers
显示剩余7条评论
8个回答

3

我找到了问题所在。我正在生产中使用Bugsnag,并已在项目中设置它。

当我集成它时,我使用了它在仪表板上的指示,但我认为这些指示不完整,因为它们在文档中有所说明。因此,我在应用程序服务提供者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);

2

你可能意外更改了默认的日志路径或配置数组中的任何内容。

'single' => [
    'driver' => 'single',
    'path' => storage_path('logs/laravel.log'),
    'level' => 'debug',
],

2

尝试

php artisan config:cache

如果问题与Laravel应用程序缓存有关,则artisian命令将有助于将所有配置文件(包括当前更改)缓存到单个文件中。在Laravel中,配置值是从应用程序缓存中获取的,因此每当更改配置文件时,您都必须运行此命令以更新应用程序缓存以获取最新更改。
如果问题与应用程序缓存无关,则可以使用apache2错误日志跟踪实际原因。
tail -f /var/log/apache2/error.log

1
也许你已经给了存储文件夹的权限和所有权,但不是内部文件夹,比如在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=true进行一次检查


1

确保日志级别设置为调试模式,并在更改该值后记得清除配置缓存

.env file 
APP_LOG_LEVEL=debug

run in console
php artisan config:cache

0

将文件权限更改为777,如果日志文件中存在错误,则是权限问题。您可以使用以下命令检查运行PHP的用户:

ps aux | egrep '(apache|httpd)'

并更正文件权限。

如果问题不是权限问题,则可以在您编写的日志文件中的代码行后使用error_get_last()函数,并查看错误信息。

如果没有错误,可能是配置文件中写入日志文件的地址不正确。


0

如果之前日志记录正常,但现在看到了错误编码的字符串

那么很容易解决。 清空日志文件,在下拉列表中选择最底部(我的是UTF-16LE)的utf-8编码。 点击转换按钮(在弹出的对话框中有三个按钮) 并且你还可以进一步使用:

echo "" > storage/logs/laravel.log

0

这里有两件事情:

  1. 仔细检查一下你的.env文件,确保以下内容已经正确配置,基本上是检查它是否为假值:
APP_LOG=daily

请确保您的storage目录对服务器用户是可写的:
chmod -R 755 storage

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