Таблица watchdog
Таблица watchdog является централизованным журналом событий (логом) в Drupal. В неё записываются сообщения различного уровня важности: от отладочной информации и уведомлений до критических ошибок и предупреждений системы безопасности.
Поля
| Поле | Тип данных | Описание |
|---|---|---|
wid |
int |
Уникальный идентификатор записи (первичный ключ). Автоинкремент. |
uid |
int |
Идентификатор пользователя (users.uid), связанного с событием. Если событие вызвано анонимным пользователем, значение равно 0.
|
type |
varchar(64) |
Тип события. Обычно это имя модуля (например, system, php, user), который инициировал запись в лог, или произвольная категория для группировки сообщений.
|
message |
text |
Текст сообщения на английском языке. Может содержать placeholder-токены (например, %module) для подстановки переменных.
|
variables |
longblob |
Сериализованный массив (serialize()) значений для подстановки в placeholder-токены из поля message.
|
severity |
int |
Уровень важности (серьезности) события. Соответствует константам из RFC 3164:
0 - Emergency, 1 - Alert, 2 - Critical, 3 - Error, 4 - Warning, 5 - Notice, 6 - Info, 7 - Debug.
|
link |
varchar(255) |
Ссылка, связанная с событием, в виде текстового пути (например, admin/reports/dblog).
|
location |
text |
URL-адрес страницы, на которой произошло событие. |
referer |
text |
URL-адрес реферера (страницы, с которой пользователь перешел на текущую). |
hostname |
varchar(128) |
IP-адрес пользователя, с которым связано событие. |
timestamp |
int |
Метка времени Unix, когда произошло событие. |
Как это работает
Модули ядра и contrib-модули используют функцию watchdog() (или её аналог \Drupal::logger()- для Drupal 8+) для записи сообщений в лог. Функция принимает параметры: тип события (type), текст сообщения, массив переменных и уровень серьёзности.
При записи сообщения массив переменных сериализуется и сохраняется в поле variables. При отображении записи в отчётах (например, на странице admin/reports/dblog) система десериализует эти переменные и подставляет их на место токенов в тексте сообщения с помощью функции t(), что также позволяет переводить сообщения.
Из-за высокой частоты записи таблица watchdog может очень быстро расти в размерах. Для предотвращения переполнения базы данных рекомендуется регулярно очищать старые записи с помощью встроенного задания Cron (admin/config/system/cron) или модуля Database Logging (dblog), который предоставляет интерфейс для управления записями.
В высоконагруженных системах для логирования часто используют альтернативные решения, например, модуль Syslog, который перенаправляет логи в системный syslog сервера, что снимает нагрузку с базы данных.
Пример SQL-запроса
Вывести 10 последних критических ошибок (Critical) и ошибок (Error) от модуля 'php':
SELECT w.wid, w.timestamp, u.name, w.message, w.severity, w.location
FROM watchdog w
LEFT JOIN users u ON w.uid = u.uid
WHERE w.type = 'php'
AND w.severity IN (2, 3)
ORDER BY w.timestamp DESC
LIMIT 10;
Смотрите также
-
таблицу
users,
которая хранит данные пользователей -
таблицу
sessions,
которая хранит данные сессий пользователей -
таблицу
batch,
которая управляет фоновыми задачами -
таблицу
cache_default,
которая хранит кеш данных