私はこの実装がスレッドセーフであるという確認を探しています。 WriteLogメソッドで内部的にスレッドセーフで使用するstatic .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;
}
}
ああ、完璧です。迅速な返信ありがとうございます。私はWriteLogメソッドのページを検索し、EventLogクラスのレベルに上がるとは思わなかった。 – Bunjy