2015-05-14 20 views
2

我想重写哪里流明写入日志,从'存储/日志/ lumen.log'到'php:// stderr'。下面的代码是我目前正在尝试的代码,并且不能按预期工作。覆盖日志接口容器绑定流明5.0

没有错误发生,我的日志仍写入默认位置(在存储/日志文件夹中)。

当我做:

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

回答

3

你需要延长\Laravel\Lumen\Application并覆盖registerLogBindings()和/或getMonologHandler()方法来建立自己的日志记录配置。

+1

这是一个更好的主意,谢谢 - 虽然实际上并没有回答具体的问题,但它确实解决了问题针对的问题 – Robin

0

这里有一个干净的解决方案,不需要你来扩展应用程序:

<?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. 
    } 
} 

那就不要忘记给服务提供商添加到您的流明引导/ app.php:

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