[英]Not sending data to Application Insights from Function App
[英]how to send logging data to app insights from a library project
我有一個 as.net core 2 web 應用程序,它依賴於“業務”項目來處理一些邏輯。 我正在嘗試設置 web 應用程序,以便將其 ILogger 日志發送到 App Insights。 如果我從其 Controller 操作中調用 logger.Log 方法,我可以正常發送日志。 但是,當調用屬於同一解決方案的另一個項目中的類時,我有一個 ILogger 實例並從那里進行日志記錄,它不會向 App Insights 發送任何日志數據。 我在這里錯過了什么嗎? 我可以想象,如果我在 web 應用程序中正確配置了日志記錄和應用程序見解,我可以從那里調用任何其他庫,並且日志記錄數據將被正常發送。
builder.Services.AddScoped<IMyClass, MyClass>();
並且您將必須定義一個構造函數,該構造函數在您的業務中采用 ILogger 實例 class; 像下面這樣的東西
private readonly ILogger<MyClass> _logger;
public MyClass(ILogger<MyClass> logger)
{
_logger = logger;
}
// _logger.LogInformation("Hi from MyClass"); e.g. logging
這種方法意味着 ILogger 將與所有必需的設置一起注入到您的業務庫中。
Microsoft.ApplicationInsights.WorkerService
中安裝 AppInsights worker package然后,您將必須編寫用於登錄 AppInsights 的代碼,如下所示
var serviceCollection = new ServiceCollection();
serviceCollection.AddApplicationInsightsTelemetryWorkerService(options => options.ConnectionString = "my-key");
serviceCollection.AddLogging(builder => builder
.AddFilter<Microsoft.Extensions.Logging.ApplicationInsights.ApplicationInsightsLoggerProvider>("", LogLevel.Information)
.AddFilter("Default", LogLevel.Information)
.AddFilter("Microsoft", LogLevel.Warning)
.AddFilter("System", LogLevel.Warning)
);
var serviceProvider = serviceCollection.BuildServiceProvider();
var loggerFactory = serviceProvider.GetService<ILoggerFactory>();
var telemetryClient = serviceProvider.GetService<TelemetryClient>();
var logger = loggerFactory.CreateLogger("my-logger");
logger.LogInformation("Hi from MyClass");
// flush and sleep at the end, before returning to the caller so that no messages are lost
telemetryClient.Flush();
System.Threading.Thread.Sleep(5000);
對於這種方法,您的業務庫項目中需要Microsoft.Extensions.DependencyInjection
和Microsoft.Extensions.Logging
包。 這種方法意味着您將獨立編寫 appinsights 日志記錄到您的 lib 項目。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.