add app insights trace logging to .net core consol

2019-05-26 17:28发布

问题:

I've got a .net core console application (not AspNetCore), and I want to add app insights logging that will push out the trace logs to app insights. I have tried using Microsoft.ApplicationInsights.AspNetCore, but when I do:

 factory.AddApplicationInsights(serviceProvider);

it throws an error saying it can't find the hosting environment

Unable to resolve service for type 'Microsoft.AspNetCore.Hosting.IHostingEnvironment' while attempting to activate 'Microsoft.ApplicationInsights.AspNetCore.TelemetryInitializers.AspNetCoreEnvironmentTelemetryInitializer'.

presumably because this is not an AspNetCore app, but just a pure console app.

Is there a way I can get trace logging pushed to App Insights from within my .net core console app?

回答1:

Use Microsoft.ApplicationInsights as described in https://github.com/Microsoft/ApplicationInsights-aspnetcore/wiki/Getting-Started-for-a-.NET-Core-console-application.



回答2:

Actually, faced same problem and finally resolved it looking inside AddApplicationInsights source code. The trick is that you had to register TelemetryClient manually to the container to make this stuff work for console application:

  var telemetryClient = new TelemetryClient(new TelemetryConfiguration()
        {
            InstrumentationKey = config.GetValue("ApplicationInsights:InstrumentationKey")
        });

        services.AddSingleton(x => telemetryClient);

        var provider = services.BuildServiceProvider();

        loggerFactory.AddApplicationInsights(provider, LogLevel.Information);
        var logger = loggerFactory.CreateLogger<Program>();

        logger.LogInformation("Test");