سؤال

I am using Microsoft Application Insights for my Web Application. I used the Application Insights TraceListener NuGet package for logging. That worked perfectly.

Now I would like to switch to NLog. I added the Microsoft.ApplicationInsights.NLogTarget NuGet package and added a new NLog target in my NLog configuration file:

<target name='ai' xsi:type='ApplicationInsights' />

NLog throws an exception:

Target cannot be found: 'ApplicationInsights'

I also tried adding the assembly via extensions like so:

<extensions>
    <add assembly="Microsoft.ApplicationInsights.NLogTarget" />
</extensions>    

But it did not work either.

Any suggestions?

هل كانت مفيدة؟

المحلول

Solution: (thanks to @nemesv for the tip)

Programmatically add the target with

ConfigurationItemFactory.Default.Targets.RegisterDefinition(
    "ApplicationInsightsTarget", 
    typeof(Microsoft.ApplicationInsights.NLogTarget.ApplicationInsightsTarget)
);

and use it with

<target name='ai' xsi:type='ApplicationInsightsTarget' />

نصائح أخرى

Or you can programmatically specify the target:

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;

If anyone else stumbles over this: The correct target type is ApplicationInsightsTarget not ApplicationInsights.

This works fine:

<extensions>
    <add assembly="Microsoft.ApplicationInsights.NLogTarget" />
</extensions>    
<targets>
    <target name="ai" xsi:type="ApplicationInsightsTarget" />
</targets>

No need to add the target by code.

See also: https://github.com/microsoft/ApplicationInsights-dotnet/tree/main/LOGGING#nlog

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top