У меня периодически возникает проблема с некоторым кодом, записывающим в журнал событий Windows с использованием C # и класса EventLog
.Net.
По сути, этот код отлично работает изо дня в день, но очень редко мы начинаем получать ошибки, подобные этой:
"System.ArgumentException: только
первые восемь символов пользовательского журнала
имя значимо, и есть
уже другой лог в системе
используя первые восемь символов
имя дано. Имя дано:
«Приложение», название существующего журнала:
'Application'. "
Из другой информации в наших журналах я могу определить, что затронутый стек вызовов выглядит следующим образом: вы можете ясно видеть, что я на самом деле пытаюсь записать в существующий журнал LB_Email
(сначала вызывается LogEmail
):
public static void LogEmail(string to, string type)
{
string message = String.Format("{0}\t{1}\t{2}", DateTime.Now, to, type);
Log(message, "LB_Email", EventLogEntryType.Information);
}
private static void Log(string message, string logName, EventLogEntryType type)
{
using (EventLog aLog = new EventLog())
{
aLog.Source = logName;
aLog.WriteEntry(message, type);
}
}
Как только ошибки начинают возникать, кажется, что доступ к нашему LB_Email
журналу событий как-то блокируется - просмотр свойств в конкретном журнале событий показывает, что большая часть информации неактивна и неизменна, а другие процессы, как представляется, не могут регистрироваться в этом журнале. тоже. Тем не менее, я вижу ошибку (которая использует тот же метод Log выше) через try-catch, который записывает в журнал 'LB_Error' и продолжает функционировать, как и ожидалось.
Я вызываю этот код из многопоточного приложения, но мне не удалось определить, является ли приведенный выше код поточно-ориентированным.
Я также могу подтвердить, что рассматриваемый журнал снова работает нормально после завершения и перезапуска процесса ... и у него были соответствующие настройки для повторного использования записей, когда он был заполнен ... хотя я не думаю, что это была проблема .
Мне бы очень хотелось услышать ваши мысли и предложения.