1. Простой пример (уровень info)
<?php
use Drupal\Core\Drupal;
// Логирование информации о создании ноды.
Drupal::logger('my_module')->info('Нода @type создана (ID: @id)', [
'@type' => $node->bundle(),
'@id' => $node->id(),
]);
2. Логирование ошибок (error)
<?php
use Drupal\Core\Drupal;
try {
// Код, который может выбросить исключение
} catch (\Exception $e) {
Drupal::logger('my_module')->error('Ошибка при импорте данных: @error', [
'@error' => $e->getMessage(),
]);
}
3. Отладка (debug)
<?php
use Drupal\Core\Drupal;
// Для отладки сложных структур
$data = ['key' => 'value', 'arr' => [1,2,3]];
Drupal::logger('my_module')->debug('<pre>@data</pre>', [
'@data' => print_r($data, TRUE),
]);
4. Предупреждения (warning)
<?php
use Drupal\Core\Drupal;
function my_module_node_presave(NodeInterface $node) {
Drupal::logger('my_module')->notice('Нода @title сохранена', [
'@title' => $node->getTitle(),
]);
}
6. С контекстом выполнения
<?php
use Drupal\Core\Drupal;
Drupal::logger('my_module')->info('Пользователь @name зарегистрирован', [
'@name' => $user->getDisplayName(),
'link' => $user->toLink('Профиль')->toString(), // Ссылка в логе
'uid' => $user->id(), // Доп параметры
]);
7. Использование плейсхолдеров
<?php
use Drupal\Core\Drupal;
// Рекомендуется использовать:
Drupal::logger('my_module')->info('User @name (ID: @uid) logged in', [
'@name' => $user->getAccountName(),
'@uid' => $user->id(),
]);
// Вместо конкатенации строк (для безопасности и перевода)
Где смотреть логи?
-
Админка: /admin/reports/dblog
-
Файл: sites/default/files/php.log (если настроен)
-
Серверные логи (напр.,
/var/log/apache2/error.log
)
Лучшие практики
-
Канал логирования = имя вашего модуля
-
Уровни важности (от меньшего к большему):
debug
→info
→notice
→warning
→error
→critical
→alert
→emergency
-
Для высоконагруженных операций используйте
->log($level, $message)
-
Dependency Injection лучше прямого вызова:
<?php
// В классе
protected $logger;
public function __construct(LoggerChannelFactoryInterface $logger) {
$this->logger = $logger->get('my_module');
}
$this->logger->error('...');
Эти примеры помогут отслеживать работу модуля и находить ошибки в продакшене.