2015-06-29 3 views
2

Я настроил Laravel 5 для использования настраиваемой конфигурации ведения журнала (по умолчанию это слишком просто). Я добавил monolog's IntrospectionProcessor для регистрации имени файла и номера строки вызова журнала.Laravel 5> Использование монологического процессора самоанализа

Проблема заключается в том, что все линии получают один и тот же файл и номер строки:

[2015-06-29 17:31:46] local.DEBUG (/home/vagrant/project/vendor/laravel/framework/src/Illuminate/Log/Writer.php#201): Loading view... [192.168.10.1 - GET /loans/create] 

Есть ли способ, чтобы конфигурационный IntrospectionProcessor печатать фактические линии и не фасадные из них?

Если у меня Log::getMonolog()->info('Hello');, он работает и печатает правильный номер файла и строки ... но я не знаю, насколько безопасно избегать вызова Writer.writeLog function, поскольку он запускает событие журнала (безопасно ли его не запускать ?).

ответ

2

Это фактически ожидаемая функциональность, если у вас нет обработчика обработчиков журналов напрямую (проверьте комментарии в верхней части IntrospectionProcessor.php). Я предполагаю, что у вас есть оберточная функция вокруг регистратора, и вы вызываете ее из Writer.php - BUT

Если вы посмотрите на код для IntrospectionProcessor.php, вы увидите немного кода в строках 81 до 87, который решает, как отформатировать трассировку стека, и у нее все еще есть доступ к стеку. Если вы присвоите значения $ i для $ trace [$ i - 1]/$ trace [$ i] за один (aka $ trace [$ i]/$ trace [$ i + 1] соответственно), вы можете «подняться» вернитесь туда, где хотите.

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

На личном (plz dont mod me bruhs) заметке, я хотел бы видеть, что функциональность включает смещение стека при входе в систему. Я знаю, какую функцию я хочу обвинять, если ошибка возникает, когда я пишу error_log ('ut oh'), но я могу (буду) забыть, что к моменту выхода «ut oh».

+0

Да, основная проблема заключается способ Laravel в оберточной объект журнала. В конце концов я назвал это прямо, и до сих пор у меня не было никаких проблем. – rvignacio

+0

Рад слышать, что вы настроены! Еще одна особенность (я до сих пор не понимал этого) IntrospectionProcessor - это параметр для классов/функций, которые вы хотите пропустить в трассировке. Fickle, если вы меняете имена функций, но определенно полезно обойти оболочку! –

3

(только пробовал в Laravel 4.2!)

При нажатии процессор интроспекции к монологу можно дать массив skipClassesPartial в качестве второго параметра в IntrospectionProcessor застройщик. С помощью этого массива можно пропускать классы Laravel Illuminate, а журнал регистрации регистрирует класс, вызывающий метод журнала.

$log->pushProcessor(new IntrospectionProcessor(Logger::DEBUG, array('Illuminate\\'))); 

также смотрите: https://github.com/Seldaek/monolog/blob/master/src/Monolog/Processor/IntrospectionProcessor.php

Смежные вопросы