3

主題。Symfony 2の多くの例を検索して、別のファイルにいくつかの情報を記録したいのですが、yaml構成でSilexを使用しています。設定方法は?

# console logging options
monolog.logfile: '/var/log/daemon.log'
monolog.level: error
monolog.name: 'daemon'

私の現在の設定

4

2 に答える 2

1

プロバイダーを登録した後に monolog を拡張し、新しいハンドラーをプッシュするだけで、任意の monolog ハンドラーまたはカスタム ハンドラーを使用できます。

use Silex\Provider\MonologServiceProvider;
use Monolog\Handler\StreamHandler;
use Monolog\Logger;

$app->register(new MonologServiceProvider(), [
    'monolog.logfile' => /your/log/path/file.log',
]);

//extend monolog
$app->extend('monolog', function ($monolog, $app) {
    $monolog->pushHandler(new StreamHandler('/your/log/path/other.log', Logger::DEBUG));
    return $monolog;
});
于 2016-10-25T18:47:43.923 に答える
1

これを次のようにするために、追加のプロバイダーを追加する必要があります(私はゼロから書いたので、うまくいくと思います):

config.yaml:

monolog.extra.logfile: '/var/log/other.log'
monolog.extra.level: error

ExtendedMonologProvider.php:

<?php
use Silex\ServiceProviderInterface;
use Silex\Application;

use Silex\Provider\MonologServiceProvider;

class ExtendedMonologProvider implements ServiceProviderInterface {
    public function register(Application $app) {
        $app->register(new MonologServiceProvider());

        $app['monolog.extra.handler'] = function () use ($app) {
            return new StreamHandler($app['monolog.extra.logfile'], $app['monolog.extra.level']);
        };

        $app['monolog'] = $app->share($app->extend('monolog', function($log, $app) {
            $log->pushHandler($app['monolog.extra.handler']);
            return $log;
        }));
    }

    public function boot(Application $app) { }
}
于 2013-04-29T23:03:26.837 に答える