PHP klase / Zend Framework / Timestamp filter za Zend_Log
Pre nekog vremena sam uzeo da doterujem moj servis Da ne bude kasno, pa sam, između ostalog, rešio da poradim i na malo kompleksnijoj implementaciji logovanja, budući da jednostavno moram da pratim da li slučajno nekom korisniku nije poslat konfirmacioni email pri prijavi, ili možda glavni skript koji se pokreće cron-om nije izvršen, i slično. S toga sam odlučio da u igru ubacim Zend_Log komponentu Zend Framework-a, koja omogućava jednostavnu implementaciju logovanja.
Pomenuta komponenta poseduje tkz. filtere, koji, kao što im samo ime kaže, omogućavaju filtriranje log-ova pre nego što isti budu sačuvani. U paketu sa Zend_Log komponentom dolaze tri filtera, i to Message (za filtriranje po poruci nekog log-a), Priority (za filtriranje po prioritetu) i Suppress (jednostavan bool filter). Za moje potrebe Priority filter mi je jako dobro došao, jer mi je bilo potrebno da log poruke upisujem u dva različita fajla u zavisnosti od prioriteta samog log-a. Ali, pri svemu tome, trebao sam da implementiram i upisivanje log poruka u zavisnosti od vremena kada se neki log event dogodio. Kako filter koji bi zadovoljio tako nešto ne postoji u okviru Zend_Log komponente, rešio sam da napravim jedan takav... 
NP_Log_Filter_Timestamp predstavlja custom Zend_Log filter koji omogućava filtriranje log event-a po vremenu pojave istog. Filtriranje je moguće vršiti u odnosu na različite delove datuma/vremena, npr. dan, mesec, dan u nedelji, itd., zahvaljujući tome što ovaj filter utilizira PHP-ovu idate() funkciju.
Svaka instanca NP_Log_Filter_Timestamp klase predstavlja jedno pravilo za filtiranje log događaja na osnovu njihovog timestamp svojstva. Ta instanca se može dodati bilo specifičnom log writer-u ili samoj Zend_Log instanci, na način opisan u manual-u. Pravilo za filtiranje se definiše pomoću sledećih parametara:
- format - predstavlja karakter koji se može proslediti kao prvi argument PHP-ovoj idate() funkciji,
- value - željena vrednost nekog dela datuma/vremena, koja će biti korišćena za poređenje,
- operator - operator za poređenje (npr. "==", "<", ">=", itd.), koji definiše na koji način će neki deo datuma/vremena pojave log događaja biti poređen sa željenom vrednošću definisanom kroz "value" parametar.
Sledi primer kreiranja instance NP_Log_Filter_Timestamp filtera:
$filter = new NP_Log_Filter_Timestamp('w', 1, NP_Log_Filter_Timestamp::EQ);
Ovim će biti kreiran filter koji će da propušta isključivo log event-e koji su se desili u ponedeljak (w EQ 1). EQ je naravno konstanta iza koje stoji konkretan operator poređenja, u ovom slučaju "==".
Članak o ovoj mojoj klasi sam objavio i na DevZone-u, a on u stvari predstavlja varijantu istog ovog teksta, ali na engleskom jeziku.
Taj članak možete pogledati ovde.
U nastavku je link za preuzimanje izvornog kôda ovog filtera...

