Tipi di Eccezioni e logging

di il
6 risposte

Tipi di Eccezioni e logging

Buongiorno,

Ho implementato un semplice logger che utilizzo per scrivere su file di testo i normali log e le eccezioni. Di seguito il codice
public static void FileText(Exception ex)
        {
            FileText(ex, "");
        }

        public static void FileText(string st)
        {
            FileText(null, st);
        }

        public static void FileText(Exception ex, String st)
        {
            try
            {
                string serverPath = System.Web.HttpContext.Current.Server.MapPath("~/logs");
                if (!Directory.Exists(serverPath))
                    System.IO.Directory.CreateDirectory(serverPath);

                string fileName = Path.Combine(serverPath, String.Format("Error-{0}.txt", DateTime.Now.Date.ToShortDateString().Replace('/', '_')));
                if (!File.Exists(fileName))
                    File.Create(fileName).Dispose();

                lock (DebugWriter)
                {

                    using (StreamWriter writer = new StreamWriter(fileName, true))
                    {
                        if (ex != null)
                        {
                            string innerException = "";
                            if (ex.InnerException != null)
                                innerException = ex.InnerException.ToString();

                            writer.WriteLine(DateTime.Now.ToString("yyyy-MM-dd-HH:mm:ss") + " - Message :" + ex.Message + Environment.NewLine + "StackTrace :" + ex.StackTrace + "Message : " + innerException + " S:" + st);
                        }
                        else
                        {
                            writer.WriteLine(DateTime.Now.ToString("yyyy-MM-dd-HH:mm:ss") + " - " + st);
                        }

                    }
                }

            }
            catch
            {

            }
        }
Ora, vorrei migliorarlo con la possibilità di loggare dati specifici per tipo di eccezione. Per esempio, nel caso di DbEntityValidationException vorrei loggare quali siano stati i campi che hanno creato il problema che sono riportati in "e.EntityValidationErrors" che è specifico del tipo di eccezione. Ho risolto il problema con una roba del genere scritta nel catch
   try
   		{
   			....
   		}
                         catch (System.Data.Entity.Validation.DbEntityValidationException e)
                            {
                                
                                string validationError = "";
                                foreach (var eve in e.EntityValidationErrors)
                                {
                                    validationError += String.Format("Entity of type \"{0}\" in state \"{1}\" has the following validation errors:", eve.Entry.Entity.GetType().Name, eve.Entry.State);
                                    foreach (var ve in eve.ValidationErrors)
                                    {
                                        validationError += String.Format("- Property: \"{0}\", Error: \"{1}\"", ve.PropertyName, ve.ErrorMessage);
                                    }
                                }
                                ErrorSave.FileText(e, validationError);

                            }
   
In sostanza elaboro i dati che mi servono nel catch e li passo al logger come stringa.

Vorrei spostare questo codice nel logger per non doverlo ripetere ogni volta e quindi mi servirebbe qualcosa del tipo
if(ex.InstanceOf(System.Data.Entity.Validation.DbEntityValidationException) //non esiste ex.InstanceOf, me lo sono inventato io :D
{
....
}
Come potrei fare?

6 Risposte

  • Re: Tipi di Eccezioni e logging

    golosauro ha scritto:


    Vorrei spostare questo codice nel logger per non doverlo ripetere ogni volta e quindi mi servirebbe qualcosa del tipo
    if(ex.InstanceOf(System.Data.Entity.Validation.DbEntityValidationException) //non esiste ex.InstanceOf, me lo sono inventato io :D
    {
    ....
    }
    Come potrei fare?
    Usa l'.
  • Re: Tipi di Eccezioni e logging

    Alka ha scritto:


    golosauro ha scritto:


    Vorrei spostare questo codice nel logger per non doverlo ripetere ogni volta e quindi mi servirebbe qualcosa del tipo
    if(ex.InstanceOf(System.Data.Entity.Validation.DbEntityValidationException) //non esiste ex.InstanceOf, me lo sono inventato io :D
    {
    ....
    }
    Come potrei fare?
    Usa l'.
    Ecco, si, quello. Ho postato troppo in fretta, avrei dovuto cercare l'equivalente c# di quello che usavo in java
    Grazie e scusa insieme
  • Re: Tipi di Eccezioni e logging

    F22 Alka con 3 parole hai risolto un problema.
    non capisco se sto provando invidia o ammirazione.
    Sto facendo un log semplice a modo mio.
    Posso approfittare e chiedere un parere?
    l'ho scritto in base alle mie conoscenze e funziona.
    Ma se mi dici cosa potrei studiare per migliorarlo te ne sarei grato.
    
    private async void btnSCRIVI_Click(object sender, EventArgs e)
            {
                String linea = null;
                bool continua = true;
          
                while (continua)
                {
                    linea = await classSocket.riceviMsgAsync();
                    if (linea != null)
                    {
                        StreamWriter Notepad = new System.IO.StreamWriter(@"C:\LOG\" + txtlOG.Text + ".txt", true);
                        Notepad.WriteLine(linea);
                        Notepad.Close();
                 	}
                }
    
    inoltre spero di non infrangere nessuna regola del forum scrivendo altro codice in un post non mio.
  • Re: Tipi di Eccezioni e logging

    Pivello ha scritto:


    Sto facendo un log semplice a modo mio.
    l'ho scritto in base alle mie conoscenze e funziona.
    Ma se mi dici cosa potrei studiare per migliorarlo te ne sarei grato.
    Non saprei cosa dirti... in pratica, hai scritto una riga di codice che scrive una linea di testo dentro a un file, e non è neanche un metodo a parte riutilizzabile, ma direttamente incorporata all'evento di gestione del click su un probabile pulsante. Qualsiasi cosa lo migliorerebbe.

    Non so cosa intendi, ma sarebbe sufficiente vedere come sono fatti logger seri e diffusi, tipo Serilog.

    Pivello ha scritto:


    inoltre spero di non infrangere nessuna regola del forum scrivendo altro codice in un post non mio.
    Ovviamente sì, perché di fatto
    1) non contribuisci al problema posto,
    2) poni un altro problema che si accavalla all'originale,
    3) fai arrivare notifiche all'autore del thread per messaggi che non aiutano bensì dirottano altrove.

    Però per questo non serve un libro o una guida... basta pensarci un attimo...
  • Re: Tipi di Eccezioni e logging

    Chiedo scusa all autore e a tutti voi.
    Ho difficoltà a chiedere forse perché mi sento come un pesce fuori d acqua. E poi chiedere e ricevere risposta lo vedo così "freddo". Questo mio modo di fare e cercare di farvi capire il mio rispetto per voi. Anche perché ogni vostro suggerimento e prezioso. E per questo ti ringrazio e ti auguro una buona giornata :*****
  • Re: Tipi di Eccezioni e logging

    Pivello ha scritto:


    Chiedo scusa all autore e a tutti voi.
    Ho difficoltà a chiedere forse perché mi sento come un pesce fuori d acqua. E poi chiedere e ricevere risposta lo vedo così "freddo". Questo mio modo di fare e cercare di farvi capire il mio rispetto per voi. Anche perché ogni vostro suggerimento e prezioso. E per questo ti ringrazio e ti auguro una buona giornata :*****
    Mi pare si fosse detto anche "basta con queste smancerie".
    Non siamo infermieri in prima linea a contatto con malati di COVID: siamo sviluppatori.
    Basta avere il rispetto che si dovrebbe avere per qualsiasi persona, che ovviamente deve essere reciproco, o almeno questo vale per me.
Devi accedere o registrarti per scrivere nel forum
6 risposte