We want to get an ILogger instance so that it can be passed to other library.
We tried below, but the ILogger instance does not log into Application Insights. It logs into Event Viewer successfully.
var serviceCollection = new ServiceCollection();
serviceCollection.AddLogging(builder => builder
.AddFilter("Default", LogLevel.Information)
.AddFilter("Microsoft", LogLevel.Warning)
.AddFilter("System", LogLevel.Warning)
.AddEventLog(config => { config.LogName = "Pages"; config.SourceName = "Pages"; })
.AddApplicationInsights(telemetry =>
telemetry.ConnectionString = "my-key",
options => options = new ApplicationInsightsLoggerOptions()));
var serviceProvider = serviceCollection.BuildServiceProvider();
var loggerFactory = serviceProvider.GetService<ILoggerFactory>();
var logger = loggerFactory.CreateLogger("my-logger");
logger.LogInformation("Hi");
We have added the necessary packages i.e. Microsoft.Extensions.Logging and Microsoft.Extensions.Logging.ApplicationInsights
Is there no way, we can get an ILogger instance from ServiceCollection for AppInsights?
2
Answers
I figured out that it was not logging to AppInsights because there was no TelemetryChannel or TelemetryClient properly configured.
Approach 1 - Using Telemetry Channel
Approach 2 - Injecting Telemetry Client using the
Microsoft.ApplicationInsights.WorkerService
packageBoth approaches will work fine; we used approach 2.
If you are using visual studio then you can configure the application Insights directly through the
connection service
option.Just click on the
conneted service
file in the solution explorerAfter that click on
Add a service dependency
to configure the application insightsNow a pop will emerge in which select
Azure Application Insights
then click on next.Now select an application Insghts from the list or create a new one .
Azure portal output :-