2010-04-12 3 views
5

Sto sviluppando un'applicazione web che deve supportare molte richieste simultanee e vorrei mantenerla abbastanza veloce. Devo ora implementare una strategia di registrazione, userò log4net, ma ... cosa e come devo registrare? Intendo:Strategia di registrazione rispetto alle prestazioni

  1. In che modo l'impatto della registrazione nelle prestazioni? è possibile/registrazione raccomandata utilizzando chiamate asincrone?
  2. È meglio utilizzare un file di testo o un database? È possibile farlo condizionale? ad esempio, registro predefinito nel database e, in caso di errore, passare a un file di testo.
  3. E il multithreading? dovrei preoccuparmi della sincronizzazione quando uso log4net? o è sicuro per i thread out of the box?

Nei requisiti risulta che l'applicazione deve memorizzare nella cache un paio di cose per richiesta, e ho paura di l'impatto sulle prestazioni di questo.

Cheers.

risposta

13
  1. Rende la cosa più lenta - fare qualcosa richiede più tempo che non fare nulla. Di solito con una quantità trascurabile. Non preoccuparti per questo
  2. Accedere a un file di testo. Sono facili da spostare/grep/compress/mail ecc. E non devi preoccuparti di accedere a un database perché il database è inattivo. Esistono appendici per accedere a un database per log4net, se necessario.
  3. Yes, log4net è sicuro.

Avere la registrazione/traccia è estremamente prezioso - per lo meno è necessario registrare gli errori, o non si saprà mai su di loro. La maggior parte degli apis di registrazione ti consente di attivare e disattivare il livello di dettaglio che devi registrare.

Non preoccuparti delle prestazioni finché non diventa un problema. Non è che stai costruendo missili lunari e vuoi vedere quanto peso può sopportare testandolo: è solo codice, rimuovi le dichiarazioni di registrazione che invadono i tuoi registri e ricompilano se mai diventa un problema.

4

Direi che ti preoccupi delle prestazioni all'inizio del pezzo, usa log4net in un modo che è molto facile da disattivare in seguito o personalizzare (ad esempio: uso del file conf che definisce il livello di log NESSUNO, ERRORE, WARN , DEBUG, INFO, TUTTI, VERBOSE ecc ...),

Tuttavia i tuoi due altri dubbi sono validi, per la domanda 2, vorrei andare per file normale in quanto possono essere facilmente letti e accessibili in confronto al database. Anche l'esecuzione della scrittura alla fine di un file è migliore di un db.

E sì, come nos ha dichiarato che log4net è thread-safe.

Un consiglio generale, se il progetto è di grandi dimensioni e si desidera avere qualche speranza di avere livelli di registro configurabili come ho descritto sopra, allora è davvero necessario concordare uno standard di codifica all'interno del proprio team su cosa accedere a diversi livelli.

3

Sono completamente d'accordo con ciò che hanno detto hhafez e nos. Stai andando nella giusta direzione con un pacchetto di registrazione invece di provare a far girare il tuo. È molto più pulito e più facile da correggere. La registrazione su un file di testo è molto più facile da gestire a lungo termine (dati i tipici set di abilità di progetto) rispetto alla registrazione di DB, anche se si sta pianificando un'analisi complessa dei dati segnalati, a volte è più semplice averlo già in un DB.

Se il debug è uno degli obiettivi dichiarati per l'implementazione di una soluzione di registrazione, è imperativo che standardizzate tutti i livelli di registro in anticipo e apportate quella parte del processo di revisione del codice. Avere abbastanza differenze in granularità in modo da poter aumentare gradualmente la profondità dei report passando al livello successivo. È molto frustrante cercare di risolvere un problema di PROD, non avere abbastanza informazioni di registro per vedere il problema, quindi passare al livello successivo di registrazione e sommergere completamente i registri con così tanto spargimento che non è possibile vedere la foresta per gli alberi (e i registri rotolano ogni 5 minuti a causa del volume). L'ho visto accadere.

Nella maggior parte dei casi di registrazione di file di testo, le prestazioni non dovrebbero essere un problema. È un po 'più complicato con la registrazione del DB. Fare un inserto è solo leggermente più intenso di accodamento a un file di testo, ma è il volume per unità di tempo che lo rende molto più brutto su scala.

Inoltre, se avete intenzione di fare qualsiasi analisi dei log non in linea, si dovrebbe scegliere un formato di file di registro che è facilmente estensibile e non richiederà enormi modifiche al codice di analisi, se avete bisogno di aggiungere qualcosa al registro. Stai lontano da strutture di messaggi annidate e multiparte. Analizzare quelli diventa un dolore.

Buona fortuna!