Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Из этой статьи вы узнаете, как собирать логи в приложениях .NET, используя Application Insights и пакет поставщика Microsoft.Extensions.Logging.ApplicationInsights
. Используя этого поставщика, вы сможете выполнять запросы к журналам и их анализ с помощью средств Application Insights.
Внимание
Мы рекомендуем использовать дистрибутив Azure Monitor OpenTelemetry для новых приложений или клиентов, чтобы активировать Azure Monitor Application Insights. Дистрибутив OpenTelemetry в Azure Monitor обеспечивает аналогичные функциональные возможности и опыт, схожий с SDK Application Insights. Вы можете перейти из пакета SDK Application Insights с помощью руководств по миграции для .NET, Node.js и Python, но мы по-прежнему работаем над добавлением нескольких дополнительных функций для обратной совместимости.
Совет
- По умолчанию поставщик Application Insights отправляет только журналы с серьезностью
Warning
или выше. Чтобы включитьInformation
или более низкий уровень журналов, обновите параметры уровня журнала вappsettings.json
. - Если вы хотите реализовать полный спектр данных телеметрии Application Insights вместе с ведением журнала, см. статью "Настройка Application Insights для веб-сайтов ASP.NET" или Application Insights для приложений ASP.NET Core.
- Пакет NuGet
Microsoft.ApplicationInsights.WorkerService
, используемый для включения Application Insights для фоновых служб, не входит в область применения. Для получения дополнительной информации см. Application Insights для приложений рабочих служб.
Приложения ASP.NET Core
Чтобы добавить логирование через Application Insights в приложения ASP.NET Core:
Установите
Microsoft.Extensions.Logging.ApplicationInsights
.Добавить
ApplicationInsightsLoggerProvider
:
using Microsoft.Extensions.Logging.ApplicationInsights;
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddControllers();
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
builder.Logging.AddApplicationInsights(
configureTelemetryConfiguration: (config) =>
config.ConnectionString = builder.Configuration.GetConnectionString("APPLICATIONINSIGHTS_CONNECTION_STRING"),
configureApplicationInsightsLoggerOptions: (options) => { }
);
builder.Logging.AddFilter<ApplicationInsightsLoggerProvider>("your-category", LogLevel.Trace);
var app = builder.Build();
// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
app.UseSwagger();
app.UseSwaggerUI();
}
app.UseHttpsRedirection();
app.UseAuthorization();
app.MapControllers();
app.Run();
После установки пакета NuGet и регистрации поставщика с помощью внедрения зависимостей приложение готово к ведению логов. При использовании внедрения через конструктор требуется либо ILogger, либо альтернатива универсального типа ILogger<TCategoryName>. Когда эти реализации будут решены, ApplicationInsightsLoggerProvider
предоставит их. Зарегистрированные сообщения или исключения отправляются в Application Insights.
Рассмотрим следующий пример контроллера.
public class ValuesController : ControllerBase
{
private readonly ILogger _logger;
public ValuesController(ILogger<ValuesController> logger)
{
_logger = logger;
}
[HttpGet]
public ActionResult<IEnumerable<string>> Get()
{
_logger.LogWarning("An example of a Warning trace..");
_logger.LogError("An example of an Error level message");
return new string[] { "value1", "value2" };
}
}
Дополнительные сведения см. в разделе "Ведение журнала" в ASP.NET Core и тип телеметрии Application Insights, создаваемый из журналов ILogger? Где можно увидеть журналы ILogger в Application Insights?.
Консольное приложение
Чтобы добавить ведение журнала Application Insights в консольные приложения, сначала установите следующие пакеты NuGet:
В следующем примере используется пакет Microsoft.Extensions.Logging.ApplicationInsights и демонстрируется поведение по умолчанию для консольного приложения. Пакет Microsoft.Extensions.Logging.ApplicationInsights следует использовать в консольном приложении или всякий раз, когда требуется минимальная реализация Application Insights без полного набора функций, таких как метрики, распределенные трассировки, выборки и инициализаторы телеметрии.
using Microsoft.ApplicationInsights.Channel;
using Microsoft.ApplicationInsights.Extensibility;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using var channel = new InMemoryChannel();
try
{
IServiceCollection services = new ServiceCollection();
services.Configure<TelemetryConfiguration>(config => config.TelemetryChannel = channel);
services.AddLogging(builder =>
{
// Only Application Insights is registered as a logger provider
builder.AddApplicationInsights(
configureTelemetryConfiguration: (config) => config.ConnectionString = "<YourConnectionString>",
configureApplicationInsightsLoggerOptions: (options) => { }
);
});
IServiceProvider serviceProvider = services.BuildServiceProvider();
ILogger<Program> logger = serviceProvider.GetRequiredService<ILogger<Program>>();
logger.LogInformation("Logger is working...");
}
finally
{
// Explicitly call Flush() followed by Delay, as required in console apps.
// This ensures that even if the application terminates, telemetry is sent to the back end.
channel.Flush();
await Task.Delay(TimeSpan.FromMilliseconds(1000));
}
Для получения дополнительной информации см. Какой тип телеметрии Application Insights создается из журналов ILogger? Где можно посмотреть журналы ILogger в Application Insights?.
Области ведения журнала
ApplicationInsightsLoggingProvider
поддерживает области журналов. Область включены по умолчанию.
Если тип области — IReadOnlyCollection<KeyValuePair<string,object>>
, каждая пара "ключ — значение" в коллекции добавляется в данные телеметрии Application Insights в качестве пользовательских свойств. В следующем примере журналы записываются как TraceTelemetry
и имеются ("MyKey", "MyValue")
в свойствах.
using (_logger.BeginScope(new Dictionary<string, object> { ["MyKey"] = "MyValue" }))
{
_logger.LogError("An example of an Error level message");
}
Если в качестве области используется любой другой тип, он сохраняется в свойстве Scope
телеметрии Application Insights. В следующем примере TraceTelemetry
имеет свойство Scope
, которое содержит область.
using (_logger.BeginScope("hello scope"))
{
_logger.LogError("An example of an Error level message");
}
Следующие шаги
- Чтобы просмотреть часто задаваемые вопросы (FAQ), см. раздел "Логирование в .NET FAQ"
- Убедитесь, что вы используете поддерживаемую версию пакета SDK Application Insights.
- Ведение журнала в .NET
- Вход в ASP.NET Core
- Просмотр журналов трассировки .NET в Application Insights