Laravel Lumen Logging 给出 A facade root has not been set

Laravel Lumen Logging gives A facade root has not been set

我已经用 composer create-project --prefer-dist laravel/lumen demo 设置了 Laravel 流明的基本示例。我正在使用 Lumen 版本 8。

我的 .env 文件看起来像

APP_NAME=Lumen
APP_ENV=local
APP_KEY=
APP_DEBUG=true
APP_URL=http://localhost
APP_TIMEZONE=UTC

LOG_CHANNEL=stack
LOG_SLACK_WEBHOOK_URL=

DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=3306
DB_DATABASE=mysql
DB_USERNAME=root
DB_PASSWORD=

CACHE_DRIVER=file
QUEUE_CONNECTION=sync

我创建了一个控制器 TrackerController 并在 routes/web.php 中调用了它。

// /app/Http/Controllers/TrackerController.php
<?php

namespace App\Http\Controllers;

use Illuminate\Support\Facades\Log;
use Illuminate\Http\Request;

class TrackerController extends Controller {
    public function index(Request $request) {
        Log::info('message');
        return 'ok';
    }
}

我的/app/routes/web.php长得像

<?php

$router->get('/','TrackerController@index');

我想将日志记录添加到 stdout(这样我以后可以将该数据通过管道传输到 AWS ElasticBeanstalk 中的 Cloudwatch),据我所知,这是开箱即用的,但我似乎做不到让它工作。

每当我在控制器中执行 Log::info('message'); 时,我都会得到一个 A facade root has not been set..

没有 Log::info('message'); 一切都按预期工作。

您应该确保取消注释 bootstrap/app.php 文件中的 $app->withFacades() 行。该方法在Facadeclass上静态设置了应用容器,这样每个facade都可以使用容器来解析它的'root'(facade静态代理是干什么用的)