覆盖日志接口容器绑定 lumen 5.0
Overriding the log interface container binding lumen 5.0
我正在尝试覆盖 lumen 写入日志的位置,从 'storage/logs/lumen.log' 到 'php://stderr'。以下代码是我目前正在尝试的代码,但它没有按预期工作。
没有抛出任何错误,我的日志仍然写入默认位置(在 storage/logs 文件夹中)。
当我这样做时:
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));
}
}
您需要扩展 \Laravel\Lumen\Application
并覆盖 registerLogBindings()
and/or getMonologHandler()
方法来设置您自己的日志记录配置。
这是一个干净的解决方案,不需要您扩展应用程序:
<?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);
我正在尝试覆盖 lumen 写入日志的位置,从 'storage/logs/lumen.log' 到 'php://stderr'。以下代码是我目前正在尝试的代码,但它没有按预期工作。
没有抛出任何错误,我的日志仍然写入默认位置(在 storage/logs 文件夹中)。
当我这样做时:
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));
}
}
您需要扩展 \Laravel\Lumen\Application
并覆盖 registerLogBindings()
and/or getMonologHandler()
方法来设置您自己的日志记录配置。
这是一个干净的解决方案,不需要您扩展应用程序:
<?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);