Примеры использования Drupal::logger()

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(),
]);

// Вместо конкатенации строк (для безопасности и перевода)

Где смотреть логи?

  1. Админка: /admin/reports/dblog

  2. Файл: sites/default/files/php.log (если настроен)

  3. Серверные логи (напр., /var/log/apache2/error.log)

Лучшие практики

  1. Канал логирования = имя вашего модуля

  2. Уровни важности (от меньшего к большему):
    debug  info  notice  warning  error  critical  alert  emergency

  3. Для высоконагруженных операций используйте ->log($level, $message)

  4. Dependency Injection лучше прямого вызова:

<?php
// В классе
protected $logger;

public function __construct(LoggerChannelFactoryInterface $logger) {
  $this->logger = $logger->get('my_module');
}

$this->logger->error('...');

Эти примеры помогут отслеживать работу модуля и находить ошибки в продакшене.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *