Hi nochmal,
habe es mir jetzt mal angeschaut und Du hast Recht, der Hook ist hier nicht möglich aber ich habe einen Weg gefunden. Du überschreibst einfach den Service im Container mit Deinem eigenen Childservice.
// in der Bootstrap
public static function getSubscribedEvents()
{
return [
'Enlight_Bootstrap_AfterInitResource_corelogger' => 'afterInitLogger',
];
}
public function afterInitLogger(\Enlight_Event_EventArgs $arguments)
{
if(Shopware()->Container()->has('corelogger')){
$newLog = new CoreLogger();
$newLog->initFromOldObject(Shopware()->Container()->get('corelogger'));
Shopware()->Container()->set('corelogger', $newLog);
}
}
// der neue Service
namespace DeinPlugin\Service;
use Shopware\Components\Logger;
class CoreLogger extends Logger
{
public function initFromOldObject(Logger $obj)
{
$this->setHandlers($obj->getHandlers());
$this->withName($obj->getName());
foreach ($obj->getProcessors() as $processor) {
$this->pushProcessor($processor);
}
}
public function addError($message, array $context = array())
{
var_dump('here we go');
}
}
Gibt nun bei mir wenn ich den corelogger mit addError() aufrufe ‘here we go’ aus. So kannst Du also alle Log-Levels oder im init die Handler und Processor beliebig anpassen.
Wenn Du Deinen neuen Service dann sowohl für die corelogger als auch pluginlogger service ids registrierst hast Du alle LogEvents abgefangen, mit Ausnahme von denen, welchen ihren Eigenen verwenden.