Il modo migliore per accedere a un logger su un'applicazione / sito web in PHP

6

Di recente ho letto su PSR-3 e sono interessato a conoscere il meglio modo (i) di approccio all'implementazione di un logger attraverso un'applicazione web o un sito web. Capisco in che modo viene definito un logger e come possono essere implementati per PSR-3, ma per quanto riguarda l'accesso / referenziamento attraverso l'applicazione per varie esigenze di registrazione come eccezioni rilevate, eventi degni di nota, ecc.?

Mi sono venute in mente queste tre opzioni. Ce ne sono altri? Qual è l'approccio migliore?

  1. Oggetto globale - $logger->debug('foo')
  2. Istanza statica globale - Logger::debug('foo')
  3. tramite una sorta di metodo - $app->getLogger()->debug('foo')
  4. ... ecc ...

Una delle mie considerazioni è mantenere il codice necessario per fare riferimento al logger al minimo. Ad esempio, l'opzione 3 sopra sembra come se fosse piuttosto noioso recuperare il logger come quello per ogni eccezione rilevata, evento notabile, ecc., In tutta l'applicazione.

    
posta reformed 28.10.2016 - 15:46
fonte

2 risposte

3

Personalmente mi piace usare Dependency Injection. Ecco alcuni esempi:

class MyClass
{
   public function __constructor(\Psr\Log\LoggerInterface $logger)
   {
       $this->logger = $logger;
   }

   public function someMethod()
   {
      $this->logger->warning('some warning');
   }
}

L'unica cosa che devi fare è configurare il contenitore di iniezione delle dipendenze per usare la tua classe di logger concreta che implementa PSR3.

    
risposta data 01.02.2017 - 16:55
fonte
-2

Scriverò un'interfaccia chiamata ILogger e ILoggerFactory , l'implementazione di ILoggerFactory sarà una classe factory che restituirà un'implementazione concreta di ILogger che incapsula il framework di registrazione personalizzato che si desidera utilizzare (ad esempio, NLog o Log4Net). In questo modo tutti i tuoi progetti hanno bisogno di riferimenti a ILogger e ILoggerFactory e la fabbrica di registrazione personalizzata può essere iniettata.

    
risposta data 01.02.2017 - 19:52
fonte

Leggi altre domande sui tag