Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [LR] Produkcja i błędy
markonix
post 27.10.2017, 22:48:35
Post #1





Grupa: Zarejestrowani
Postów: 2 681
Pomógł: 287
Dołączył: 16.12.2008
Skąd: Śląsk

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


Laravel respektuje proste
error_reporting(0);
ini_set('display_errors', 0);
i chyba najlepszą opcją jest wrzucenie tego w App providera? Oczywiście z warunkiem, że tylko dla produkcji.
Tylko kiedyś nadejdzie taki moment, że będę miał za dużo czasu baaasmiley.gif i przejże sobie logi na produkcji aby ponaprawiać wszystkie notice'y które się tam pojawiły. Tylko powyższe wyłącza błędy całkowicie.
No i tu mam problem - jak zachować logowanie błędów (póki co w pliku, ale w przyszłości coś ambitniejszego), ale zarazem zezwolić na wykonanie skryptu do końca gdy wywali error o niskiej szkodliwości?


--------------------
Go to the top of the page
+Quote Post
Pyton_000
post 28.10.2017, 13:54:36
Post #2





Grupa: Zarejestrowani
Postów: 7 798
Pomógł: 1373
Dołączył: 26.10.2005

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


APP_DEBUG = false ppowinno załatwiać sprawę.

PS. Pamiętam wink.gif

Ten post edytował Pyton_000 28.10.2017, 13:55:11
Go to the top of the page
+Quote Post
markonix
post 30.10.2017, 14:01:01
Post #3





Grupa: Zarejestrowani
Postów: 2 681
Pomógł: 287
Dołączył: 16.12.2008
Skąd: Śląsk

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


APP_DEBUG oczywiście nie załatwia sprawy bo to by było zbyt trywialne.
Ta zmienna determinuje wyłącznie format zwracanych błędów - przy true zwraca informacje o błędzie do debugowania, a przy false zwraca tylko widok Oopps.


--------------------
Go to the top of the page
+Quote Post
r4xz
post 30.10.2017, 22:31:39
Post #4





Grupa: Zarejestrowani
Postów: 673
Pomógł: 106
Dołączył: 31.12.2008

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


Nie rozumiem jaki jest w tym problem, wręcz powiedziałbym że jest to bardzo dobre zachowanie. Pewnie rozwiązanie swojego problemu znajdziesz w dokumentacji, w szczególności w sekcji "Errors & Logging".


--------------------
Go to the top of the page
+Quote Post
markonix
post 31.10.2017, 00:37:45
Post #5





Grupa: Zarejestrowani
Postów: 2 681
Pomógł: 287
Dołączył: 16.12.2008
Skąd: Śląsk

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


Takie czyli jakie? Nie puszczanie na produkcji aplikacji gdy natrafi na "notice error" to dobre zachowanie?

Link, który wysłałeś dotyczy logowania błędów, nie ma związku z problemem który poruszam. Logować chce wszystko.

Ten post edytował markonix 31.10.2017, 00:42:12


--------------------
Go to the top of the page
+Quote Post
viking
post 31.10.2017, 04:55:45
Post #6





Grupa: Zarejestrowani
Postów: 5 255
Pomógł: 884
Dołączył: 30.08.2006

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


Notice to też błąd który może doprowadzić do wywalenia się całej aplikacji więc nie powinno go być już na etapie tworzenia kodu.


--------------------
Go to the top of the page
+Quote Post
Pyton_000
post 31.10.2017, 08:27:42
Post #7





Grupa: Zarejestrowani
Postów: 7 798
Pomógł: 1373
Dołączył: 26.10.2005

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


Czyli chcesz aby aplikacja działała pomimo że wywali się error?
Go to the top of the page
+Quote Post
batman
post 31.10.2017, 10:59:46
Post #8





Grupa: Moderatorzy
Postów: 2 902
Pomógł: 266
Dołączył: 11.08.2005
Skąd: 127.0.0.1




@markonix
Do logowania błędów na produkcji polecam Bugsnag, Sentry lub coś podobnego. Ja korzystam z tego pierwszego. Jeśli lubisz bawić się w zaawansowane raportowanie i monitorowanie, sprawdź Logstash.


--------------------
I would love to change the world, but they won't give me the source code.
My software never has bugs. It just develops random features.
--------------------
blog
Kuchnia Kopytka
www.wykangurzeni.pl
Go to the top of the page
+Quote Post
markonix
post 31.10.2017, 17:24:35
Post #9





Grupa: Zarejestrowani
Postów: 2 681
Pomógł: 287
Dołączył: 16.12.2008
Skąd: Śląsk

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


Cytat(viking @ 31.10.2017, 05:55:45 ) *
Notice to też błąd który może doprowadzić do wywalenia się całej aplikacji więc nie powinno go być już na etapie tworzenia kodu.

baaasmiley.gif

Cytat(Pyton_000 @ 31.10.2017, 09:27:42 ) *
Czyli chcesz aby aplikacja działała pomimo że wywali się error?

Tak, notice gdy zabraknie przy wyświetlaniu widoku jakiejś zmiennej nie jest dla mnie wystarczającym powodem aby wyłączać całą stronę.
Nie wiem jak ale w Codeigniter tak właśnie mam, że notice nie blokują strony bo się zdarzają bo mam je w logach, a nie ma bata (a teraz już motywacji bo przepisuje całość) aby wyłapać wszystko.

Cytat(batman @ 31.10.2017, 11:59:46 ) *
@markonix
Do logowania błędów na produkcji polecam Bugsnag, Sentry lub coś podobnego. Ja korzystam z tego pierwszego. Jeśli lubisz bawić się w zaawansowane raportowanie i monitorowanie, sprawdź Logstash.

Logowanie błędów takie bardziej PRO jak najbardziej ale do tego przejdę później, ale na razie rozkminiam etap wcześniej.

Edit:
Popatrzyłem jak to jest w CI zrobione.
  1. ini_set('display_errors', 0);
  2. if (version_compare(PHP_VERSION, '5.3', '>='))
  3. {
  4. error_reporting(E_ALL & ~E_NOTICE & ~E_DEPRECATED & ~E_STRICT & ~E_USER_NOTICE & ~E_USER_DEPRECATED);
  5. }
  6. else
  7. {
  8. error_reporting(E_ALL & ~E_NOTICE & ~E_STRICT & ~E_USER_NOTICE);

I nie wiem czy tu nie ma odpowiedzi smile.gif
display_errors i error_reporting zawsze myślałem, że to tylko komplementarne ustawienia, ale teraz jak się temu przyjrzałem to są to osobne ustawienia jak same ich nazwy wskazują - wyświetlanie błędów i ogólnego raportowania. To teraz moje pytanie brzmi czy zgapić z CI i wstawić to do Laravel'a czy macie inne sugestie - czy da się kontrolować na poziomie aplikacji. Błędy poważne takie jak błędy bazy danych też bym obsłużył inaczej aniżeli wywalenie "Nie udało się" na całą stronę, wg mnie najbardziej userfrielndy będzie wyłapanie tego, zalogowanie oczywiście, a usera np. wrócić na poprzednią stronę już z flash komunikatem, że operacja się nie powiodła itp.

Ten post edytował markonix 31.10.2017, 17:34:50


--------------------
Go to the top of the page
+Quote Post
memory
post 31.10.2017, 18:24:40
Post #10





Grupa: Zarejestrowani
Postów: 616
Pomógł: 84
Dołączył: 29.11.2006
Skąd: bełchatów

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


Pytasz się o zgodę czy o rozwiązanie ? Bo jak o zgodę to nie. Laravel łapie wszystkie błędy więc pozostaje ci samemu je obsłużyć.
Go to the top of the page
+Quote Post
Pyton_000
post 31.10.2017, 18:46:44
Post #11





Grupa: Zarejestrowani
Postów: 7 798
Pomógł: 1373
Dołączył: 26.10.2005

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


Tylko że Laravel rejestruje własne exceptionHandlers i jak już złapie error to nie wypuści go i jedynine co możesz zrobić to obsłużyć go i ew. przekierować go gdzieś lub wyrenderować własny widok.
Go to the top of the page
+Quote Post
markonix
post 31.10.2017, 18:51:18
Post #12





Grupa: Zarejestrowani
Postów: 2 681
Pomógł: 287
Dołączył: 16.12.2008
Skąd: Śląsk

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


Gdyby łapał, a następnie pozwolił mi wybrać odpowiednie akcje było by ok (np. na podstawie ENVIRONMENT podejmowałbym odpowiednie kroki).
https://laravel.com/docs/5.5/errors#the-exception-handler
Cytat
Sometimes you may need to report an exception but continue handling the current request. The report helper function allows you to quickly report an exception using your exception handler's report method without rendering an error page:

To brzmi obiecująco.


--------------------
Go to the top of the page
+Quote Post
Pyton_000
post 31.10.2017, 19:01:20
Post #13





Grupa: Zarejestrowani
Postów: 7 798
Pomógł: 1373
Dołączył: 26.10.2005

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


Ale to jest tylko jak samemu sobie łapiesz wyjątki, wtedy możesz tylko zaraportować.
Go to the top of the page
+Quote Post
markonix
post 1.10.2018, 18:09:35
Post #14





Grupa: Zarejestrowani
Postów: 2 681
Pomógł: 287
Dołączył: 16.12.2008
Skąd: Śląsk

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


Laravel 5.7 i ciągle mam problem aby to dobrze skonfigurować.

Jestem albo w stanie wyłączyć błędy NOTICE całkowicie (brak przerwania skryptu, brak informacji w logach), albo wyświetlić defaultowy błąd na całą stronę (z debugiem albo bez).
Error_report i display_errors próbowałem wszystkie kombinacje.


--------------------
Go to the top of the page
+Quote Post
Pilsener
post 1.10.2018, 19:13:22
Post #15





Grupa: Zarejestrowani
Postów: 1 590
Pomógł: 185
Dołączył: 19.04.2006
Skąd: Gdańsk

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


Cytat(markonix @ 27.10.2017, 21:48:35 ) *
Laravel respektuje proste
error_reporting(0);
ini_set('display_errors', 0);
- po to się używa frameworka, żeby nie majstrować przy ustawieniach PHP i dostosować aplikację do środowiska a nie odwrotnie.

Cytat(markonix @ 27.10.2017, 21:48:35 ) *
No i tu mam problem - jak zachować logowanie błędów (póki co w pliku, ale w przyszłości coś ambitniejszego), ale zarazem zezwolić na wykonanie skryptu do końca gdy wywali error o niskiej szkodliwości?
- w każdym lepszym fw jest coś takiego jak logger i error handler - obie te rzeczy zazwyczaj można niezależnie od siebie konfigurować. Standardowe zachowanie to przechwytywanie wszystkich błędów czy notatek i rzucanie zamiast nich wyjątków, następnie ujednolicona obsługa tych wyjątków.

Jest to opisane w dokumentacji Larwy:
https://laravel.com/docs/5.7/errors
Jest też fragment, który szczególnie Ciebie powinien zainteresować:
Cytat
Sometimes you may need to report an exception but continue handling the current request.
Go to the top of the page
+Quote Post
markonix
post 2.10.2018, 16:22:09
Post #16





Grupa: Zarejestrowani
Postów: 2 681
Pomógł: 287
Dołączył: 16.12.2008
Skąd: Śląsk

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


Cytat(Pilsener @ 1.10.2018, 20:13:22 ) *
- po to się używa frameworka, żeby nie majstrować przy ustawieniach PHP i dostosować aplikację do środowiska a nie odwrotnie.

No widzisz, dokładnie tak samo uważam ale 90% wyników na stacku na frazę "ukrywania błędów" na produkcji to wyłączenie tych błędów przed framework'iem przez php, ini czy htaccess.

Cytat(Pilsener @ 1.10.2018, 20:13:22 ) *
Jest też fragment, który szczególnie Ciebie powinien zainteresować:

Jakbyś wzrokowo przejrzał ostatnie moje posty, to sam się do tego fragmentu odniosłem tylko, że ja nie chce nadpisywać handlingu Laravela. Chce aby działało wszystko jak teraz z wyjątkiem nie wywalania się na notice (i może deprecated). Ale spróbuje jeszcze. Dziwie się, że nie znajduje żadnych gotowych rozwiązań bo "stan", które chce osiągnąć wg mnie jest najbardziej prawidłowy na produkcji..


edit:

Próbuje w metodzie render coś zmajstrować ale nie wiem jak w niej zrobić wyjątki.
Problemy jakie mam to wykrycie kategorii Exception (czy to jest notice czy nie). getSeverity() zwraca mi zawsze 1, jedynie to jakoś ma sens:
  1. $exception->getPrevious() instanceof FatalThrowableError)

Dla notice nie jest to fatal.. I może to jest to czego szukam ale ok - wiem już, że nie chce wywalać użytkownikowi strony i przejść dalej więc jak poinstruować o tym FW? Muszę w metodzie render() coś zwrócić, dokładniej to jakiś Response ale jaki?

Ten post edytował markonix 2.10.2018, 16:22:48


--------------------
Go to the top of the page
+Quote Post
Pilsener
post 2.10.2018, 20:39:45
Post #17





Grupa: Zarejestrowani
Postów: 1 590
Pomógł: 185
Dołączył: 19.04.2006
Skąd: Gdańsk

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


Na produkcji wyłącza się jedynie wyświetlanie błędów - tak na wszelki wypadek, bo może być np. błąd podczas uruchamiania error handlera smile.gif Jednak tak czy inaczej logi muszą być, całkowite wyłączanie błędów (zwłaszcza fatali) to przegięcie ale znam to i wciąż mam tego typu problemy: biała strona (albo strona błędu) i nic w logach.

Tak czy inaczej musisz napisać kawałek własnego kodu, nadpisać handling Larwy, bo defaultowy jest do bani. Larwa używa Whoopsa, który jest świetnym tego typu komponentem, ale ma tą brzydką wadę, że nie puszcza niczego do logów jeśli jest włączony - dlatego najlepiej zarejestrować własny handler i tak właśnie robiłem w apkach na Larwie a także tych, które korzystały jedynie z Whoopsa.

Jak znajdziesz lepszy sposób to oczywiście też chętnie tego użyję smile.gif

I trzeba mieć świadomość, że z Larwą za dużo nie poszalejesz bo to fw dość leciwy i skazany prędzej czy później na wymarcie (a na pewno w obecnej formie).
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: 19.07.2019 - 18:28