关于版本控制,语义日志记录应用程序块的文档建议:
如果确实需要修改 EventSource 类,则应将更改限制为添加方法以支持新的日志消息,以及添加现有方法的重载(这将具有新的事件 ID)。您不应删除或更改现有方法的签名。
假设我有以下 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);
}
}
然后我想添加对记录查询字符串的支持。我可以添加具有相同 ID 的重载方法吗?
[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
类的维护需要多少注意这一点。