* Важно: Это сообщение сосредоточено на решении основной причины того, что, по-вашему, ваша проблема, вместо того, чтобы предоставить решение, которое вы специально попросили. Я понимаю, что эта должность устарела, но было важно внести свой вклад. *
У моей команды была аналогичная проблема, и мы изменили способ ведения журнала, который значительно сократил объем поддержки производства и время исправления ошибок. Прагматически это работает в большинстве корпоративных приложений, в которых работает моя команда:
- Префикс сообщения журнала с именем «имя класса». «Имя функции».
- Для получения истинных ошибок выведите захваченное исключение в регистратор событий.
- Сосредоточьтесь на том, чтобы иметь четкие сообщения как часть обзора однорангового кода в отличие от идентификаторов событий.
- Используйте уникальный идентификатор события для каждой функции, просто перейдите сверху вниз и нажмите клавишу.
- , когда становится нецелесообразным кодировать каждую функцию с другим идентификатором события, каждый класс должен просто иметь уникальный (столкновения будут прокляты).
- Использование категорий событий, чтобы уменьшить зависимость Идентификатор события при фильтрации журнала
Конечно, это важно, насколько большой ваши приложения и как чувствительные данные. Большинство из нас составляют около 10 тыс. До 500 тыс. Строк кода с минимально-чувствительной информацией. Это может показаться слишком упрощенным, но с точки зрения KISS оно прагматично работает.
Учитывая, что использование абстрактного класса журнала событий для упрощения процесса облегчает его использование, хотя очистка моя неприятна. Например:
MyClass.cs (с использованием оболочки)
class MyClass
{
// hardcoded, but should be from configuration vars
private string AppName = "MyApp";
private string AppVersion = "1.0.0.0";
private string ClassName = "MyClass";
private string LogName = "MyApp Log";
EventLogAdapter oEventLogAdapter;
EventLogEntryType oEventLogEntryType;
public MyClass(){
this.oEventLogAdapter = new EventLogAdapter(
this.AppName
, this.LogName
, this.AppName
, this.AppVersion
, this.ClassName
);
}
private bool MyFunction() {
bool result = false;
this.oEventLogAdapter.SetMethodInformation("MyFunction", 100);
try {
// do stuff
this.oEventLogAdapter.WriteEntry("Something important found out...", EventLogEntryType.Information);
} catch (Exception oException) {
this.oEventLogAdapter.WriteEntry("Error: " + oException.ToString(), EventLogEntryType.Error);
}
return result;
}
}
EventLogAdapter.cs
class EventLogAdapter
{
//vars
private string _EventProgram = "";
private string _EventSource = "";
private string _ProgramName = "";
private string _ProgramVersion = "";
private string _EventClass = "";
private string _EventMethod = "";
private int _EventCode = 1;
private bool _Initialized = false;
private System.Diagnostics.EventLog oEventLog = new EventLog();
// methods
public EventLogAdapter() { }
public EventLogAdapter(
string EventProgram
, string EventSource
, string ProgramName
, string ProgramVersion
, string EventClass
) {
this.SetEventProgram(EventProgram);
this.SetEventSource(EventSource);
this.SetProgramName(ProgramName);
this.SetProgramVersion(ProgramVersion);
this.SetEventClass(EventClass);
this.InitializeEventLog();
}
public void InitializeEventLog() {
try {
if(
!String.IsNullOrEmpty(this._EventSource)
&& !String.IsNullOrEmpty(this._EventProgram)
){
if (!System.Diagnostics.EventLog.SourceExists(this._EventSource)) {
System.Diagnostics.EventLog.CreateEventSource(
this._EventSource
, this._EventProgram
);
}
this.oEventLog.Source = this._EventSource;
this.oEventLog.Log = this._EventProgram;
this._Initialized = true;
}
} catch { }
}
public void WriteEntry(string Message, System.Diagnostics.EventLogEntryType EventEntryType) {
try {
string _message =
"[" + this._ProgramName + " " + this._ProgramVersion + "]"
+ "." + this._EventClass + "." + this._EventMethod + "():\n"
+ Message;
this.oEventLog.WriteEntry(
Message
, EventEntryType
, this._EventCode
);
} catch { }
}
public void SetMethodInformation(
string EventMethod
,int EventCode
) {
this.SetEventMethod(EventMethod);
this.SetEventCode(EventCode);
}
public string GetEventProgram() { return this._EventProgram; }
public string GetEventSource() { return this._EventSource; }
public string GetProgramName() { return this._ProgramName; }
public string GetProgramVersion() { return this._ProgramVersion; }
public string GetEventClass() { return this._EventClass; }
public string GetEventMethod() { return this._EventMethod; }
public int GetEventCode() { return this._EventCode; }
public void SetEventProgram(string EventProgram) { this._EventProgram = EventProgram; }
public void SetEventSource(string EventSource) { this._EventSource = EventSource; }
public void SetProgramName(string ProgramName) { this._ProgramName = ProgramName; }
public void SetProgramVersion(string ProgramVersion) { this._ProgramVersion = ProgramVersion; }
public void SetEventClass(string EventClass) { this._EventClass = EventClass; }
public void SetEventMethod(string EventMethod) { this._EventMethod = EventMethod; }
public void SetEventCode(int EventCode) { this._EventCode = EventCode; }
}
Просто чтобы быть ясно, вы хотите, два вызова в вашем примере, чтобы иметь разные eventID? –
@Michael Да, они должны иметь разные EventIds, потому что вызовы регистрации происходят на разных строках. Мой вопрос: можно ли это сделать? –