Silex应用中的Monolog

时间:2016-12-25 16:32:53

标签: php symfony silex monolog

根据文档

,我尝试在我的Silex应用程序中使用Monolog
http://silex.sensiolabs.org/doc/master/providers/monolog.html

我在app.php文件中声明了MonologServiceProvider,如下所示:

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文件中,我该怎么做?

感谢您的帮助

1 个答案:

答案 0 :(得分:1)

我无法根据您提供的信息真实地回答您的问题,但这是一个缓慢的新闻日,所以在工作日志工作的Silex网站上蹦蹦跳跳。所有文件都在Github上,但为了便于阅读,我会在这里重复这些文件。

composer.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();

的src /应用程序/ 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');
    }

}

的src /控制器/ 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! [] []

我注意到的一件事是,如果日志文件的路径是bung,那么Monolog似乎只是吞下它(这不是完全理想的)。这可能是你的问题。

无论如何,抓住上面的代码并乱用它。希望你能够解决你和我之间的差异,并让你的工作。