0

Я думал о добавлении простого механизма регистрации в моем приложении, чтобы регистрировать детали ошибок, возникающих во время работы приложения.Как обрабатывать исключения во время ведения журнала?

private TextWriter m_TextWriter; 
private List<string> m_LogEntries; // buffered log messages 

// ... 

public void Write(string message) 
{ 
    m_LogEntries.Add(message); 

    if (m_LogEntries.Count >= m_LogEntriesLimit) 
    { 
     Flush(); 
    } 
} 

private void Flush() 
{ 
    try 
    { 
     foreach (var message in m_LogEntries) 
     { 
      m_TextWriter.WriteLine(message); 
     } 
     m_TextWriter.Flush(); 
    } 
    catch 
    { 
     // How to deal with exceptions? 
    } 
    finally 
    { 
     m_LogEntries.Clear(); 
    } 
} 

Данные журнала записываются в текстовый файл, поэтому во время каждой операции записи могут возникать некоторые исключения. Каков правильный способ обработки исключений, возникающих во время вызовов методов журнала? Должен ли я их поймать и игнорировать?

Другими словами, регистратор часто используется для регистрации сведений об исключениях, возникающих во время выполнения приложения. Но как обрабатывать исключения, которые могут возникать при написании сообщений журнала?

ответ

1

Лучше использовать систему ведения журнала, такую ​​как Log4Net.

Кроме того, существует небольшая вероятность столкнуться с исключениями при использовании класса TextWriter. Вам нужно только убедиться, что:

  1. Ваши права и правильные пути при открытии потока/TextWriter в первую очередь.
  2. Ваш TextWriter объект не Disposed преждевременно в дополнение к ловле ObjectDisposedException явно
  3. частности ловли IOException во время записи

Вам может понадобиться иметь try-catch только, чтобы быть 100% уверены, что ничего плохого не происходит (например, когда внешние процессы влияют на ваши пути к файлам журнала). Если это не удается, подумайте о добавлении повтора с помощью механизма отсрочки после нескольких попыток.

Во всяком случае, вы можете просто сделать, как @AnimalStyle сказал, если когда-либо это очень маловероятное событие, что это произойдет.

+1

@ MickyDuncan Это мнение. Ответ на вопрос OP во фразе: «Во всяком случае, вы можете просто сделать, как сказал AnimalStyle». –

+0

@MickyDuncan Конечно, это исключение, но это происходит, когда вы не правильно кодируете. Не похоже, что это хаотическое событие, в котором вы не контролируете ситуацию. Убедитесь, что права и пути правильные, и TextWriter работает нормально. –

+1

Вопрос: «Как обрабатывать исключения во время ведения журнала?» Оба предложения Log4Net и то, что говорит AnimalStyle, являются обоими ответами, не так ли? @MickyDuncan –

1

Я бы рекомендовал записывать эти типы ошибок в журнал событий Windows.

+0

Хотя хорошее предложение, даже запись в журнал событий может вызывать ** ArgumentException; InvalidOperationException; Win32Exception **, который нужно будет поймать. Подумайте о пересмотре своего ответа, чтобы показать, как обрабатывать исключения в соответствии с «Как обрабатывать исключения во время ведения журнала?» _ – MickyD

+0

Это просто шаг смягчения в случае, если в предложенной автором методике каротажа возникает исключение. Это позволило бы получить какое-то сообщение и информацию. Никогда не существует пуленепробиваемого решения, все решения будут иметь шанс на неудачу, несмотря ни на что. Введение резервной копии - единственный способ увеличить вероятность успеха. –

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