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í.
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.
Tvůrce webů z Brna se specializací na Drupal, WordPress a Symfony. Acquia Certified Developer & Site Builder. Autor několika knih o Drupalu.
Web Development Director v Lesensky.cz. Ve volných chvílích podnikám výlety na souši i po vodě. Více se dozvíte na polzer.cz a mém LinkedIn profilu.
Přidat komentář