Usando o StreamWriter para implementar um log rotativo e excluir do topo
Meu aplicativo do C # winforms 4.0 tem usado um redutor thread-safe para fazer informações internas de depuração de log. Quando meu aplicativo é aberto, ele apaga o arquivo e o recria. Quando o aplicativo fecha, ele salva o arquivo.
O que eu gostaria de fazer é modificar meu aplicativo para que ele seja anexado em vez de substituí-lo. Esta é uma correção simples.
No entanto, aqui está a minha pergunta:
Gostaria de manter meu arquivo de log em torno de 10 megabytes no máximo. Minha restrição seria simples. Quando você fechar o arquivo, se o arquivo for maior que 10 megabytes, reduza os primeiros 10%.
Existe uma maneira melhor de fazer o seguinte:
Feche o arquivoVerifique se o arquivo é> 10 megSe sim, abra o arquivoAnalise a coisa todaAbater os primeiros 10%Escreva o arquivo de voltaPertoEdit: bem, eu acabei rolando o meu próprio (mostrado a seguir) a sugestão de passar para o Log4Net é boa, mas o tempo que levaria para aprender a nova biblioteca e mover todas as minhas declarações de log (milhares) não é tempo efetivo para o pequeno realce que eu estava tentando fazer.
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);
}
}