L'applicazione My C# winforms 4.0 utilizza uno streamwriter thread-safe per eseguire le informazioni di registrazione interne e di debug. Quando si apre la mia app, cancella il file e lo ricrea. Quando l'app si chiude, salva il file.Utilizzo di StreamWriter per implementare un registro a rotazione e eliminazione dall'alto
Quello che mi piacerebbe fare è modificare la mia applicazione in modo che appenda invece di sostituire. Questa è una soluzione semplice.
Tuttavia, ecco la mia domanda:
vorrei mantenere il mio file di log circa 10 megabyte massimo. Il mio vincolo sarebbe semplice. Quando si va a chiudere il file, se il file è superiore a 10 megabyte, ritagliare il primo 10%.
Esiste un modo 'migliore' quindi nel seguente modo:
- Chiudere il file
- Controllare se il file è> 10 meg
- In tal caso, aprire il file
- analizzare il intera cosa
- Cull il primo 10%
- scrivere il file di nuovo fuori
- Chiudi
Edit: bene, ho finito per rotazione mia (mostrato in seguito) il suggerimento di passare palese a Log4Net è una buona, ma il tempo che merion vuole per imparare la nuova libreria e spostare tutte le mie dichiarazioni di registro (migliaia) non è il momento efficace per il piccolo miglioramento che stavo cercando di fare.
private static void PerformFileTrim(string filename)
{
var FileSize = Convert.ToDecimal((new System.IO.FileInfo(filename)).Length);
if (FileSize > 5000000)
{
var file = File.ReadAllLines(filename).ToList();
var AmountToCull = (int)(file.Count * 0.33);
var trimmed = file.Skip(AmountToCull).ToList();
File.WriteAllLines(filename, trimmed);
}
}
E che ne è dell'utilizzo di una specifica libreria scritta per la registrazione che già implementa questa funzionalità? (Mi viene in mente Log4Net) – Steve
Non ho avuto il tempo di guardare in Log4Net. Fino ad ora, la mia semplice lezione di streamwriter è andata benissimo. Se Log4Net consente il log "rolling" che sto cercando, è sicuramente la soluzione che dovrei usare. – greggorob64
I futuri lettori: "" ... [to] spostare tutte le mie istruzioni di registro (migliaia) non è efficace nel tempo "' - ed è per questo che ci affidiamo all'iniezione e alle interfacce di dipendenza. :) Un design migliore, ad esempio l'iniezione di un'istanza di "ILogger' (ad esempio) per tutte le classi che necessitano di registrazione - o anche solo una singola classe/funzione di registrazione master - consentirebbe di modificare tutte le funzionalità di registrazione in una posizione quando i requisiti di registrazione cambiano . – brichins