Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Error handling i logowanie
Foxer
post 11.07.2006, 19:39:01
Post #1





Grupa: Zarejestrowani
Postów: 34
Pomógł: 0
Dołączył: 17.11.2003

Ostrzeżenie: (0%)
-----


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.


--------------------
Pozdrawiam,
Foxer
Go to the top of the page
+Quote Post
nospor
post 11.07.2006, 19:58:50
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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()


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Foxer
post 11.07.2006, 20:05:43
Post #3





Grupa: Zarejestrowani
Postów: 34
Pomógł: 0
Dołączył: 17.11.2003

Ostrzeżenie: (0%)
-----


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


--------------------
Pozdrawiam,
Foxer
Go to the top of the page
+Quote Post
LamaMASTER
post 11.07.2006, 20:10:51
Post #4





Grupa: Zarejestrowani
Postów: 160
Pomógł: 0
Dołączył: 27.03.2006

Ostrzeżenie: (0%)
-----


Jak robisz:
case E_CORE_WARNING

to nie działa?
Go to the top of the page
+Quote Post
nospor
post 11.07.2006, 20:12:08
Post #5





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
LamaMASTER
post 11.07.2006, 20:21:17
Post #6





Grupa: Zarejestrowani
Postów: 160
Pomógł: 0
Dołączył: 27.03.2006

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
Foxer
post 11.07.2006, 20:25:13
Post #7





Grupa: Zarejestrowani
Postów: 34
Pomógł: 0
Dołączył: 17.11.2003

Ostrzeżenie: (0%)
-----


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.


--------------------
Pozdrawiam,
Foxer
Go to the top of the page
+Quote Post
nospor
post 11.07.2006, 20:28:51
Post #8





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Foxer
post 11.07.2006, 20:40:53
Post #9





Grupa: Zarejestrowani
Postów: 34
Pomógł: 0
Dołączył: 17.11.2003

Ostrzeżenie: (0%)
-----


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


--------------------
Pozdrawiam,
Foxer
Go to the top of the page
+Quote Post
nospor
post 11.07.2006, 20:46:52
Post #10





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Foxer
post 11.07.2006, 20:56:07
Post #11





Grupa: Zarejestrowani
Postów: 34
Pomógł: 0
Dołączył: 17.11.2003

Ostrzeżenie: (0%)
-----


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!


--------------------
Pozdrawiam,
Foxer
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 25.07.2025 - 10:12