Domanda

Prima di tutto, ci scusiamo per il titolo dal suono soggettivo. Questa è una domanda diretta.

Attualmente sto lavorando a una suite di strumenti:

  • Un servizio Windows C #, principalmente mantenere un database Oracle.
  • Un servizio Windows C # (che sarà utilizzato su più siti di nodi) a elaborare il contenuto del database.
  • Un'interfaccia web ASP.NET per facilitare la gestione del complesso & Quot; sistema "

Attualmente i Servizi Windows sono stati sviluppati come Applicazioni console (per facilitare il debug / sviluppo) e sono nel bel mezzo della conversione di questi in Servizi. Dopo un paio di giorni di test con questi servizi, sto scoprendo che vorrei aumentare la granularità della mia registrazione. Sto scoprendo che mi manca Console.WriteLine () e vorrei fornire un'origine registro alternativa come un file flat per questo tipo di output. Questo mi ha portato a pensare: "Dovrei usare un framework o ne ho abbastanza?" & Quot;

Il motivo per cui ho citato gli aspetti che sto sviluppando è quello di fornire informazioni sulla mia situazione. A "Core" La DLL è stata creata, comune a tutti i componenti, astraggendo il livello di interazione tra le applicazioni e il database. È all'interno di questa DLL che è stata creata una classe che tenterà di "accedere a una tabella nel database" in caso contrario fallire " accedere al registro eventi locale " ;. Ecco, questa è l'estensione della registrazione.

In tutti i suddetti strumenti, ci sono più istanze di registrazione non dissimili da:

Log.LogError("Code", e.Message + "\n" + e.StackTrace);

Anche se abbastanza semplice, questo metodo fa uso della riflessione per identificare la fonte dell'errore.

La mia domanda

Guardando la mia attuale soluzione di registrazione sembra "sufficiente". in termini di ciò che fa e di come è integrato con tutte le mie soluzioni. Tuttavia, ho esaminato i framework di registrazione (in particolare log4net) e le loro funzionalità mi colpiscono. La possibilità di, se necessario in futuro, aggiungere un altro formato di output (come un server SMTP) mi sembra davvero interessante! :)

Cosa vorrei sapere sono i vantaggi del passaggio a un framework (come log4net)? In che misura dovrò adattare il mio codice? Che io stia solo guardando l'erba più verde dall'altra parte? E infine, ma probabilmente soprattutto, sto facendo la cosa giusta? Devo solo aggiungere la possibilità alla mia classe Log a " LogDebug " e averlo finito? L'ultima cosa che vorrei fare è revisionare completamente la mia suite, solo per un "basic" caratteristica, ma se ci sono altri vantaggi (design, affidabilità, buone pratiche, ecc.), sono interessato.

Grazie,

È stato utile?

Soluzione

Una registrazione corretta è particolarmente utile quando si esegue il codice su più sistemi remoti, per quanto ricordo, log4net ti consentirà di inviare i tuoi registri a un server remoto syslog senza sovraccarico di codifica (il che significa che puoi visualizzare i tuoi registri da tutte le macchine in uno luogo centralizzato) in questo modo ridurrà notevolmente il tempo necessario per ottenere informazioni relative a un bug o un problema con il sistema e dovrebbe anche darti un'indicazione di quanto sia prevalente il problema.

Come menzionato in altri post, log4net consente anche di aggiungere più appendici e più livelli di log, quindi determinando dove vuoi determinate informazioni di log (cioè in un database o in un file flat locale, hey log4net ti consente persino di sputare log out su telnet ) da conservare è un gioco da ragazzi assoluto.

Per quanto riguarda l'implementazione, ci sono molti buoni siti che ti parlano durante l'installazione. Il modo in cui usi effettivamente gli oggetti di registrazione che ti dà log4net è una scelta architettonica, ma potresti semplicemente cambiare il costruttore di un oggetto per prendere un oggetto log4net e dall'interno di questo oggetto, basta usare l'oggetto log4net come faresti con Console.WriteLine .

Trovo la serie del tutorial qui particolarmente utili, e andranno anche più in profondità di quanto io possa qui sui vantaggi e sui diversi modi di configurare log4net.

Altri suggerimenti

Sì. L'uso di un framework di registrazione esistente e comprovato (come Log4net) è una buona idea.

Log4Net è configurabile in fase di esecuzione (ottimo per rintracciare i problemi nel codice di produzione).

Come ha sottolineato un commentatore, è anche molto semplice da usare.

Sì, si desidera sicuramente utilizzare un framework di registrazione. Un framework di registrazione ti permetterà di:

      
  • Imposta i livelli di registrazione per le diverse istanze del logger.
  •   
  • Imposta " appenders " o output per ciascuna delle diverse istanze del logger.

Forse, ancora più importante, se si utilizza un framework di registrazione, è molto semplice scambiare un'implementazione del framework di registrazione con un'altra (forse un'implementazione nulla che elimina semplicemente i messaggi); mentre, se si scrivono direttamente tutte le dichiarazioni di registrazione, scambiare l'implementazione sarà un incubo.

Penso che dovresti usare Log4net, semplicemente perché è sempre meglio riutilizzare che costruire le tue cose. log4net è stato utilizzato da molti sviluppatori e sono abbastanza maturi.

Pensa al tuo potenziale di manutenzione; uno o due mesi lungo la strada, potresti aver bisogno di modificare un po 'la tua classe di registrazione personalizzata, per aggiungere un po' di supporto multithreading ecc. E quando correggi i bug sorti dalla tua classe di registrazione, ti mancherà Log4net.

Bene, uno dei maggiori vantaggi è non dover mantenere il codice da soli. La maggior parte delle volte, i framework di registrazione hanno molte più funzionalità rispetto alla propria soluzione. Dato che sono così focalizzati sulla registrazione, questi framework di solito sono piuttosto completi sia nella funzionalità che nei modi per implementarla. E poi c'è affidabilità; non c'è niente di peggio di un framework di registrazione che non registra nulla perché è infastidito. ;)

Prendi ad esempio ELMAH per le applicazioni ASP.net. Include anche notifiche, esportazioni in vari formati target, ecc. Cose che sono piuttosto utili ma non ti costruirai mai se non ne hai davvero bisogno.

Quante modifiche al codice sono necessarie ovviamente dipendono sia dal codice che dal framework scelto. È difficile dire nulla al riguardo.

Ho intenzione di dare un grido a NLog ( http://nlog-project.org/home ) in quanto non è affetto dalla "porta Java diritta - quindi riscrivi" la maggior parte delle librerie oss. Net.

Alcuni vantaggi chiave per noi sono stati il ??Logger.IsFooEnabled (lettura volatile) molto veloce e le prestazioni complessive del sistema.

A ciascuno il suo però, ma personalmente preferisco NLog per i miei progetti (e anche alcuni dei miei clienti).

Saluti, Florian

Il vantaggio di utilizzare un buon framework di registrazione come Log4Net è che hanno un piccolo impatto sul codice in termini di linee di codice che devi modificare (in altre parole devi solo modificare ogni linea di registrazione esistente).

Inoltre, se sei preoccupato di modificare il tuo codice se cambi framework o se ritieni di voler creare il tuo, puoi sempre creare la tua interfaccia per un framework di registrazione. Dopodiché dovrai modificare il codice in un solo posto.

Penso che gli amministratori di sistema si aspettino che i servizi accedano al registro eventi dell'applicazione in windows.

Cerca System.Diagnostics.EventLog, anche se log4net scriverà anche su quello ..

La dichiarazione iniziale nel sito web log4j potrebbe aiutarti in alcuni dei tuoi domande, i principi di base sono gli stessi di log4net:

  

Con log4j è possibile abilitare   registrazione in fase di runtime senza modifica   il file binario dell'applicazione. Il log4j   il pacchetto è progettato in modo tale che questi   le dichiarazioni possono rimanere nel codice spedito   senza incorrere in una prestazione pesante   costo. Il comportamento di registrazione può essere   controllato modificando una configurazione   file, senza toccare l'applicazione   binario.

     

Usando una gerarchia logger lo è   possibile controllare quale registro   le dichiarazioni vengono emesse in modo arbitrario   granularità fine ma anche grande facilità.   Questo aiuta a ridurre il volume dei dati registrati   uscita e minimizzare il costo di   la registrazione.

In questo caso chiaramente non è necessario reinventare la ruota. La maggior parte dei framework di registrazione è piuttosto semplice, quindi l'estensione delle modifiche dipenderà molto probabilmente dalla dimensione dei programmi esistenti.

se scrivi correttamente la tua classe logger sarà facilmente spendibile per qualsiasi tua necessità. Qualsiasi framework potrebbe impressionarti con molte funzionalità, ma un altro framework è un'altra variabile nel tuo processo di debug in quanto può darti un errore che non esiste o può fare un errore da solo in combinazione con la tua applicazione. Se sei pronto per fare beta test per progetti software open source, va bene ...

Al posto tuo, scriverei la classe di registro con la possibilità di estenderne le funzionalità che ritieni interessanti per il tuo progetto in base all'elenco delle funzionalità conosciute dai framework. Non vedo alcun problema nel registrare qualcosa su un file e poi inviarlo tramite smpt, solo una piccola funzione fa il lavoro.

Inoltre, puoi scrivere la tua classe che sarà piuttosto astratta e inserire il tuo codice di base, se dovessi mai usare un framework esterno per testare la tua classe sarebbe in grado di usarlo con un impatto minimo sul codice. Dai un'occhiata a come vengono implementati i framework a livello di codice.

pensa che dovrai imparare come usare correttamente questi framework quando per il momento hai solo bisogno di registrarne una piccola parte ...

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