【问题标题】:Monolog in Silex applicationSilex 应用程序中的独白
【发布时间】:2016-12-25 16:32:52
【问题描述】:

根据文档,我尝试在我的 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 文件中,我该怎么做?

感谢您的帮助

【问题讨论】:

  • realpath( __DIR__ . '/../files/logs/log.log') 给你什么?您期望的文件位置?

标签: php symfony silex monolog


【解决方案1】:

根据您提供的信息,我无法真正回答您的问题,但今天是新闻缓慢的一天,因此整理了一个可正常工作的 Silex 站点和工作日志。所有文件都在Github 上,但为了便于阅读,我将在此重复一遍。

composer.json

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

public/index.php

<?php

use \community\app\Application;

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

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

src/app/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/controller/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 似乎会吞下它(这并不完全理想)。这很可能是您的问题。

不管怎样,抓住上面的代码并搞砸它。希望您能够解决您和我之间的差异,并让您的工作正常。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-07
    • 2015-06-28
    • 2021-08-19
    • 2013-05-18
    • 1970-01-01
    • 2018-07-31
    • 2017-08-07
    相关资源
    最近更新 更多