有没有什么办法来仪泛型类在.NET中使用新的舍利定制instrumenation? 我添加了仪表的配置就像我对于非泛型类,但没有运气做。
Answer 1:
您将需要使用IL签名。 确定签名的最好办法是在newrelic.config New Relic的日志转起来“所有”,运行你的应用程序,然后搜索相应的日志分析器的方法名称(请务必设置日志回信息完成后) 。
使用签名可以构建自定义仪器和自定义事务 。
使用示例代码:
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>
一般来说,你并不需要在仪器仪表文件中指定方法参数。
文章来源: Custom instrumentation for generic classes in .Net using NewRelic