【发布时间】:2008-11-28 09:03:55
【问题描述】:
我在使用 C# 和 .Net 的 EventLog 类写入 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 方法),并且继续按预期运行。
我从一个多线程应用程序中调用此代码,但我无法确定上面的代码是否是线程安全的。
我还可以确认有问题的日志在终止并重新启动进程后再次正常工作......并且它具有适当的设置以在条目满时重用......虽然我不认为这是问题.
我很想听听您的想法和建议。
【问题讨论】: