【问题标题】:Overriding the log interface container binding lumen 5.0覆盖日志接口容器绑定 lumen 5.0
【发布时间】:2015-05-14 19:46:01
【问题描述】:

我正在尝试覆盖 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));
    }
}

【问题讨论】:

    标签: php laravel laravel-5 lumen laravel-ioc


    【解决方案1】:

    您需要扩展 \Laravel\Lumen\Application 并覆盖 registerLogBindings() 和/或 getMonologHandler() 方法来设置您自己的日志记录配置。

    【讨论】:

    • 这是一个更好的主意,谢谢 - 虽然实际上并没有回答问题的细节,但它确实解决了问题所针对的问题
    【解决方案2】:

    这是一个不需要您扩展应用程序的干净解决方案:

    <?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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-12
      • 2022-01-13
      • 1970-01-01
      相关资源
      最近更新 更多