Da, ali valjda imas neku listu da kazem 'prioriteta' tj log API bi valjda trebao da ima sto manje "zavisnosti" jer on treba da osigura 'biljezenje' greske.
Ili da imas 2 log-a - jedan koji obradjuje app-level greske i drugi koji obradjuje system-level greske. Jednostavno ne vidim logiku zapisivanja greske u bazu a ako je jedna od tih gresaka - nedostupnost baze. :) |
Pa načelno nikad ne možeš biti siguran da li će medijum na koji se šalje poruka o grešci zakazati (nedovoljno mesta na disku za log fajl, nedostupnost baze, oboren SMTP server itd)... Zato koristiš (najmanje) dva appendera i to je to.
A dosta je glupo i naporno posebno hendlovati greške koje se tiču baze, posebno one za slanje mejla, itd... Generalni princip je da se sve greške rutiraju logging API-ju, a on se posle snalazi s njima. |
Jablane, prijatelju, jesi ti uopšte shvatio u čemu je problem? :)
Normalno je da ti se pošalje na mail "Greška: ne mogu da se povežem na bazu podataka", ali nije normalno da pokušavaš da pročitaš iz te iste baze na koju email adresu da se pošalje. Znači ovako ide otprilike (pseudokod): PHP kôd:
PHP kôd:
Nisam očekivao da moram da ti objasnim da taj email nikada ne ode :) Nadam se da je sada jasnije i ne vidim ni jedan slučaj koji može da opravda ovo. |
Ama razumem ja vas, razumite i vi mene...
Vidi: Imaš neki kod koji radi nešto (program) i u kome nekad dođe do neke situacije koja treba da se loguje. Sa druge strane imaš logging API koji prihvata log poruke i nad njima radi određeni skup operacija (šalje na mejl, piše u bazu itd). Besmisleno je posebno hendlovati greške različite prirode - jednostavno sve se šalju logging API-ju. Ako logging API hoće da pošalje error report na adresu iz baze, on to pokuša i normalno pukne, bez obzira šta stoji u toj grešci. Zato bih ja jedino promenio funkciju fatal_error u nešto kao: PHP kôd:
|
Ovo o čemu Jablan priča ima smisla u situacijama gde je potrebna proširivost i gde se ne zna tačno na koji način će kod biti korišćen. To manje više važi za sve biblioteke koje je potrebno koristiti u više navrata, a logger je jedna od osnovnih koju baš i ne treba pisati svaki put iznova.
Ne prave svi aplikacije kod kojih se sve zna od samog starta ili koje su zatvorene u feature set definisan početnom specifikacijom. Npr, pravi se jednostavan CMS gde je hitnost obrade greške relativno mala tako da slanje emaila administratoru radi posao. Međutim, za mesec dana koristi se ista osnova za sistem koji nadgleda stanje servera. U tim situacijama brza obrada greške je a must jer nećeš da ti server bude nedosutpan dok se admin seti da proveri mail pa SMS ili IM imaju više smisla. Dalje, možeš da loguješ kompletan dump sistemskih promenljivih u bazu ili fajl kako bi programeri mogli lakše da otklone grešku ili bar da je simuliraju (mnoge greške nije jednostavno reprodukovati). Ili automatski submit u bug tracking sistem? I tako dalje i tako dalje. Potrebe različitih sistema se razlikuju... Najbitnija stvar u celoj priči je upravo to što je Jablan i naveo - kod za obradu greške ne sme praviti greške koje sam mora da obrađuje. Ako svi složeniji oblici logavanja propadnu onda obično postoji neki elementarni fallback za koji se zna sa najvećom sigurnošću da će biti izvršen (printanje poruke o grešci "korisnku u lice" npr). |
@jablane: zezaš malo, a? :)
Pričam o biserima jednog polu-populrnog CMS-a, ne pričam o tome kako treba da se napravi. Stavio sam šta su "programeri" napisali, a ti kažeš da to ima smisla u "određenim situacijama" kada se to napravi kako treba? Pa ne pričam o tome :) |
Ah, štagod... Bitno da smo svi rekli šta smo imali. ;)
|
Kad se vi nastavljate...
Dakle, taj polu-popularni CMS je pravljen pod predpostavkom da se nece desiti da pukne baza, jer ako pukne, znaces vrlo dobro da se to desilo :) Kod koji handluje greske je tu zbog manje fatalnih problema do kojih bi doslo u svakodnevnom radu CMS-a. Na stranu cela prica da li tako treba ili ne treba. Mozda je glupo (u konkretnom slucaju), je ali je tako... |
A kako ćeš ti to znati da je pukla baza? Jel' ti čučiš na sajtu po ceo dan pa gledaš da li sve funkcioniše? :) Pa zamisli da imaš 5-6-10 svojih sajtova...
Koje je (bilo kakvo) opravdanje čuvati debug email adresu u bazi? |
Vreme je GMT +2. Trenutno vreme je 20:41. |
Powered by vBulletin® Verzija 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Copyright © DevProTalk. All Rights Reserved.