我有 Blazor Interactive Server 应用程序。它通过 Application Insights SDK 连接到 Application Insights。
如何在某些情况下禁用 Application Insights?
这是我们的情况。我们有几个开发人员在运行/测试代码时在桌面上运行应用程序。他们从不希望 Application Insights 运行。然后,他们将代码推送到 GitHub,在那里进行测试,然后推送到开发槽。仅当我们进行负载测试时,我们才希望 Application Insights 在开发槽上运行。然后,一旦所有测试通过,我们就交换开发和生产槽。我们始终希望使用 Application Insights 来获得生产槽。
Application Insights 已在 Azure App Server 刀片中关闭,因为我们使用 SDK 添加了它。我们无法删除 SDK,因为代码的最终目的地(生产槽)需要将其合并并运行。
如果没有其他方法将其设置为关闭,那么传递无效的连接字符串可能是最好的方法。但我不喜欢这样做,因为它是故意导致错误情况。并调用 Application Insights 方法,例如跟踪搜索时间,然后在每次调用时执行向下传递的代码,然后在尝试发送它时遇到错误。
有什么东西允许 Application Insights 初始化,但告诉它在禁用时快速忽略对其的任何调用?
它是否会阻止它连接到 Application Insights 本身,以便它不会收到有关该服务器的任何信息?
要完全阻止本地环境与 Application Insights 连接,您可以仅为生产环境传递连接字符串。
var environment = builder.Environment;
if (environment.IsProduction())
{
builder.Services.AddApplicationInsightsTelemetry(new Microsoft.ApplicationInsights.AspNetCore.Extensions.ApplicationInsightsServiceOptions
{
ConnectionString = builder.Configuration["APPLICATIONINSIGHTS_CONNECTION_STRING"]
});
}
var app = builder.Build();
var log = app.Services.GetRequiredService<ILogger<Program>>();
log.LogInformation($"Environment : {environment.EnvironmentName}"); // Log the environment name
log.LogInformation("Information Logs");
log.LogInformation("Production Logs");
log.LogInformation("No local");
Tools
=> Options
=> Web Projects
和 Projects
下的 Solutions
中看到禁用 Application Insights 的选项。它是否会阻止它连接到 Application Insights 本身,以便它不会收到有关该服务器的任何信息?
您可以在GitHub
中查看讨论的类似问题感谢@Callon Campbell的解释。
TelemetryConfiguration.Active.DisableTelemetry
属性,if(.IsDevelopment())
{
TelemetryConfiguration.Active.DisableTelemetry=true;
}
但你可以看到该属性现在已经过时,不是推荐的方式。