Nested Prova la gestione degli errori di cattura con i file di registro?

1

Domanda sulle migliori pratiche per la gestione degli errori in C #?

Nel nostro sistema scriveremo i file, e con ogni file avranno un file di errore corrispondente. Il file di errore verrà scritto ogni volta anche se non ci sono errori.

Sto guardando il modo migliore per gestire gli errori per questo. Supponendo che quando andremo a scrivere il file CSV principale, otterremmo un numero di errori. Dalle autorizzazioni sulla cartella, a un'eccezione di parsing quando si gira un Datatable in un CSV.

Se otteniamo un errore di autorizzazione, anche il file di log degli errori fallirà. Questo dovrebbe essere fatto nell'eccezione? in un altro tentativo di cattura (che sarebbe male .. penso).

Vorremmo anche ottenere l'eccezione da inserire nel file di errore.

Qualche pseudo codice qui sotto (senza il try catch nell'eccezione) o dovrebbe essere più suddiviso e utilizzare metodi, che contengono i propri Try / Catch che potrebbero far apparire i messaggi per accedere e scrivere sui file.

    Message.log("begin writing file");
        try {
           try { 
              // get data from DB
              // write to CSV file
              // all good, write Empty Error Log file and main file
           } 
           catch(Exception ex) {
              // Write Error File with ex.toCSV
              // write log message.
              Message.log("error : " + ex.ToString());
           }

        } catch (Exception ex) {
             var e = new Exception(string.Format("An unexpected error occurred for file.\r\n{0}", ex.Message));
             Message.log(e);
             throw e.
        }
       Message.log("all files written");
    
posta chatters 22.05.2013 - 22:31
fonte

2 risposte

2

Il problema è il tuo logger. Il logger non dovrebbe generare errori. Se c'è qualche errore nel logger, provare a risolverlo al meglio nel codice logger, cambiando la posizione del registro o disattivando la registrazione o, in caso estremo, arrestando l'applicazione. La registrazione è un'operazione frequente, se una volta fallisce fallirà ancora e ancora. Sarà costoso mettere a cercare di catturare l'operazione di registrazione ogni volta.

    
risposta data 23.05.2013 - 09:08
fonte
0

Hai solo bisogno di un catch , a condizione che tu possa fare in modo che il messaggio che stai registrando abbia un unico formato. Puoi anche ribaltare l'eccezione rilevata, piuttosto che crearne una nuova.

Il seguente codice è semanticamente equivalente al codice esistente:

Message.log("begin writing file");
try 
{
  // get data from DB
  // write to CSV file
  // all good, write Empty Error Log file and main file
}  
catch (Exception ex) 
{
     Message.log(e);
     throw;
}
Message.log("all files written");
    
risposta data 22.05.2013 - 22:36
fonte

Leggi altre domande sui tag