Вот как я реализовал ведение журнала событий. Я создал общий интерфейс ILogger, чтобы можно было переключаться между различными механизмами регистрации:
interface ILogger
{
void Debug(string text);
void Warn(string text);
void Error(string text);
void Error(string text, Exception ex);
}
Мой класс реализации очень прост:
class EventLogger : ILogger
{
public void Debug(string text)
{
EventLog.WriteEntry("MyAppName", text, EventLogEntryType.Information);
}
public void Warn(string text)
{
EventLog.WriteEntry("MyAppName", text, EventLogEntryType.Warning);
}
public void Error(string text)
{
EventLog.WriteEntry("MyAppName", text, EventLogEntryType.Error);
}
public void Error(string text, Exception ex)
{
Error(text);
Error(ex.StackTrace);
}
}
Обратите внимание, что я не создаю экземпляр EventLog. Чтобы использовать мой класс логгера, я просто имею следующую ссылку (вы могли бы получить это, возвращая статический метод фабрики):
private static readonly ILogger log = new EventLogger();
А фактическое использование выглядит так:
try
{
// business logic
}
catch (Exception ex)
{
log.Error("Exception in MyMethodName()", ex);
}