Добрый день, есть необходимость сделать динамическое логирование в хобби проекте.
Представим ситуацию, у нас множество пользователей и мы хотим логировать действия каждого из них в отдельных журналах. Я конечно нашел выход из ситуации, но вот думаю может можно как то и по другому сделать.
Как я реализовал это:
Объявил кастомный канал
config/logging.php
'custom' => [
'driver' => 'custom',
'via' => App\Logging\CreateCustomLogger::class,
],
2. Создал обработчик как в документации
app/logging/CreateCustomLogging.php
public function __invoke(array $config)
{
return new Logger('name');
}
3. Добавил метод в интерфейс и сделал его реализацию
app/repositories/OfficeLogger.php
use Monolog\Handler\StreamHandler;
use Monolog\Logger;
public function log(string $path, string $message, array $context)
{
\Log::channel('custom')->pushHandler(new StreamHandler(storage_path($path), Logger::DEBUG))->info($message, $context);
}
А потом вызываю там где мне необходимо, вот так:
app('App\Repositories\Interfaces\OfficeLoggerInterface')->log('app/office-logger/1/47/.'.date('Y').'/'.date('d-m-Y').'.log', 'Hello world message', $context);
Наверное можно как то лучше сделать?
Нормально ли постоянно использовать app('interface')?