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 voltaPerto

Edit: 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);
     }
  }

questionAnswers(6)

yourAnswerToTheQuestion