5. внедрять логер в зависимости от интерфейса. В DI есть возможность вызвать метод setLogger в зависимости от интерфейса.
Например вы создаете интерфейсы:
FileLoggerAware extends LoggerAwareInterface
MysqlLoggerAware extends LoggerAwareInterface
теперь конфигурирует DI
$container->share(FileLogger::class,function(){
return new NullLogger;//тут реализация file логера
});
$container->share(MysqlLogger::class,function(){
return new NullLogger;//тут реализация Mysql логера
});
$container
->inflector(FileLoggerAware::class)
->invokeMethod('setLogger', [FileLogger::class])
;
$container
->inflector(MysqlLoggerAware::class)
->invokeMethod('setLogger', [MysqlLogger::class])
;
и все в нужном классе делаешь, (но все классы должны работать через awaring di, прилетать автоматом через конструктор)
class MyClass implements FileLoggerAware
{
use LoggerAwareTrait;
}
ссылки:
https://github.com/php-fig/log/blob/master/Psr/Log...
https://container.thephpleague.com/3.x/inflectors/