Переопределение интерфейса контейнера журнала привязки люмен 5.0

Я пытаюсь переопределить, где lumen пишет логи, от ‘storage / logs / lumen.log’ до ‘php: // stderr’. Следующий код — это то, что я сейчас пытаюсь, и он не работает должным образом.

Не выдается никаких ошибок, и мои журналы по-прежнему записываются в папку по умолчанию (в папке хранилища / журналы).

И когда я делаю:

dd(app('Psr\Log\LoggerInterface'));

Я получаю реализацию по умолчанию.

Я неправильно истолковал документацию, или я подхожу к этому неправильно?

<?php namespace App\Providers;

use Monolog\Logger;
use Monolog\Handler\StreamHandler;
use Monolog\Formatter\LineFormatter;
use Illuminate\Support\ServiceProvider;

class AppServiceProvider extends ServiceProvider
{
/**
* Register any application services.
*
* @return void
*/
public function register()
{
app()->instance('Psr\Log\LoggerInterface', new Logger('lumen', [$this->getMonologHandler()]));
}

public function getMonologHandler() {
return (new StreamHandler('php://stderr', Logger::DEBUG))->setFormatter(new LineFormatter(null, null, true, true));
}
}

2

Решение

Вам нужно будет продлить \Laravel\Lumen\Application и переопределить registerLogBindings() и / или getMonologHandler() способ настроить свой собственный лог конфигурации.

3

Другие решения

Вот чистое решение, которое не требует расширения приложения:

<?php

namespace App\Providers;

use Illuminate\Support\ServiceProvider;
use Monolog\Formatter\LineFormatter;
use Monolog\Handler\RotatingFileHandler;

class LogServiceProvider extends ServiceProvider
{
/**
* Configure logging on boot.
*
* @return void
*/
public function boot()
{
$maxFiles = 5;

$handlers[] = (new RotatingFileHandler(storage_path('logs/lumen.log'), $maxFiles))
->setFormatter(new LineFormatter(null, null, true, true));

$this->app['log']->setHandlers($handlers);
}

/**
* Register the log service.
*
* @return void
*/
public function register()
{
// Log binding already registered in vendor/laravel/lumen-framework/src/Application.php.
}
}

Тогда не забудьте добавить поставщика услуг в ваш Lumen bootstrap / app.php:

$app->register(\App\Providers\LogServiceProvider::class);
0

По вопросам рекламы [email protected]