13
votes

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?

3
Have you checked that the Microsoft.ApplicationInsights.NLogTarget.dll is correctly copied to the output folder? Have you tried to register the target from code with: ConfigurationItemFactory.Default.Targets.RegisterDefinition("ApplicationInsightsTarget", typeof(Microsoft.ApplicationInsights.NLogTarget.ApplicationInsightsTarget));?nemesv
I have already checked that the NLog target dll and all the depending dll's are indeed in the final bin folder. But I will try to add it programmatically as you suggested. Good idea!Michael A. Volz aka Flynn

3 Answers

8
votes

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' />
7
votes

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;
0
votes

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.