2010-10-14 6 views
0

Я хочу записать некоторые события и исключения из файла журнала, когда мое приложение запущено. Размер файла журнала ограничен N мегабайтами. Когда размер файла больше N мегабайт, я хочу перезаписать его с начала файла. Поскольку размер файла составляет N мегабайт, я не хочу копировать во временный файл, а затем переименовывать его.C# запись в файл журнала

Дайте какие-либо предложения/рекомендации по вышеуказанной проблеме.

+6

Зачем изобретать колесо? есть множество приложений (например, NLog), которые делают это за вас. – RPM1984

+1

у вас также есть log4net, он действительно настраиваемый, и, как уже было сказано, не изобретайте колесо :) (я думаю, что log4net будет лучше, чем все, что вы могли бы сделать, если только вы не потратили на него 12 месяцев, но ваш босс не будет нравится). –

+0

Windows или Web? если Web ** Elmah ** скалы! http://code.google.com/p/elmah/ – balexandre

ответ

0

Если ваш вопрос относится к прослушивателю трассировки. Net, который записывает файлы .svclog, тогда ответ отрицательный: вы не можете настроить его для начала записи с самого начала, когда он достигнет определенного предела.

Однако Microsoft имеет solution called Circular Tracing, так как вы можете попытаться обойти проблему с файлами без ограничений.

2

Try Log4Not или компонент регистрации Enterprise Library от Microsoft

2

Либо использовать Log4Net (http://logging.apache.org/log4net/index.html), где вы можете сделать это

logger.Debug("Here is a debug log."); 
    logger.Info("... and an Info log."); 
    logger.Warn("... and a warning."); 
    logger.Error("... and an error."); 
    logger.Fatal("... and a fatal error."); 

или использовать Enterprise найти библиотеки (http://msdn.microsoft.com/en-us/library/ff648951.aspx), где вы можете сделать это

LogEntry entry = new LogEntry() 
         { 
          Message = "Hello Ent. Lib. Logging" 
         }; 
    Logger.Write(entry); 

Оба могут быть сконфигурированы, чтобы указать файл через веб /app.c onfig.

2

Отъезд log4net! Это действительно гибко и позволяет изменять поведение ведения журнала во время выполнения (где регистрировать/как регистрировать/что делать с журналом ...).

RollingFileAppender позволяет определить поведение, когда заданный предел размера достигнут, и он, вероятно, может ответить на ваш вопрос.

+1

Я думаю, что [RollingFileAppender] (http://logging.apache.org/log4net/release/sdk/log4net.Appender.RollingFileAppender.html) сделает лучше работа;) – Oliver

+0

@Oliver: да, вы правы! теперь это исправлено! – tsimbalar

2
float N = 1; //Log File size in MB 
FileInfo logFile = new FileInfo("c:\\myLogFile.txt"); 
if (logFile.Length > 1024 * N) 
{ 
    logFile.Delete(); 
    logFile.Create(); 
} 

using (StreamWriter logStream = logFile.AppendText()) 
    logStream.Write("String to write"); 

Самый простой способ и, возможно, самое худшее. Отредактировано с учетом комментариев Ханса Кестринга.

+1

Было бы плохо, если бы вы использовали 'new FileInfo (filename) .Length' вместо чтения каждого байта. –

+0

На самом деле, я искал что-то вроде FileInfo.GetSize или Fileinfo.Size и ничего не нашел. Тестирование размера файлов - это не то, что часто случается в моей поданной. BTW, еще один способ улучшить фрагмент выше si, чтобы использовать инструкцию Using на StreamWriter – vaitrafra

1

В качестве альтернативы Log4Net я могу порекомендовать NLog Мы считаем его более прозрачным и простым в использовании после собственного простого класса журнала.

0

Почему бы вам не попробовать библиотеку регистрации предприятий от Microsoft, которая предоставит вам больше возможностей, чем предыдущие операции FileIO или log4net.

Microsoft выпустила 5.0 версию корпоративной библиотеки, которая поможет вам записывать журналы, а также легко настраивать их с помощью пользовательского интерфейса. Попробуйте.

Смежные вопросы