2015-05-14 39 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);