Красивая запись в watchdog

mbaev 11.05.2016, 14:53

Когда пишется кастомный модуль, то обычно существует обработка ошибок с помощью watchdog или watchdog_exception. Стандартный вывод такого сообщения выглядит не информативно и мало-симпатично. Следующий пример обработки ошибки можно встретить достаточно часто:

  1. try {
  2.   throw new Exception('Any message', 10);
  3. }
  4. catch (Exception $e) {
  5.   watchdog_exception('my_module', $e);
  6. }

Он сохранит сообщение об ошибке в лог, которое будет выглядеть так (сорри за заблюренные данные, скрины сделаны с рабочего сайта =) ):
default-watchdog

Чтобы исправить этот недостаток можно использовать сниппет:

  1. function my_module_pretty_watchdog($e, $params = array()) {
  2.   $message = "<b>Message</b>: !message<br/>" .
  3.     "<b>Trace</b>: !trace<br/>" .
  4.     '<b>Params</b>: !params';
  5.  
  6.   $trace = explode('#5', nl2br($e->getTraceAsString()));
  7.   watchdog('my_module', $message, array(
  8.     '!message' => $e->getMessage(),
  9.     '!trace'   => str_replace('#', '&emsp; #', $trace[0]),
  10.     '!params'  => '<pre>'.htmlspecialchars(print_r($params, TRUE)).'</pre>'
  11.   ), WATCHDOG_ERROR, current_path());
  12. }

В таком случае, тот же пример, с сохранением ошибки в лог:

  1. try {
  2.   throw new Exception('Any message', 10);
  3. }
  4. catch (Exception $e) {
  5.   my_module_pretty_watchdog($e, array(
  6.     'first param' => 'data 1',
  7.     'second param' => 'data 2'
  8.   ));
  9. }

 

даст более привлекательное сообщение:
custom-watchdog