2

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

2 回答 2

3

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

于 2015-05-15T03:55:17.183 回答
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.
    }
}

然后不要忘记将服务提供者添加到您的 Lumen bootstrap/app.php 中:

$app->register(\App\Providers\LogServiceProvider::class);
于 2016-04-19T01:19:38.427 回答