EventLog
我有一些使用 C# 和 .Net类写入 Windows 事件日志的代码的间歇性问题。
基本上,这段代码每天都能完美运行,但我们偶尔会开始遇到如下错误:
“System.ArgumentException:只有自定义日志名称的前八个字符有意义,并且系统上已经有另一个使用给定名称的前八个字符的日志。给定的名称:'应用程序',现有日志的名称:'应用'。”
我可以从我们日志上的其他信息中确定受影响的调用堆栈是这样的 - 您可以清楚地看到我实际上正在尝试写入现有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
某种方式被锁定 - 查看特定事件日志上的属性显示大多数信息灰显且不可更改,并且其他进程似乎也被阻止记录到该日志。但是,我通过记录到“LB_Error”日志的 try-catch 看到错误(使用上述相同的 Log 方法),并且继续按预期运行。
我正在从多线程应用程序调用此代码,但我无法确定上面的代码是否是线程安全的。
我还可以确认有问题的日志在终止并重新启动进程后再次正常工作......并且它具有适当的设置以在它满时重用条目......虽然我不认为这是问题所在。
我很想听听您的想法和建议。