2016-03-30 5 views
1

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

ErrorHandler::register(); 
ExceptionHandler::register(); 

$app = new Silex\Application(); 

$logfile = dirname(__DIR__) . '/var/log/application.log'; 
$app->register(new Silex\Provider\MonologServiceProvider(), array(
    'monolog.logfile' => $logfile, 
    'monolog.level' => Logger::DEBUG,  
)); 

Я хочу, чтобы регистрировать ошибки в файл как подробно описано как на браузере.

Пример: Я получить доступ к несуществующей URL и я получаю следующие две ошибок в браузере:

2/2 
Not NotFoundHttpException in RouterListener.php line 159: 
No route found for "GET /xxx" 

1. in RouterListener.php line 159 
2. at RouterListener->onKernelRequest(object(GetResponseEvent), 'kernel.request', object(EventDispatcher)) 
3. at call_user_func(array(object(RouterListener), 'onKernelRequest'), object(GetResponseEvent), 'kernel.request', object(EventDispatcher)) in EventDispatcher.php line 164 
... 

1/2 
ResourceNotFoundException in UrlMatcher.php line 102: 
No routes found for "/xxx". 

1. in UrlMatcher.php line 102 
2. at UrlMatcher->match('/xxx') in RedirectableUrlMatcher.php line 30 
3. at RedirectableUrlMatcher->match('/xxx') in LazyUrlMatcher.php line 51 
... 

Но только текст, вошедший является:

[2016-03-30 21:32:10] myapp.ERROR: Symfony\Component\HttpKernel\Exception\NotFoundHttpException: No route found for "GET /xxx" (uncaught exception) at ...route.../vendor/symfony/http-kernel/EventListener/RouterListener.php line 159 {"exception":"[object] (Symfony\\Component\\HttpKernel\\Exception\\NotFoundHttpException(code: 0): No route found for \"GET /xxx\" at ...route.../vendor/symfony/http-kernel/EventListener/RouterListener.php:159, Symfony\\Component\\Routing\\Exception\\ResourceNotFoundException(code: 0): No routes found for \"/xxx\". at ...route.../vendor/symfony/routing/Matcher/UrlMatcher.php:102)"} [] 
[2016-03-30 21:32:10] myapp.INFO: < 404 [] [] 

Есть ли способ для регистрации всех ошибок и включения полной трассировки стека?

+0

не полный трассировки стека, включенных в журнал? Есть правильный след? – Tieme

ответ

1

Вы можете написать журнал форматчик, который будет форматировать ошибка

Настройка монолога:

$logfile = dirname(__DIR__) . '/var/log/application.log'; 
$app->register(new Silex\Provider\MonologServiceProvider(), array(
    'monolog.logfile' => $logfile, 
    'monolog.level' => Logger::DEBUG,  
)); 

$app->extend('monolog', function($monolog, $app) { 
    static $initialized = false; 
    if ($initialized) return $monolog; 
    $initialized = true; 

    foreach ($monolog->getHandlers() as $handler) 
     if ($handler->getFormatter() instanceof \Monolog\Formatter\LineFormatter) 
      $handler->setFormatter(new \My\Formatter()); 

    return $monolog; 
}); 

Formatter:

class \My\Formatter extends \Monolog\Formatter\NormalizerFormatter 
{ 
    public function format(array $record) 
    { 
     $output = ...; 
     return $output 
    } 

    public function formatBatch(array $records) 
    { 
     $output = ...; 
     return $output 
    } 
}