Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Error handling i logowanie
Forum PHP.pl > Forum > PHP
Foxer
Witam,

Postanowiłem ostatnio napisać własny error handler, który wraz z wyjątkami (PHP5) zajmował by się odpowiednio napotkanymi w trakcie użytkowania skryptu błędami. Te byłyby rekordowane do bazy lub pliku.

Postanowiłem nieco rozszerzyć swój mały projekt i rekordować wszystkie ważne zdarzenia i poczynania użytkowników (nie tylko te błędne) tworząc pliki logów. Tworząc tak szczegółowe logi, bardzo chciałbym aby w znalazły się w nich wszystkie błędy zwracane przez program w tym E_ERROR, E_PARSE, E_CORE_ERROR, E_CORE_WARNING, E_COMPILE_ERROR, E_COMPILE_WARNING i E_STRICT... resztę typów errorów z łatwością mogę dopisywać do logów za pomocą set_error_handler() i trigger_error().

Więc moje pytanie... Czy istnieje jakiś sposób aby "przechwytywać" informacje o w/w typach błędów? Chciałbym mieć zalogowane że o TEJ godzinie TEGO dnia, w TYM pliku, użytkownik napotkał E_PARSE o treści TAKIEJ smile.gif.
nospor
za bardzo nie kumam Twego problemu... o co ci chodzi? Napisales ze wiesz o set_error_handler(), czyli masz wszystko co ci potrzeba. w czym problem?
Cytat
Chciałbym mieć zalogowane że o TEJ godzinie TEGO dnia, w TYM pliku, użytkownik napotkał E_PARSE o treści TAKIEJ
Wszystko to masz gdy przechwycisz blad. Date i godzine to se sam pobierz chocby przy pomocy date()
Foxer
Właśnie, chodzi o to że zgodnie z manualem, funkcji set_error_handler" title="Zobacz w manualu php" target="_manual nie mogę używać do łapania błędów E_ERROR, E_PARSE, E_CORE_ERROR, E_CORE_WARNING, E_COMPILE_ERROR, E_COMPILE_WARNING i E_STRICT. Handler ustawiony przez tą funkcję wyłapie jedynie błędy typu: E_USER_ERROR, E_USER_WARNING, E_USER_NOTICE.

... a ja chciałbym przechwytywać wszystkie winksmiley.jpg
LamaMASTER
Jak robisz:
case E_CORE_WARNING

to nie działa?
nospor
aaa, oto biega. No a jak ty to sobie wyobrazasz? PARSE_ERROR leci wowczas, gdy masz blad w skladni php, czyli ze skrypt jest totalnie źle napisany i nie da sie skompilowac. jak wiec ty chcesz wylapac cos przy pomocy funkcji, ktora jest wlasnie napisana w skrypcie, ktorego nie da sie skompilowac smile.gif NIe da sie i juz (no chyba ze sie da winksmiley.jpg )
NIektorych bledow nie przechwycisz i basta. ale takie byki wystapuje niemalze nigdy przy dzialajacej juz aplikacji.
LamaMASTER
Z tego co mi wiadomo to Xaraya wychwytuje błędy składni plików php. Ale może robi to tak, że najpierw pobiera składnię includowanego pliku jakąś funkcją, evaluje go w buforze i jeżeli napotka błąd to wyświetla, nie wiem.
Foxer
Mhm, rzeczywiście, rozumiem. Ale jednak (pomęczę jeszcze)... przykładowo E_WARNING wyświetlany np. przy błędnym wykorzystaniu dowolnej funkcji lub nie podaniu odpowiednich jej parametrów. Czy taki error - błędne użycie funkcji - również jest jednoznaczne z brakiem możliwości poprawnej kompilacji?

Chodzi mi o sytuację w której serwer poprawnie przekompilował mój handler a następnie natknął się na E_WARNING. Error teoretycznie mógłby zostać już obsłużony przez mój handler, który zlogowałby błąd, bądź "zorientowałby się" w sytuacji winksmiley.jpg i zamienił wykorzystaną błędnie funkcję na inną czy też zrobił cokolwiek do czego go zaprogramuje.

Jeżeli plotę głupoty - przepraszam winksmiley.jpg to przemęczenie.
nospor
Cytat
Mhm, rzeczywiście, rozumiem. Ale jednak (pomęczę jeszcze)... przykładowo E_WARNING wyświetlany np. przy błędnym wykorzystaniu dowolnej funkcji lub nie podaniu odpowiednich jej parametrów. Czy taki error - błędne użycie funkcji - również jest jednoznaczne z brakiem możliwości poprawnej kompilacji?
Nie, czemu? skrypt sie skompilowal, a ze nie wszystko zostalo wykonane z odpowiednią ilsoci parametrow no to trudno, leci E_WARNING i ty go wlasnym handlerem mozesz przechwycic. nie widze problemu. sam zreszta tak robie
Foxer
Aha, myślałem że set_error_handler załatwi sprawę tylko z E_USER_WARNING, gdyż tak wynikało z manuala. Jednak jeżeli zajmie się też E_WARNING to częściowo rozwiąże moją zagwozdkę. Dzięki! smile.gif
nospor
Cytat
Aha, myślałem że set_error_handler załatwi sprawę tylko z E_USER_WARNING, gdyż tak wynikało z manuala.
A w ktorym miejscu tak wynikalo?
Napewno nie w tym:
Cytat
The following error types cannot be handled with a user defined function: E_ERROR, E_PARSE, E_CORE_ERROR, E_CORE_WARNING, E_COMPILE_ERROR, E_COMPILE_WARNING, and most of E_STRICT raised in the file where set_error_handler() is called.
smile.gif
Foxer
Nie, z definicji wynikało jasno które errory nie są obsługiwane heh... a przecież mogli napisać równie dobrze, które errory SĄ obsługiwane przez funkcję i nie byłoby problemu. Źle zinterpretowałem przykład numer 1. Uznałem, że przykład będzie przedstawiał wszystkie możliwe typy błędów uwzględnianych przez funkcję, zwłaszcza gdy zobaczyłem ustawiony tam error_reporting tylko na typy E_USER_*

Na dodatek powtarza się ta sytuacja w komentarzach do funkcji napisanych przez userów, nikt tam nie korzysta z E_WARNING, a jedynie z E_USER_*. Trzeba jednak zawsze wszystko sprawdzić samemu winksmiley.jpg. Pozdrawiam!
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.