Installation:
composer require divbyzero/logger-aware-bundle
Add to config/bundles.php:
return [
// ...
DivByZero\LoggerAwareBundle\LoggerAwareBundle::class => ['all' => true],
];
Basic Usage:
@LoggerAware to auto-inject a logger:
use DivByZero\LoggerAwareBundle\Annotation\LoggerAware;
class MyService
{
#[LoggerAware]
private $logger;
public function doSomething()
{
$this->logger->info('Action performed');
}
}
First Use Case:
$this->logger = $this->container->get('logger')) with the annotation.Service-Level Logging:
@LoggerAware to services handling business logic (e.g., UserService, PaymentGateway).class OrderService
{
#[LoggerAware]
private $logger;
public function createOrder(Order $order)
{
$this->logger->debug('Order creation started', ['order_id' => $order->id]);
// ...
}
}
Controller Logging:
class ApiController
{
#[LoggerAware]
private $logger;
public function index(Request $request)
{
$this->logger->info('API request', [
'path' => $request->getPathInfo(),
'method' => $request->getMethod(),
]);
// ...
}
}
Event Listeners/Subscribers:
class UserRegisteredListener
{
#[LoggerAware]
private $logger;
public function __invoke(UserRegisteredEvent $event)
{
$this->logger->info('User registered', ['email' => $event->getUser()->email]);
}
}
config/packages/divbyzero_logger_aware.yaml:
divbyzero_logger_aware:
services:
App\Service\MyService: 'app.logger.my_service'
Psr\Log\LoggerInterface, so use standard methods (emergency(), alert(), etc.).monolog.yaml) to route logs to files, databases, or external services.Annotation Processing:
bundles.php.@LoggerAware (case-sensitive in annotations).php bin/console debug:container | grep logger
Circular Dependencies:
LoggerFactory service).private properties to prevent accidental overrides.Performance Overhead:
php bin/console debug:container App\Service\MyService
debug vs. info).Custom Annotations: Extend the bundle to support additional metadata (e.g., log level hints):
#[LoggerAware(level: 'debug')]
private $logger;
(Requires bundle customization; check Annotation/LoggerAware.php.)
Dynamic Logger Names: Use a callback to generate logger names dynamically:
divbyzero_logger_aware:
services:
App\Service\DynamicService: '@=service("logger").createLogger("dynamic.'.container.get('request_stack')->getCurrentRequest()->getPathInfo().'")'
Integration with Other Bundles:
SensioFrameworkExtraBundle for controller logging.NelmioApiDocBundle to log API documentation generation.How can I help you explore Laravel packages today?