Моя цель
Я хочу добавить текущий идентификатор пользователя в строки журнала (я использую драйвер syslog) в качестве пользовательского форматирования журнала.
Как часть моего исследованияЯ видел хорошие пакеты и учебные пособия для регистрации активности пользователей в базе данных.Но, по крайней мере, на данный момент я намерен двигаться вперед без дополнительных пакетов и войти в систему syslog , как я делаю в настоящее время.
Типичный вызов журнала в моем приложении будет выглядеть так:
logger()->info("Listing all items");
Я также мог бы сделать что-то вроде:
$uid = Auth::id();
logger()->info("Listing all items for {$uid}");
Это было бы похоже на то, что предлагает пример документации:
В настоящее время я делаю это для определенных строк, но так как я хотел бы иметь это во всех вызовах журнала, это будет похоже на повторение себя каждый раз, когда я что-то записываю.
Желаемый вывод
Текущий:
Dec 10 23:54:05 trinsic Laravel[13606]: local.INFO: Hello world []
Желаемый:
Dec 10 23:54:05 trinsic Laravel[13606]: local.INFO [AUTH_USER_ID=2452]: Hello world []
Мой подход
Я попытался нажать регистратор с успехом наизменив формат, , как предложено в docs .
Но моя текущая проблема заключается в том, что в момент, когда класс CustomizeFormatter
исключен, идентификатор Auth, похоже, пока не решен (неуверен в этом, но dd()
возвращает ноль, так что это мое предположение):
<?php
namespace App\Logging;
use Illuminate\Support\Facades\Auth;
use Monolog\Formatter\LineFormatter;
class CustomizeFormatter
{
/**
* Customize the given logger instance.
*
* @param \Illuminate\Log\Logger $logger
* @return void
*/
public function __invoke($logger)
{
$authUser = Auth::id(); // null
foreach ($logger->getHandlers() as $handler) {
$formatter = new LineFormatter("%channel%.%level_name% [AUTH={$authUser}]: %message% %extra%");
$handler->setFormatter($formatter);
}
}
}
Настройка
Laravel 5.7 Драйвер журнала: syslog
// config/logging.php
'syslog' => [
'driver' => 'syslog',
'tap' => [ App\Logging\CustomizeFormatter::class ],
'level' => 'debug',
],
Мой вопрос (ы)
- Есть ли способ разрешить аутентификацию пользователя на этом этапе или любой другой подход для достиженияэто?