Монолог в приложении Silex

Я пытаюсь использовать Monolog в своем приложении Silex, согласно документу.

http://silex.sensiolabs.org/doc/master/providers/monolog.html

Я объявляю MonologServiceProvider в файле app.php следующим образом:

use Silex\Provider\MonologServiceProvider;

$app->register(new MonologServiceProvider(), array(
    'monolog.logfile' => __DIR__ . '/../files/logs/log.log',
));

И я пытаюсь записать в свой файл log.log на контроллере:

use Monolog\Logger;
use Monolog\Handler\StreamHandler;

// In a controler
$app['monolog']->info("test");
$app['monolog']->debug("test");
$app['monolog']->warning("test");
$app['monolog']->error("test");

У меня нет никакой ошибки, но он вообще не работает.

Я просто не хочу помещать свое «тестовое» сообщение в файл log.log, как я могу это сделать?

Спасибо за помощь


person Macbernie    schedule 25.12.2016    source источник
comment
Что вам дает realpath( __DIR__ . '/../files/logs/log.log')? Расположение файла, которое вы ожидаете?   -  person Adam Cameron    schedule 28.12.2016


Ответы (1)


Я не могу ответить на ваш вопрос, основываясь на информации, которую вы предоставили, но здесь день медленных новостей, поэтому наиграл рабочий сайт Silex с работающим ведением журнала. Все файлы находятся на Github, но я повторю их здесь для удобства чтения.

композитор.json

{
    "require" : {
        "silex/silex" : "^2.0",
        "monolog/monolog" : "^1.0"
    },
    "autoload" : {
        "psr-4" : {
            "community\\" : "src/"
        }
    }
}

общедоступный/index.php

<?php

use \community\app\Application;

require_once realpath(__DIR__ . '/../vendor/autoload.php');

$app = new Application();
$app["debug"] = true;
$app->run();

источник/приложение/Application.php

<?php

namespace community\app;

use \Silex\Application as SilexApplication;
use Silex\Provider\MonologServiceProvider;

class Application extends SilexApplication {

    function __construct() {

        parent::__construct();
        $this->registerServices();
        $this->mountControllers();
    }

    function registerServices(){
        $this->register(new MonologServiceProvider(), [
            "monolog.logfile" => realpath(__DIR__ . "/../../log") . "/general.log"
        ]);
    }

    function mountControllers() {
        $this->get('/testLog', 'community\controller\TestLogController::doGet');
    }

}

источник/контроллер/TestLogController.php

<?php

namespace community\controller;

use community\app\Application;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;

class TestLogController {

    public function doGet(Request $request, Application $app) {

        $app["monolog"]->info("hi!");

        return new Response("All good", Response::HTTP_OK);
    }
}

Это пишет в log/general.log следующее:

[2016-12-28 13:58:05] app.INFO: hi! [] []

Одна вещь, которую я заметил, заключается в том, что если путь к файлу журнала забит, то Monolog просто проглатывает его (что не совсем идеально). Это вполне может быть вашей проблемой.

В любом случае, возьмите приведенный выше код и повозитесь с ним. Надеюсь, вы сможете разобраться в различиях между вашим и моим и заставить работать свой.

person Adam Cameron    schedule 28.12.2016