【问题标题】:Log file is not being written in Laravel 5.5日志文件未在 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);` 您应该能够在对象的某处看到预期的日志文件

标签: php laravel logging monolog


【解决方案1】:

这里有两件事:

  1. 仔细检查您的.env 文件中是否确实包含以下内容, 基本上检查它是否不是虚假值。:
APP_LOG=daily
  1. 确保您的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);
              

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2019-07-04
                • 2016-05-08
                • 2012-11-11
                • 2015-03-19
                • 2010-12-19
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多