2016-11-16 103 views
2

我只是在寻找确认这个实现是线程安全的。我找不到任何有关在我的WriteLog方法中使用的.Net EventLog.WriteEntry方法是否内部线程安全的信息。是EventLog编写器线程安全

我需要它是线程安全的上下文是这样的。我有3个线程我希望他们共享相同的记录器实例。它们将全部写入相同的事件日志源 - 源不能更改。

类中没有成员变量不同步从访问它们的不同线程中获取同步,所以我在考虑是否它是线程安全的答案纯​​粹取决于EventLog.WriteEntry方法本身是否是线程安全的。

我很感激,如果有人可以证实这一点。非常感谢。

public class EventLogWriter : ILogWriter 
{ 
    private string EventLogSourceName; 
    public EventLogWriter() { EventLogSourceName = System.Configuration.ConfigurationManager.AppSettings["CustomEventLogSourceName"]; } 
    public EventLogWriter(string eventLogSourceName) { EventLogSourceName = eventLogSourceName; } 

    // ILogWriter interface method 
    public void WriteLog(string content, LogType logType) 
    { 
     // maps from our logType to the event log type 
     EventLogEntryType eventLogType = GetEventLogType(logType); 
     EventLog.WriteEntry(this.EventLogSourceName, content.ToString(), eventLogType, 0, (short)logType); 
    } 

    protected EventLogEntryType GetEventLogType(LogType logType) 
    { 
     EventLogEntryType eventLogType; 
     switch (logType) 
     { 
      case LogType.UnhandledException: 
       eventLogType = EventLogEntryType.Error; 
       break; 
      case LogType.HandledException: 
       eventLogType = EventLogEntryType.Warning; 
       break; 
      case LogType.Warning: 
       eventLogType = EventLogEntryType.Warning; 
       break; 
      case LogType.Information: 
       eventLogType = EventLogEntryType.Information; 
       break; 
      case LogType.Verbose: 
       eventLogType = EventLogEntryType.Information; 
       break; 
      default: 
       eventLogType = EventLogEntryType.Error; 
       break; 
     } 
     return eventLogType; 
    } 
} 

回答

1

如果你读了EventLog类的文档,你会在底部发现这样一个字条:

任何公共静态此类型的成员(在Visual Basic中的Shared)都是线程安全的。任何实例成员不保证是线程安全的。

+0

啊,完美。感谢您的及时回复。我搜索了WriteLog方法页面,没有想到要升级到EventLog类。 – Bunjy