Apache log4php: pomůcka pro ladění a logování vašich skriptů v PHP

Před pár dny jsem dostal tip na zajímavý nástroj, který jsem dříve neznal. Považuji to za svou chybu, protože Apache log4php je skvělá pomůcka, která vám usnadní tvorbu a ladění PHP skriptů.
reklama

Protože drtivou většinu projektů psaných v PHP realizuji s využitím redakčního systému Drupalu a jeho API, nemusel jsem zatím nijak výrazně řešit potřebu nezávislého logování. Pro jednoduché zaznamenání řetězcových proměnných používám funkci watchdog(), která do logu Drupalu zapíše text, který ji předáte jako argument. Volání je například takovéto:

watchdog('polzer','Proměnná $obsah obsahuje '.$obsah);

Ve výpisu posledních hlášení v logu si pak můžete všechna tato hlášení nechat zobrazit pomocí filtru, kde se vám objeví první argument předaný funkci watchdog(), v tomto případě slovo polzer.

Pro okamžité zobrazování obsahu proměnných a pokročilejší ladění používám modul Devel. Po jeho instalaci můžete začít ve zdrojových kódech pro moduly a témata Drupalu používat funkci dsm(). Jako argument jí předáte nějakou proměnnou a při načtení stránky se vám oblasti pro výpis hlášení na stránce zobrazí klikací pohled na obsah proměnné. Velmi užitečné například u objektů a polí.

Devel

Ovšem nejen Drupalem živ je drupalista, takže občas jsem něco podobného postrádal při tvorbě mimo tento systém. Tedy, tušil jsem, že nějaký nástroj bude k dispozici, ale aktivně jsem jej nehledal. Když jsem nedávno dostal tip na Apache log4php, byl jsem za něj neskutečně rád. Pro ty z vás, kdo jej taky neznáte, je určen tento článek.

Co umí Apache log4php?

Všichni jistě dobře znáte webový server Apache. Ovšem pod tímto názvem je k dispozici vícero produktů a nástrojů. Jedním z nich je i logovací skript, který vám usnadní vývoj aplikací pro PHP a webserver Apache.

Log4php funguje tak, že dovede do souboru nebo na obrazovku vypsat obsah proměnných, které mu předáte. Nemáte-li nějaký pokročilý debugger jako například VS.PHP nebo Zend Studio, Komodo IDE, Eclipse či samotný Xdebug, přijde vám to vhod. Navíc je použití log4php velice snadné.

Začlenění log4php do vašich skriptů

Ve svém projektu si připravte složku pojmenovanou například logger. Ze staženého balíčku s Apache log4php vykopírujte obsah složky src/main/php do této složky. Ve svém skriptu zkuste jednoduchý zápis, viz následující ukázka. Pokud po spuštění skriptu uvidíte hlášení, pak jste log4php úspěšně začlenili do svého projektu.

<?php
    include('logger/Logger.php');
    $logger = Logger::getLogger("main");
    $logger->debug("Informace do logu");  
?>

Základní použití log4php s logováním do souboru

Ne vždy je zápis různých ladicích hlášení na obrazovku potřeba. Navíc, log4php můžete použít i na produkčním serveru třeba k tomu, abyste si do něj ukládali různé informace o tom, co se v aplikaci událo. Jedním z možných scénářů použití je ukládání obsahu odesílaného e-mailu do logu. Například proto abyste mohli dohledat objednávky, které z nějakého důvodu neodešly z objednávkového formuláře, jehož tvorbu jsme si ukazovali před pár dny.

Apache log4php je možné nastavit (mimo jiné) pomocí XML souboru, ve kterém lze specifikovat celou řadu vlastností. Ukážeme si, jak vytvořit ukládání logu do souboru debug.log. Připravte si soubor config.xml a vložte do něj následující obsah:

<configuration xmlns="http://logging.apache.org/log4php/">
 <appender name="myAppender" class="LoggerAppenderFile">
  <param name="file" value="debug.log" /> 
 </appender>
 <root>
  <level value="DEBUG" />
   <appender_ref ref="myAppender" />
 </root>
</configuration>	

Touto konfigurací loggeru sdělíte, že chcete vytvářet soubor debug.log a zapisovat do něj veškeré informace předané loggeru přes funkci debug(). Nyní si svůj skript PHP upravte do následující podoby. Přibylo načtení konfiguračního souboru a na konci pak jednoduché vytvoření pole v PHP a jeho zápis do logu.

<?php
    include('logger/Logger.php');
    Logger::configure('config.xml');
    $logger = Logger::getLogger("main");
    $logger->debug("Informace do logu");  
    $myarray = array('aaa','bbb', 'ccc');
    $logger->debug($myarray);
?>

Spusťte skript a podívejte se do vytvořeného souboru debug.log. Objeví se v něm jak jednoduché textové hlášení, tak srozumitelný obsah pole, které jste do logu poslali. Podobně by byl rozepsaný obsah objektu.

DEBUG - Informace do logu
DEBUG - Array
(
    [0] => aaa
    [1] => bbb
    [2] => ccc
)

Doplnění data záznamu aneb šablona logu

Ze spousty nastavení, která je možné doplnit do konfiguračního souboru XML, jsem vybral jednoduchou ukázku s použitím šablony záznamu. Do našeho původního config.xml jen doplníte uzel <layout>, ve kterém je uveden řetězec s nahrazovacími vzorky pro datum záznamu a samotnou předávanou hodnotu.

<configuration xmlns="http://logging.apache.org/log4php/">
 <appender name="myAppender" class="LoggerAppenderFile">
  <param name="file" value="debug.log" />
  <layout class="LoggerLayoutPattern">
   <param name="conversionPattern" value="%date [%logger] %message%newline" />
  </layout>  
 </appender>
 <root>
  <level value="DEBUG" />
   <appender_ref ref="myAppender" />
 </root>
</configuration>		

Pokud nyní spustíte svůj PHP skript, doplní se na konec logu stejné hodnoty jako v předchozím případě, jen budou doplněny o datum a přesný čas zápisu do logu:

2012-10-23T16:40:17+02:00 [main] Informace do logu
2012-10-23T16:40:17+02:00 [main] Array
(
    [0] => aaa
    [1] => bbb
    [2] => ccc
)

Další informace o Apache log4php

Apache log4php nabízí mnoho dalších nastavení a například různé úrovně logování pro sledování debugovacích hlášení, trasování, zápisy varování, chyb či fatálních chyb. Každá z těchto informací přitom může být uložena do samostatného souboru, stačí si vše správně nakonfigurovat v příslušném souboru XML.

Zajímavostí je skutečnost, že logy nemusejí být ukládány jen do souboru nebo vypisovány do standardního výstupu. Lze je směřovat i do e-mailu, databáze, socketů nebo syslogu.

Na domovské stránce Apache log4php najdete kromě balíčku pro stažení i přehlednou dokumentaci, která vás provede veškerým pokročilým nastavením tohoto loggeru.

Tagy
Autor článku: Jan Polzer

Tvůrce webů z Brna se specializací na Drupal a Symfony. Obojí také školím spolu se základy SEO. Jsem Acquia Certified Developer a Site Builder a napsal jsem několik knih o Drupalu. Ve volných chvílích cestuji a podnikám výlety. Více se dozvíte na mém firemním webu.

reklama

Komentáře k článku

Přidat komentář

Filtered HTML

  • Povolené HTML značky: <a href hreflang> <em> <strong> <cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <p> <br>
  • Řádky a odstavce se zalomí automaticky.
  • Web page addresses and email addresses turn into links automatically.

Odesláním komentáře souhlasíte s podmínkami Ochrany osobních údajů

reklama
Sledujte Maxiorla na Facebooku

Maxiorel na Facebooku

Poslední komentáře
reklama
Nové diskuze
reklama
Hosting pro Drupal a WordPress

Hledáte český webhosting vhodný nejenom pro redakční systém Drupal? Tak vyzkoušejte Webhosting C4 za 1200 Kč na rok s doménou v ceně, 20 GB prostoru a automatické navyšováním o 2 GB každý rok. Podrobnosti zde.

Knihy o Drupalu

Kniha Drupal 8 Kniha Drupal 7 333 tipů a triků pro Drupal
Více na KnihyPolzer.cz

Co píší na Interval.cz
@maxiorel na Twitteru

Maxiorel na Twitteru