我正在使用Application Insights for Console App(.NET Core 2.1)。
与ApplicationInsights.DependencyCollector
相比,我需要收集更多有关依赖关系(请求/响应)的信息。
因此,我尝试了this blog中描述的方法。它适用于请求。
但这对响应无效。因为在上面的代码中,Activity.Current
是null
:
[DiagnosticName("System.Net.Http.HttpRequestOut.Stop")]
public virtual void OnHttpRequestOutStop(System.Net.Http.HttpRequestMessage request, System.Net.Http.HttpResponseMessage response, TaskStatus requestTaskStatus)
{
Console.WriteLine(Activity.Current);
}
在与HttpRequestOut.Start
类似的代码中,它具有适当的值:
[DiagnosticName("System.Net.Http.HttpRequestOut.Start")]
public virtual void OnHttpRequestOutStart(System.Net.Http.HttpRequestMessage request)
{
Console.WriteLine(Activity.Current);
}
为什么在System.Net.Http.HttpRequestOut.Stop
事件中,Activity.Current
是null
?
如何在开始和停止事件中访问相同的活动?
更新:
我找到了有关问题here的一些信息。
答案 0 :(得分:0)
This comment确实有所帮助。
最复杂的情况是您要访问响应并基于此来丰富遥测。您仍然可以使用诊断源Stop事件,但是由于AppInsights均匀地监听同一事件,并且您的侦听器需要在AppInsights之前接收Stop事件,因此这变得很骇人。
因此,我只是在遥测客户端之前初始化了“丰富”观察者类。并且import math
lst = [2,10,4,3,8,6,9,9,18,27]
l = len(lst)
mp = {}
mn = min(lst)
mx = max(lst)
nmax = int(math.sqrt(mx / mn))
for i in range(2, l):
for n in range(2, min(i, (l - 1)//2, nmax) + 1):
if lst[i - n] * n == lst[i]:
t = (i-n, n)
le = mp[t] if t in mp else 1
mp[(i, n)] = le + 1
res = {}
for x in mp:
n = x[1]
le = mp[x]
ending = x[0]
if n in res:
if res[n][0] < le:
res[n] = (le, ending)
else:
res[n] = (le, ending)
print(mp)
print(res)
{(2, 2): 2, (4, 2): 3, (5, 2): 2, (6, 3): 2, (8, 2): 2, (8, 3): 2, (9, 3): 3}
{2: (3, 4), 3: (3, 9)}
中的Activity.Current
不再是null
。