Domanda

Ho scoperto come convertire gli errori in eccezioni e li visualizzo bene se non vengono rilevati, ma non so come registrarli in modo utile.Scriverli semplicemente in un file non sarà utile, vero?E rischieresti di accedere a un database quando non sai ancora cosa ha causato l'eccezione?

È stato utile?

Soluzione

mi piace molto log4php per la registrazione, anche se non è ancora uscito dall'incubatrice.Uso log4net praticamente in tutto e ho trovato lo stile abbastanza naturale per me.

Per quanto riguarda i crash del sistema, puoi registrare l'errore su più destinazioni (ad esempio, avere appender la cui soglia è CRITICA o ERRORE che entrano in gioco solo quando le cose vanno male).Non sono sicuro di quanto siano sicuri gli appender esistenti - se il database è inattivo, come fa quell'appender a fallire? - ma potresti facilmente scrivere il tuo appender che fallirà con garbo se non è in grado di accedere.

Altri suggerimenti

Potresti usare set_error_handler per impostare un'eccezione personalizzata per registrare gli errori.Personalmente prenderei in considerazione la possibilità di memorizzarli nel database poiché il backtrace del gestore di eccezioni predefinito può fornire informazioni su ciò che l'ha causato: questo ovviamente non sarà possibile se il gestore del database ha comunque attivato l'eccezione.

Potresti anche usare registro_errori per registrare i tuoi errori.Ha una scelta di destinazioni dei messaggi tra cui:

Citato da registro_errori

  1. Il logger di sistema di PHP, che utilizza il meccanismo di registrazione del sistema operativo o un file, a seconda di cosa è impostata la direttiva di configurazione error_log.Questa è l'opzione predefinita.
  2. Inviato via e-mail all'indirizzo nel parametro di destinazione.Questo è l'unico tipo di messaggio in cui viene utilizzato il quarto parametro, extra_headers.
  3. Aggiunto alla destinazione del file .Una nuova riga non viene aggiunta automaticamente alla fine della stringa del messaggio.

Modificare:Markdown ha un tag noparse per i caratteri di sottolineatura?

Scriverli semplicemente in un file non sarà utile, vero?

Ma ovviamente lo è: è un'ottima cosa da fare, molto meglio che visualizzarli sullo schermo.Vuoi mostrare all'utente una bella schermata che dice "Scusa, abbiamo sbagliato.I tecnici sono stati avvisati.Torna indietro e riprova" e ASSOLUTAMENTE NESSUN DETTAGLIO TECNICO, perché farlo sarebbe un rischio per la sicurezza.È possibile inviare un'e-mail a una casella di posta condivisa e registrare l'eccezione nel file o nel DB per la revisione successiva.Questa sarebbe una buona pratica.

Li scriverei su un file e magari imposterei un sistema di monitoraggio per verificare le modifiche alla dimensione del file o alla data dell'ultima modifica.Webmin è un modo semplice, ma esistono soluzioni software più complete.

Se sai che si tratta di un errore isolato, inviare un avviso via email può andare bene.Tuttavia, con un sito Web con molte visite al minuto, non farlo mai inviare una notifica tramite e-mail.Ho visto un sito Web bloccato a causa della generazione di centinaia di e-mail al minuto per indicare che il sistema non era in grado di connettersi al database.Il fatto che avesse anche un LoadAvg > 200 a causa del server di posta in esecuzione per ogni nuovo messaggio, non ha aiutato affatto.In quel caso, lo scenario migliore era, di gran lunga, che il watchdog controllasse le dimensioni dei file e si connettesse a un servizio esterno per inviare un SMS (magari un messaggio istantaneo), o che un sistema esterno cercasse su una pagina web un messaggio di errore (che non deve essere necessariamente visibile sullo schermo: può essere in un commento HTML).

Penso che dipenda molto da dove si è verificato l'errore.Se il DB è inattivo, registrarlo nel DB non è una buona idea ;)

Io uso il syslog() funzione per registrare l'errore, ma non ho problemi a scriverlo su un file quando sono su un sistema che non ha supporto syslog.Puoi facilmente configurare il tuo sistema per inviarti un'e-mail o un messaggio jabber utilizzando ad esempio logwatch O il syslogd standard.

Il secondo log4php.In genere lo ho configurato per inviare cose come eccezioni a ERROR o CRITITCAL e scriverle su syslog.Da lì puoi inserire il tuo syslog Zenoss, Nagios, Splunk o qualsiasi altra cosa con cui syslog possa parlare.

Puoi anche acquisire e registrare eccezioni PHP utilizzando Moduli Google.C'è un tutorial Qui questo spiega il processo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top