有没有办法在.Net中使用新的遗物定制工具来检测泛型类?我为非泛型类添加了仪器配置,但没有运气。
答案 0 :(得分:5)
您需要使用IL签名。确定签名的最佳方法是在Newrelic.config中将New Relic日志记录设置为“all”,运行您的应用程序,然后在相应的profiler日志中搜索方法名称(确保在完成后将日志记录设置回信息)
使用签名,您可以构建Custom Instrumentation和Custom Transactions。
使用示例代码:
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
var t = new Test<int>();
while (true)
{
StartTransaction();
t.mymethod(100);
}
}
static void StartTransaction()
{
Console.WriteLine("Start Transaction");
System.Threading.Thread.Sleep(1100);
MethodA();
}
static void MethodA()
{
Console.WriteLine("MethodA");
}
}
class Test<T>
{
public void mymethod(T t) {
var k = t;
System.Threading.Thread.Sleep(1000);
}
}
}
查看分析器日志,NewRelic.Profiler。[pid]其中[pid]对应于运行应用程序的w3wp进程或其他进程,您将看到以下内容:
[Trace]Possibly instrumenting: (Module: C:\Users\me\Documents\Visual Studio 2013\Projects\ConsoleApplication1\ConsoleApplication1\bin\Debug\ConsoleApplication1.exe, AppDomain: ConsoleApplication1.exe)[ConsoleApplication1]ConsoleApplication1.Test`1.mymethod
构建自定义检测/事务需要不带扩展名 ConsoleApplication1 且类/方法名称 ConsoleApplication1.Test`1.mymethod 的AppDomain。
示例(自定义事务):
<?xml version="1.0" encoding="utf-8"?>
<extension xmlns="urn:newrelic-extension">
<instrumentation>
<tracerFactory name="NewRelic.Agent.Core.Tracer.Factories.BackgroundThreadTracerFactory" metricName="Background/MyTaskRunner">
<match assemblyName="ConsoleApplication1" className="ConsoleApplication.Test`1">
<exactMethodMatcher methodName="mymethod" />
</match>
</tracerFactory>
</instrumentation>
</extension>
通常,您无需在检测文件中指定方法参数。