Domanda

Dopo aver letto un articolo sull'argomento da O ' Reilly , volevo chiedere a Stack Overflow i loro pensieri sull'argomento.

È stato utile?

Soluzione

Scrivere localmente sul disco, quindi inserire periodicamente in batch nel database (ad es. al momento del rollover del registro). Fallo in un processo separato, a bassa priorità. Più efficiente e più robusto ...

(Assicurati che la tabella dei registri del database contenga una colonna per " da quale macchina provenga l'evento di registro " molto utile!)

Altri suggerimenti

Direi di no, dato che una percentuale abbastanza elevata di errori del server comporta problemi di comunicazione con i database. Se il database fosse su un altro computer, la connettività di rete sarebbe un'altra fonte di errori che non è stato possibile registrare.

Se dovessi registrare gli errori del server su un database, sarebbe fondamentale avere un logger di backup che scrivesse localmente (su un registro o file di eventi o qualcosa del genere) nel caso in cui il database fosse irraggiungibile.

Accedi al DB se puoi e non rallenta il tuo DB :)

È molto più veloce per trovare qualsiasi cosa nel DB e poi nei file di registro. Soprattutto se pensi al futuro di cosa avrai bisogno. Effettuando il login in db è possibile interrogare la tabella di registro in questo modo:

select * from logs
where log_name = 'wcf' and log_level = 'error'

quindi dopo aver trovato l'errore puoi vedere l'intero percorso che porta a questo errore

select * from logs
where contextId = 'what you get from previous select' order by timestamp

Come otterrai queste informazioni se le accedi in file di testo?

Modifica Come suggerito JonSkeet, questa risposta sarebbe migliore se affermassi che si dovrebbe prendere in considerazione la possibilità di effettuare la registrazione su db asincrona. Quindi lo dichiaro :) Non ne avevo proprio bisogno. Ad esempio, come fare puoi controllare " ASP.NET ultra veloce " di Richard Kiessig.

Se il database è un database di produzione, questa è un'idea orribile. avrai problemi con backup, replica, ripristino. Come più spazio di archiviazione per DB stesso, repliche, se presenti, e backup. Più tempo per impostare e ripristinare la replica, più tempo per verificare i backup, più tempo per ripristinare i DB dai backup.

Probabilmente non è una cattiva idea se vuoi i log in un database, ma direi di non seguire il consiglio dell'articolo se hai molte voci del file di log. Il problema principale è che ho visto che i file system hanno problemi a tenere il passo con i registri provenienti da un sito occupato, per non parlare di un database. Se vuoi davvero farlo, guarderei a caricare i file di registro nel database dopo che sono stati scritti per la prima volta sul disco.

Pensa a un database correttamente configurato che utilizza RAM per letture e scritture? Questo è molto più veloce della scrittura su disco e non presenterebbe il collo di bottiglia di I / O del disco che si vede quando viene utilizzato un numero elevato di client che si verifica quando i thread iniziano a bloccarsi a causa del sistema operativo che dice loro di attendere l'esecuzione di thread che stanno utilizzando tutti gli I / O disponibili maniglie.

Non ho benchmark per provare questi dati, sebbene la mia ultima applicazione stia funzionando con la registrazione del database. Ciò avrà una sicurezza come menzionato in una di queste risposte. Se non è possibile creare la connessione al database, creare un database locale (h2 forse?) E scrivere su quello. Quindi possiamo avere un controllo periodico della connettività del database che ristabilirà la connessione, scaricherà il database locale e lo sposterà nel database remoto.

Questo potrebbe essere fatto durante le ore non lavorative se non si dispone di un sito H-A.

In futuro spero di sviluppare parametri di riferimento per dimostrare il mio punto.

Buona fortuna!

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