Как записать сообщение об ошибке в drupal - PullRequest
33 голосов
/ 10 ноября 2009

Как записать наши собственные сообщения об ошибках (например, ошибка из-за неправильной записи даты пользователя), сгенерированные в php программе для журнал ошибок drupal .

Ответы [ 7 ]

46 голосов
/ 10 ноября 2009

Вы можете использовать функцию watchdog :

watchdog($type, $message, $variables = array(), $severity = WATCHDOG_NOTICE, $link = NULL)

Цитируя руководство, параметры:

  • $type Категория, к которой относится это сообщение.
  • $message Сообщение для хранения в журнале.
  • $variables Массив переменных для замены в отображаемом сообщении или NULL, если сообщение уже переведено или его невозможно перевести.
  • $severity Серьезность сообщения, согласно RFC 3164
  • $link Ссылка для связи с сообщением.

А уровни ошибок можно найти на странице watchdog_severity_levels. Для ошибки вы, скорее всего, будете использовать WATCHDOG_ERROR или, может быть, даже что-то более «критическое», в зависимости от типа ошибки.

7 голосов
/ 21 марта 2016

Drupal 8

// Logs a notice
\Drupal::logger('my_module')->notice($message);
// Logs an error
\Drupal::logger('my_module')->error($message);

См. Больше примеров на Как регистрировать сообщения в Drupal 8 .

6 голосов
/ 10 ноября 2009

1) Действительно, сторожевой таймер является стандартным способом записи собственных ошибок PHP.

2) В качестве альтернативы, если вам нужно сразу же увидеть сообщения об ошибках при отладке ваших страниц Drupal, вы можете захотеть, чтобы они записывались / печатались прямо на соответствующей странице - в консоли FireBug. Иногда это очень удобно, когда вы можете видеть связанные со страницей журналы точно в срок. Для этого требуется - модуль Devel , Firebug расширение для FireFox и, возможно, Firephp .

Вы можете использовать функцию dfb () для записи сообщений журнала непосредственно на общую консоль Firebug.

dfb($input, $label = NULL)

Если вы хотите, чтобы ваши сообщения журнала, связанные с Drupal, не попадали в обычную консоль Firebug, вы можете записывать сообщения в журнал Drupal for Firebug с помощью функции firep ():

firep($item, $optional_title)
3 голосов
/ 10 ноября 2009

Watchdog - это, без сомнения, путь к производственной системе, но во время отладки я считаю полезной функцию drupal_set_message.

Выводит сообщение на экран, где обычно отображаются сообщения типа «Операция успешна» (поэтому убедитесь, что вы удалили их перед запуском сайта).

http://api.drupal.org/api/function/drupal_set_message/6

2 голосов
/ 05 апреля 2018

В drupal 7 мы можем записать сообщение следующим способом:

Функция наблюдения за drupal, которую мы можем использовать для регистрации сообщений в базе данных, убедитесь, что мы включили дополнительный модуль ядра для ведения журнала базы данных в /admin/build/modules.

.
watchdog($type, $message, $variables = array(), $severity = WATCHDOG_NOTICE, $link = NULL)

$ Тип: Категория, к которой относится это сообщение, Пример: PHP, cron .., мы можем отфильтровать сообщение по типу.

$ сообщение: Сообщение для сохранения в журнале, пример: «В файловой системе отсутствует следующий модуль: security_review»

$ переменные: Массив переменных для замены в отображаемом сообщении или NULL, если сообщение уже переведено или его невозможно перевести. чтобы сделать сообщение переведенным, не передавайте динамические переменные значения в сообщение, необходимо добавить строки-заполнители.

Пример: watchdog ('cg_volunteer', 'cg in form_alter% formly', массив ('% formly' => $ form ['# id']), WATCHDOG_NOTICE, $ link = NULL);

$ Тяжесть Серьезность сообщения, журналы могут быть отфильтрованы по серьезности согласно RFC 3164. Возможные значения: WATCHDOG_ERROR, WATCHDOG_WARNING и т. Д. Для получения дополнительной информации см. https://api.drupal.org/api/drupal/includes!bootstrap.inc/function/watchdog/7.x

$ ссылка : Ссылка для связи с сообщением.

Пример

// для журналов уведомлений

watchdog('my_module', $message, array());

// для ошибки журнала

watchdog('my_module', $message, array(), WATCHDOG_ERROR);

В Drupal 8 мы использовали следующий метод:

// Для журналов уведомления.

\Drupal::logger('my_module')->notice($message);

// Для журналов ошибка.

\Drupal::logger('my_module')->error($message);

// Для оповещения действие должно быть предпринято немедленно.

\Drupal::logger('my_module')->alert($message);

// Для критического сообщения.

\Drupal::logger('my_module')->critical($message);

// Для сообщений уровня отладки.

\Drupal::logger('my_module')->debug($message);

// В экстренных случаях система не работает.

\Drupal::logger('my_module')->emergency($message);

// Для предупреждения

\Drupal::logger('my_module')->warning($message);

// Для информационных сообщений.

\Drupal::logger('my_module')->info($message);

Также для перевода мы не должны использовать функцию t ().

\Drupal::logger('my_module')->alert('Message from @module: @message.', [
'@module' => $module,
'@message' => $message,
]);

это будет переведено во время выполнения.

Пример:

\Drupal::logger('content_entity_example')->notice('@type: deleted %title.',
array(
'@type' => $this->entity->bundle(),
'%title' => $this->entity->label(),
));
1 голос
/ 19 июля 2018

Оба watchdog для D7 и \Drupal::logger для D8 запишут журнал в таблицу watchdog (в вашей базе данных), а с ОГРОМНЫМИ данными, зарегистрированными , вы можете представить себе влияние на производительность.

Для этого можно использовать error_log функцию php (см. Руководство по PHP ).

error_log("Your message", 3, "/path/to/your/log/file.log");

Вам необходимо иметь разрешение на запись в файл журнала (/path/to/your/log/file.log)

0 голосов
/ 03 октября 2018
// Get logger factory.
$logger = \Drupal::service('logger.factory');

// Log a message with dynamic variables.
$nodeType = 'Article';
$userName = 'Admin';
$logger->get($moduleName)->notice('A new "@nodeType" created by %userName.', [
    '@nodeType' => $nodeType,
    '%userName' => $userName,
]);

Источник

...