如何在NLog中使用Microsoft Application Insights(无法找到目标:'ApplicationInsights')

Fly*_*ynn 10 c# logging nlog azure-application-insights azure-devops

我正在使用Microsoft Application Insights我的Web应用程序.我使用Application Insights TraceListener NuGet包进行日志记录.这非常有效.

现在我想切换到NLog.我添加了Microsoft.ApplicationInsights.NLogTargetNuGet包并在我的NLog配置文件中添加了一个新的NLog目标:

<target name='ai' xsi:type='ApplicationInsights' />
Run Code Online (Sandbox Code Playgroud)

NLog引发异常:

Target cannot be found: 'ApplicationInsights'
Run Code Online (Sandbox Code Playgroud)

我也试过通过扩展添加程序集,如下所示:

<extensions>
    <add assembly="Microsoft.ApplicationInsights.NLogTarget" />
</extensions>    
Run Code Online (Sandbox Code Playgroud)

但它也没有用.

有什么建议?

小智 7

如果其他人绊倒了这一点:正确的目标类型ApplicationInsightsTarget不是ApplicationInsights

这工作正常:

<extensions>
    <add assembly="Microsoft.ApplicationInsights.NLogTarget" />
</extensions>    
<targets>
    <target name="ai" xsi:type="ApplicationInsightsTarget" />
</targets>
Run Code Online (Sandbox Code Playgroud)

无需通过代码添加目标。

另请参阅:https ://github.com/microsoft/ApplicationInsights-dotnet/tree/main/LOGGING#nlog


Fly*_*ynn 6

解决方案:(感谢@nemesv作为提示)

以编程方式添加目标

ConfigurationItemFactory.Default.Targets.RegisterDefinition(
    "ApplicationInsightsTarget", 
    typeof(Microsoft.ApplicationInsights.NLogTarget.ApplicationInsightsTarget)
);
Run Code Online (Sandbox Code Playgroud)

并与

<target name='ai' xsi:type='ApplicationInsightsTarget' />
Run Code Online (Sandbox Code Playgroud)


dan*_*pop 6

或者您可以以编程方式指定目标:

var config = new LoggingConfiguration();
ConfigurationItemFactory.Default.Targets.RegisterDefinition(
            "ai", 
            typeof(ApplicationInsightsTarget)
        );
ApplicationInsightsTarget aiTarget = new ApplicationInsightsTarget();
aiTarget.InstrumentationKey = "your_key";
aiTarget.Name = "ai";
config.AddTarget("ai", aiTarget);
LogManager.Configuration = config;
Run Code Online (Sandbox Code Playgroud)