Wygrzebane z GitHuba (6) : Monolog

Dzisiaj o biblio­tece Mono­log, która praw­do­po­dob­nie na dobre zado­mo­wiła się w niektó­rych apli­ka­cjach PHP. Służy do gene­ro­wa­nia różnego rodzaju logów. Jest bardzo fajnie prze­my­ślana i rozsze­rzalna. Możemy sobie prak­tycz­nie wszystko usta­wić tak jak chcemy, począw­szy od nazw plików dzien­nika, przez format zapisu, aż do dodat­ko­wych infor­ma­cji załą­cza­nych do poszcze­gól­nych wpisów.

Initial commit” na GitHu­bie powstał dokład­nie 16 lutego 2011 r. Mono­log liczył sobie wtedy zale­d­wie 383 linijki kodu. Już po kilku dniach autor doko­nał poważ­nych zmian w źródłach w celu dosto­so­wa­nia struk­tury i dzia­ła­nia biblio­teki do pytho­no­wego Logbook. W czerwcu 2011 r. biblio­teka zaczyna współ­pra­co­wać z Compo­se­rem. Ostat­nim „kamie­niem milo­wym” było urucho­mie­nie ciągłej inte­gra­cji w serwi­sie Travis w listo­pa­dzie 2011 r.

Jeśli idzie o ocenę jako­ści kodu to nie mam do czego się przy­cze­pić. Biblio­teka trzyma się nazew­nic­twa PSR-0 oraz stan­dar­dów PSR-1 i 2. Można śmiało używać stan­dar­do­wego SplC­las­sLo­adera lub autoloader.php wyge­ne­ro­wa­nego przez Compo­sera. Komen­ta­rze dot. stałych, zmien­nych, klas i metod są na tyle jasne, że łatwo można się poła­pać co do czego służy i jak to rozbudować.

Podsta­wowy sposób użycia wygląda tak:

// importujemy logger i podstawowa obsluge plikow
use Monolog\Logger;
use Monolog\Handler\StreamHandler;
 
// tworzymy obiekt logger i handler
$debugLogger = new Logger('moj_debug_logger');
 
// wybieramy plik i poziom waznosci wpisow, od ktorych beda zapisywane w dzienniku
$debugHandler = new StreamHandler(__DIR__.'/debug.log', Logger::DEBUG);
 
// umieszczamy handler w loggerze
$debugLogger->pushHandler($debugHandler);
 
// od teraz mozna umieszczac wpisy w loggerze np.
$chybaInteger = 1.0;
if (!is_integer($chybaInteger)) {
  $debugLogger->addDebug(
    'Nie podoba mi sie typ zmiennej $chybaInteger :' . gettype($chybaInteger)
  );
}

Loggery i handlery można ze sobą dowol­nie mieszać. Stwo­rzymy sobie 2 loggery: db_loggerapp_logger oraz 2 handlery: plików debug.log i powia­da­mia­jący mailem o poważ­nych błędach.

use Monolog\Logger;
use Monolog\Handler\StreamHandler;
use Monolog\Handler\NativeMailerHandler;
 
$appLogger = new Logger('app_logger');
$dbLogger = new Logger('db_logger');
 
$debugFileHandler = new StreamHandler(__DIR__.'/debug.log', Logger::DEBUG);
$appLogger->pushHandler($debugFileHandler);
$dbLogger->pushHandler($debugFileHandler);
 
$errorMailHandler = new NativeMailerHandler(
  'jakis@mail.com',
  'Powazny blad w aplikacji',
  'donotreply@moja_appka.pl',
  Logger::ERROR);
$appLogger->pushHandler($errorMailHandler);
$dbLogger->pushHandler($errorMailHandler);
 
// w pliku debug.log powstanie wpis
// [2012-07-15 12:57:46] app_logger.WARNING: Ostrzezenie [] []
// mail nie bedzie wyslany
$appLogger->addWarning('Ostrzezenie');
 
// powiedzmy, ze nie mozna polaczyc z baza danych
// blad krytyczny laduje w debug.log i zostaje wyslany mailem
$dbLogger->addAlert('Nie mozna polaczyc z baza danych');

Możemy również doda­wać infor­ma­cje dodat­kowe (tu nazy­wane Proces­sors), np. szczy­towe zuży­cie pamięci lub infor­ma­cje na temat żąda­nia HTTP za pomocą metody pushProcessor().

Jeśli jesz­cze nam mało to możemy sobie zmie­niać format zapisu logów za pomocą format­te­rów. Jeśli komu­ni­katy mają być prze­twa­rzane auto­ma­tycz­nie to pole­cam JsonFormatter.

Podobne wpisy:

  1. Wygrze­bane z GitHuba (2) : Imagine
  2. Wygrze­bane z GitHuba (1) : CSS Crush
  3. Wygrze­bane z GitHuba (3) : Validation
  4. Wygrze­bane z GitHuba (4) : PHP User Agent

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.

Możesz użyć następujących tagów oraz atrybutów HTML-a: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <p> <pre lang="" line="" escaped=""> <q cite=""> <strike> <strong>