Wstepna wersja loggera do oceny |
Wstepna wersja loggera do oceny |
18.03.2016, 00:04:27
Post
#1
|
|
Grupa: Zarejestrowani Postów: 111 Pomógł: 1 Dołączył: 24.12.2013 Ostrzeżenie: (0%) |
Hej,
W koncu znalazlem troche czasu aby dokonczyc wstepna wersje wlasnej implementacji loggera, ktora pragne sie z Wami podzielic. Jak zwykle licze na konstruktywna krytyke, a jednoczesnie chcialbym takze zapytac bardziej doswiadczonych PHP-owcow o jeden detal. Mianowicie wywolanie date('u'); zwraca same zera zamiast mikrosekund. Udalo sie moze komus to naprawic? Kod do wgladu: http://wklej.org/hash/b0997746849/ |
|
|
18.03.2016, 00:23:35
Post
#2
|
|
Grupa: Zarejestrowani Postów: 520 Pomógł: 102 Dołączył: 15.07.2014 Skąd: NULL Ostrzeżenie: (0%) |
Skasuj "? true : false" bo to bez sensu,
(prawda lub falsz) ? Prawda : Falsz; Co do problemu - http://stackoverflow.com/questions/169428/...lways-returns-0 -------------------- |
|
|
18.03.2016, 00:40:19
Post
#3
|
|
Grupa: Zarejestrowani Postów: 111 Pomógł: 1 Dołączył: 24.12.2013 Ostrzeżenie: (0%) |
Racja, poprawilem.
Co do problemu z data, to mam rozumiec, ze to poprostu nie dziala w PHP i przez tyle wersji nie zostalo poprawione, nawet w najnowszym PHP7 z ktorego korzystam? Czyli jedynym sposobem jest napisanie wrapper dla funkcji date()? |
|
|
18.03.2016, 00:43:43
Post
#4
|
|
Grupa: Zarejestrowani Postów: 520 Pomógł: 102 Dołączył: 15.07.2014 Skąd: NULL Ostrzeżenie: (0%) |
Racja, poprawilem. Co do problemu z data, to mam rozumiec, ze to poprostu nie dziala w PHP i przez tyle wersji nie zostalo poprawione, nawet w najnowszym PHP7 z ktorego korzystam? Czyli jedynym sposobem jest napisanie wrapper dla funkcji date()? Możliwe że zapomnieli naprawić Bo faktycznie odapliłem teraz na php 7.0.4 I zwraca 000000. -- A jako że wspierasz (chyba) php 5.3 i (nizsze?) np. array() zamiast []... To wrapper może być skoro nadal nie "naprawili" może to kwestia konfiguracji serwera ale nie mam pewności. Ten post edytował KsaR 18.03.2016, 00:47:29 -------------------- |
|
|
18.03.2016, 14:12:12
Post
#5
|
|
Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) |
getHandlersList() i getProcessorsList() - 98% kodu copy&paste
|
|
|
18.03.2016, 16:36:45
Post
#6
|
|
Grupa: Zarejestrowani Postów: 111 Pomógł: 1 Dołączył: 24.12.2013 Ostrzeżenie: (0%) |
getHandlersList() i getProcessorsList() - 98% kodu copy&paste Tak, obecnie tak. Na razie tak. Jak mowilem, jest to wstepna wersja. Poza tym niemal identyczna metode znalezc mozna w klasie implementujacej obsluge cache. Musze przepisac ten kod aby byl bardziej generyczny i wydzielic do osobnej klaski, z ktorej te beda korzystac. Wiem o tym, niemniej dzieki za uwage |
|
|
18.03.2016, 17:39:08
Post
#7
|
|
Grupa: Zarejestrowani Postów: 3 033 Pomógł: 366 Dołączył: 24.05.2012 Ostrzeżenie: (0%) |
skoro jesteś tego świadomy to czemu od razu piszesz źle?
Poza tym w php już od pewnego czasu mamy standardy i tworzenie kolejnej biblioteki, nie zgodnej z nim mija się z najmniejszym celem. http://www.php-fig.org/psr/psr-3/ Co do pytania, czytało by się dokumentacje to by się wiedziało: Cytat Microseconds (added in PHP 5.2.2). Note that date() will always generate 000000 since it takes an integer parameter, whereas DateTime::format() does support microseconds if DateTime was created with microseconds. http://us.php.net/manual/en/function.date.php http://ideone.com/IliK1Y |
|
|
18.03.2016, 18:31:27
Post
#8
|
|
Grupa: Zarejestrowani Postów: 111 Pomógł: 1 Dołączył: 24.12.2013 Ostrzeżenie: (0%) |
Jak juz napisalem, jest to *WSTEPNA* wersja.
Co do PSR - owszem, mozna wszystko do tego sprowadzac, co nie znaczy ze jest idealny pod kazdym wzgledem. A przykladu daleko szukac nie trzeba:
Skoro alert wymaga obudzenia kogos kto naprawi problem i opisany jest jako database unavailable czy entire website down, to moim zdaniem gorzej byc nie moze. Chyba, ze caly serwer padnie, ale wtedy ten emergency na nic Ci sie nie przyda. Poza tym jezeli zatrzyma sie baza danych, to notyfikacja powinna przyjsc z innego zrodla. Inna sprawa, ze jak cala strona bedzie nieosiagalna, to z duzym prawdopodobienstwem tej notyfikacji nie dostaniesz bo skrypt moze sie w ogole nie wykonac. Od tego masz Icinge, Zabbixa i inne profesjonalne narzedzia. Nie ma wiec sensu bezmyslnie podazac za wszystkimi trendami i standardami. Odnosnie daty - w konstruktorze przekazujesz date z mikrosekundami, a ja chce poznac aktualny czas. Ten post edytował q.michal 18.03.2016, 18:33:02 |
|
|
18.03.2016, 19:33:05
Post
#9
|
|
Grupa: Zarejestrowani Postów: 879 Pomógł: 189 Dołączył: 14.06.2006 Skąd: Bytom Ostrzeżenie: (0%) |
Cytat to moim zdaniem gorzej byc nie moze Ktoś może mieć inne zdanie, dlatego są różne poziomy i w danym systemie dla danego zdarzenia przyjmujesz określony poziom. Cytat Chyba, ze caly serwer padnie, ale wtedy ten emergency na nic Ci sie nie przyda. Co jeśli mam wiele serwerów? Cytat Poza tym jezeli zatrzyma sie baza danych, to notyfikacja powinna przyjsc z innego zrodla. Nie rozumiem, np. z jakiego źródła jak nie ze skryptu? Cytat Nie ma wiec sensu bezmyslnie podazac za wszystkimi trendami i standardami. Za trendami to masz rację, że nie warto bezmyślnie podążać. Natomiast trend a standard to kompletnie różne rzeczy. Pewnie przestrzenie nazw to też jakiś dziwny standard, ale niekorzystanie z niego prowadzi do takich kwiatków: Jeszcze w kwestii bezmyślnego podążania, to kopiowanie bibliotek też się w to wlicza? Twój kawałek kodu moim zdaniem zbyt mocno przypomina inny. Stałe jak QEVENT_WARNING zdefiniowałbym w zasięgu klasy. Statyczne zależności i magiczne stałe. Abstrakcyjna klasa z pustym konstruktorem i destruktorem. Kod ogólnie trudny do rozbudowy i to chyba największa wada. |
|
|
18.03.2016, 20:24:17
Post
#10
|
|
Grupa: Zarejestrowani Postów: 111 Pomógł: 1 Dołączył: 24.12.2013 Ostrzeżenie: (0%) |
Ktoś może mieć inne zdanie, dlatego są różne poziomy i w danym systemie dla danego zdarzenia przyjmujesz określony poziom. Co jeśli mam wiele serwerów? To wtedy powinienes dostac notyfikacje z klastra lub innego systemu zapewniajacego HA. Rozroznij bledy w skrypcie, od bledow w aplikacji / serwerze. Nie rozumiem, np. z jakiego źródła jak nie ze skryptu? Tak jak napisalem: klaster, monitoring, etc. Jeszcze w kwestii bezmyślnego podążania, to kopiowanie bibliotek też się w to wlicza? Twój kawałek kodu moim zdaniem zbyt mocno przypomina inny. Ciekawe. Z jednej strony zarzucasz mi ze nie korzystam z przestrzeni nazw itp, a z 2 ze kopiuje biblioteki. |
|
|
18.03.2016, 20:53:55
Post
#11
|
|
Grupa: Zarejestrowani Postów: 142 Pomógł: 24 Dołączył: 30.03.2009 Skąd: Rokitno Szlacheckie Ostrzeżenie: (0%) |
Nie myślałeś o implementacji PSR-3?
|
|
|
18.03.2016, 21:13:33
Post
#12
|
|
Grupa: Zarejestrowani Postów: 111 Pomógł: 1 Dołączył: 24.12.2013 Ostrzeżenie: (0%) |
Myslalem, ale implementacja 20 poziomow logowanai dla samego faktu ich posiadania do mnie nie przemawia.
Jak juz pisalem wczesniej, brak mozliwosci podlaczenia do bazy, czy brak jakiegos komponentu moze generowac ALERTa. Emergency jest tutaj na prawde zbedny. To jest system monitorowania skryptu, a nie wszystkiego dookola. On moze moze wywolac alert kiedy nie bedzie mogl sie podlaczyc do bazy, ale i tak powinien zadzialac zewnetrzny monitoring i poinformowac administratora ze zatrzymala sie abza danych, ew jakis klaster/watchdog powinien ja automatycznie zrestartowac. |
|
|
18.03.2016, 23:23:25
Post
#13
|
|
Grupa: Zarejestrowani Postów: 3 033 Pomógł: 366 Dołączył: 24.05.2012 Ostrzeżenie: (0%) |
Zanim kolejny raz zaczniesz zgrywać mądrego polecam przeczytać całość, tam wyraźnie zostało napisane dlaczego mamy 8 poziomów logowania.
Cytat The LoggerInterface exposes eight methods to write logs to the eight RFC 5424 levels (debug, info, notice, warning, error, critical, alert, emergency). Całość oparta jest na standardzie opisany w RFC. To co mówisz owszem, te mechanizmy powinny tam zadziałać, ale jest standard i interfejs musi być z nim zgodny. Pomijając już sam fakt iż piszesz na serwerze z php7, a nawet przestrzeni nazw z 5.3 nie stosujesz, to powinieneś stosować się do standardu, po to abym jak zechcę mógł Twoją implementację zamienić na np monolog, jeśli stwierdzę, że akurat jego potrzebuję. System nie powinien zależeć od konkretnej implementacji... A wymyślanie koła na nowo mija się z celem. Cytat Jak juz napisalem, jest to *WSTEPNA* wersja. Jakie to ma znaczenie? Jeśli jesteś dobrym programistą a nie wyglądasz na pierwszego lepszego gimbusa, powinieneś już to wiedzieć iż są programiści i klepacze kodu. Rozróżnić ich można po jakości kodu. Jasne można pisać kod, który nadaje się tylko do refaktoringu, ale to nie jest produktywne. Cytat Odnosnie daty - w konstruktorze przekazujesz date z mikrosekundami, a ja chce poznac aktualny czas. Przeczytałeś cytat z dokumentacji? Ten post edytował com 18.03.2016, 23:23:53 |
|
|
19.03.2016, 14:07:43
Post
#14
|
|
Grupa: Zarejestrowani Postów: 879 Pomógł: 189 Dołączył: 14.06.2006 Skąd: Bytom Ostrzeżenie: (0%) |
Cytat To wtedy powinienes dostac notyfikacje z klastra lub innego systemu zapewniajacego HA. A co jeśli jestem programistą i nie interesuje mnie nic poza moją aplikacją? Utrzymywaniem infrastruktury zajmuje się kto inny. Ja chcę wiedzieć czy moja aplikacja zepsuła się i mam coś do naprawy czy nie. Poza tym uczepiłeś się jednego przykładu dla tego poziomu. Cytat Rozroznij bledy w skrypcie, od bledow w aplikacji / serwerze. Właśnie rozróżniam. Skrypt nie może połączyć się z bazą. Może baza padła, albo admin zmienił jej adres? Efekt jest taki, że nie działa aplikacja i ja chcę o tym wiedzieć. Komunikat z klastra nic mi nie mówi bo się na tym mogę nie znać. Cytat Ciekawe. Z jednej strony zarzucasz mi ze nie korzystam z przestrzeni nazw itp, a z 2 ze kopiuje biblioteki. Niczego Ci nie zarzucam tylko opisuję istniejącą sytuację. Po prostu nie korzystasz z przestrzeni nazw i tyle, a to moim zdaniem błąd i to krytykuję (o co zresztą sam prosiłeś). Jaki jest związek między używaniem PN a kopiowaniem cudzej biblioteki nie podając źródła? Wielu programistów korzysta z PN i nie kopiują innych bibliotek. |
|
|
19.03.2016, 19:39:04
Post
#15
|
|
Grupa: Zarejestrowani Postów: 111 Pomógł: 1 Dołączył: 24.12.2013 Ostrzeżenie: (0%) |
Za trendami to masz rację, że nie warto bezmyślnie podążać. Natomiast trend a standard to kompletnie różne rzeczy. Pewnie przestrzenie nazw to też jakiś dziwny standard, ale niekorzystanie z niego prowadzi do takich kwiatków: Bardzo chetnie dowiem sie, jak to powinno zostac zaimplementowane wg Ciebie. Jezeli masz jakis przyklad, albo chwile aby zaprezentowac fragment kodu, bede wdzieczny. Pomijając już sam fakt iż piszesz na serwerze z php7, a nawet przestrzeni nazw z 5.3 nie stosujesz, to powinieneś stosować się do standardu, po to abym jak zechcę mógł Twoją implementację zamienić na np monolog, jeśli stwierdzę, że akurat jego potrzebuję. System nie powinien zależeć od konkretnej implementacji... Owszem korzystam z PHP7, co nie nakazuje mi w zaden sposob korzystac ze wszystkich dobrodziejstw jakie oferuje najnowsza wersja. PHP jest kompatybilne wstecz w pewnym zakresie, wiec aplikacje ktora wymaga min. PHP5 w teorii da sie uruchomic na PHP7 (ew. po pewnych poprawkach). Z najnowszej wersji interpretera korzystam, bo taka jest oferowana jako stabilna w dystrybucji z ktorej korzystam (tak mam Linuksa). Strata czasu byloby maskowac nowa wersje i robic downgrade, w szczegolnosci ze siodemka jest zdecydowanie szybsza. A wymyślanie koła na nowo mija się z celem. "Wszyscy wiedzą, że czegoś nie da się zrobić, aż znajduje się taki jeden, który nie wie, że się nie da, i on to robi." A co jeśli jestem programistą i nie interesuje mnie nic poza moją aplikacją? Utrzymywaniem infrastruktury zajmuje się kto inny. Ja chcę wiedzieć czy moja aplikacja zepsuła się i mam coś do naprawy czy nie. Poza tym uczepiłeś się jednego przykładu dla tego poziomu. Rozumiem, ale jak padnie baza danych, to raczej nie Ty bedziesz to naprawial. Jak slusznie zauwazyles kto inny zajmuje sie utrzymywaniem infrastruktury. Osoba taka powinna otrzymac powiadomienie z monitoringu, ze baza danych jest nieosiagalna. Owszem, taki problem powinien zostac zalogowany w samej aplikacji, w szczegolnosci jezeli baza jest dostepna a przykladowo rozsypala sie jakas tabela. Wtedy administratorzy z duza doza prawdopodobienstwa nie otzymaja zadnej notyfikacji, a o zaistnialym problemie dowiedza sie od Ciebie. Co nie zmienia faktu, ze jezeli cos krytycznego stalo sie po stronie aplikacji to w dalszym ciagu jest to alert. A samemu logowaniu aplikacji nie mozna zawierzyc, bo co w sytuacji gdy taka aplikacja nam coredumpuje, albo kiedy wywroci sie serwer www? Wtedy aplikacja bedzie niedostepna, mamy totalny f***up i z zadnych logow aplikacji sie o tym nie dowiesz. Właśnie rozróżniam. Skrypt nie może połączyć się z bazą. Może baza padła, albo admin zmienił jej adres? Efekt jest taki, że nie działa aplikacja i ja chcę o tym wiedzieć. Komunikat z klastra nic mi nie mówi bo się na tym mogę nie znać. I w tym wypadku dostaniesz alert. A jezeli problem lezy po stronie infrastruktury, to i admin powinien dostac stosowne powiadomienie. Niczego Ci nie zarzucam tylko opisuję istniejącą sytuację. Po prostu nie korzystasz z przestrzeni nazw i tyle, a to moim zdaniem błąd i to krytykuję (o co zresztą sam prosiłeś). Jaki jest związek między używaniem PN a kopiowaniem cudzej biblioteki nie podając źródła? Wielu programistów korzysta z PN i nie kopiują innych bibliotek. Nie chce sie klocic, ani wymadrzac. Nie to jest moim celem. Popelnilem fragment kodu i jestem wdzieczny za krytyke. Rozumiem, ze jako programista masz odmienne zdanie co do samej idei. Ja programistom nie jestem, malo tego za moich czasow czlowiek programowac uczyl sie jeszcze w pascalu, ktory niewiele ma juz wspolnego z dzisiejszymi standardami. Na codzien pracuje w IT, ale zajmuje sie czyms zupelnie innym, dlatego pewnie takze moje podejscie do pewnych problemow jest z gola odmienne. Jezeli chodzi o przestrzenie nazw, to rozumiem zauwazony problem i jak bede mial wolna chwile, postaram sie je wdrozyc. Nie rozumiem natomiast, co wg Ciebie skopiowalem? |
|
|
Wersja Lo-Fi | Aktualny czas: 28.04.2024 - 18:26 |