Что касается версий, то documentation for the Semantic Logging Application Block рекомендует:Могу ли я добавить новую версию и метод событий и использовать тот же идентификатор события?
Если вам необходимо изменить свой класс EventSource, вы должны ограничить изменения добавления методов для поддержки новых сообщений журнала, и добавления перегруженных существующих методов (что бы иметь новый идентификатор события). Вы не должны удалять или изменять подпись существующих методов.
Предположим, я имел следующий EventSource класс:
[EventSource(Name = "Instrumentation")]
public class InstrumentationEventSource : EventSource {
private static readonly Lazy<InstrumentationEventSource> Singleton = new Lazy<InstrumentationEventSource>(() => new InstrumentationEventSource());
public static InstrumentationEventSource Log { get { return Singleton.Value; } }
private InstrumentationEventSource() {}
[Event(eventId: 901)]
public void EndPage(string url) {
WriteEvent(901, url);
}
}
А потом я хотел бы добавить поддержку для входа в строку запроса. Могу ли я добавить перегруженный метод с тем же идентификатором?
[Event(eventId: 901)]
public void EndPage(string url) {
WriteEvent(901, url);
}
[Event(eventId: 901)]
public void EndPage(string url, string queryString) {
WriteEvent(901, url, queryString);
}
Как я могу поддержать будущие модификации с минимальным воздействием на приложения или приложения протоколирования хоста вне-процесса?
Могу ли я сохранить подписи проще, добавив дополнения в класс модели?
public class LogData {
public string url { get; set; }
// public string queryString { get; set; }
}
и
[Event(eventId: 901)]
public void EndPage(LogData data) {
WriteEvent(901, data);
// Or does the params object[] args parameter not support classes?
// WriteEvent(901, data.url);
// And this would have to be changed anyway?
// WriteEvent(901, data.url, data.queryString);
}
Я не совсем уверен, где Event ID вписывается во все это, и сколько поддержание EventSource
класса должно оказывать помощь по этому поводу.
Спасибо. В вашем последнем примере я добавляю новый метод или заменяю его (и обновляю все мои абоненты)? – maxwellb
Просто измените существующий метод ... Я добавил несколько подробностей о том, как избежать обновления существующих абонентов. –