17

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?

  • 2
    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 Apr 29 '14 at 18:48
  • 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 Apr 30 '14 at 06:44

3 Answers3

10

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' />
  • 1
    seems they all map to trace in application insight, any idea how to map it to exception? – Bargitta Dec 13 '17 at 05:25
  • 1
    What a nonsense! Documentation says nothing about that extra RegisterDefinition call. I was struggling with this as well. Thank you very much for this solution! – emdee.pro Feb 07 '19 at 19:06
  • I am trying to register and log programmatically. But the logs are not getting logged. I have raised a question in stackoverflow and its up for a toss. I tried with internal log and it is showing no error what so error. Here's the link to my question https://stackoverflow.com/questions/60401441/application-insights-configuration-web-api – Arjun Menon Mar 18 '20 at 16:27
8

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;
danpop
  • 967
  • 13
  • 25
5

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

Der_Meister
  • 4,771
  • 2
  • 46
  • 53
mhaslhofer
  • 121
  • 2
  • 5