Megosztás a következőn keresztül:


Az Application Insights naplózása a .NET segítségével

Ebben a cikkben megtudhatja, hogyan rögzíthet naplókat az Application Insights segítségével a .NET-alkalmazásokban a Microsoft.Extensions.Logging.ApplicationInsights szolgáltatói csomag használatával. Ha ezt a szolgáltatót használja, az Application Insights eszközeivel lekérdezheti és elemezheti a naplókat.

Figyelemfelhívás

Javasoljuk az Azure Monitor OpenTelemetry Distro használatát az új alkalmazások vagy ügyfelek számára az Azure Monitor Application Insights használatához. Az Azure Monitor OpenTelemetry Distro az Application Insights SDK-hoz hasonló funkciókat és élményt nyújt. Az Application Insights SDK-ból a .NET, a Node.js és a Python áttelepítési útmutatóival migrálható, de még dolgozunk néhány további funkció hozzáadásán a visszamenőleges kompatibilitás érdekében.

Tipp.

ASP.NET Core-alkalmazások

Application Insights-naplózás hozzáadása ASP.NET Core-alkalmazásokhoz:

  1. Telepítse a Microsoft.Extensions.Logging.ApplicationInsights.

  2. Adja hozzá 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();

Ha telepítve van a NuGet-csomag, és a szolgáltató regisztrálva van a függőséginjektálással, az alkalmazás készen áll a naplózásra. Konstruktorinjektálás esetén szükséges, hogy vagy ILogger, vagy az általános típusú alternatíva ILogger<TCategoryName> legyen megadva. Ha ezek a megvalósítások megoldódnak, ApplicationInsightsLoggerProvider adja meg őket. A rendszer naplózott üzeneteket vagy kivételeket küld az Application Insightsnak.

Vegye figyelembe a következő példavezérlőt:

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" };
    }
}

További információ: Naplózás ASP.NET Core és Milyen Application Insights-telemetriatípus jön létre az ILogger-naplókból? Hol láthatom az ILogger-naplókat az Application Insightsban?

Konzolalkalmazás

Az Application Insights-naplózás konzolalkalmazásokhoz való hozzáadásához először telepítse a következő NuGet-csomagokat:

Az alábbi példa a Microsoft.Extensions.Logging.ApplicationInsights csomagot használja, és bemutatja a konzolalkalmazások alapértelmezett viselkedését. A Microsoft.Extensions.Logging.ApplicationInsights csomagot egy konzolalkalmazásban kell használni, vagy amikor az Application Insights minimális implementációját szeretné elérni a teljes funkciókészlet nélkül, például metrikák, elosztott nyomkövetés, mintavételezés és telemetriai inicializálók nélkül.

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));
}

További információ: Milyen Application Insights-telemetriatípus jön létre az ILogger-naplókból? Hol láthatom az ILogger-naplókat az Application Insightsban?

Naplózási hatókörök

ApplicationInsightsLoggingProvider támogatja a naplózási hatóköreit. A hatókörök alapértelmezés szerint engedélyezve vannak.

Ha a hatókör típusa IReadOnlyCollection<KeyValuePair<string,object>>, akkor a gyűjteményben lévő kulcs-érték párok egyéni tulajdonságokként lesznek hozzáadva az Application Insights telemetriai adataihoz. Az alábbi példában a naplók mint TraceTelemetry vannak rögzítve, és ("MyKey", "MyValue") szerepel a tulajdonságokban.

using (_logger.BeginScope(new Dictionary<string, object> { ["MyKey"] = "MyValue" }))
{
    _logger.LogError("An example of an Error level message");
}

Ha bármilyen más típust használ hatókörként, a rendszer az Application Insights telemetriai tulajdonsága Scope alatt tárolja. Az alábbi példában a TraceTelemetry rendelkezik egy Scope nevű tulajdonsággal, amely tartalmazza a hatókört.

using (_logger.BeginScope("hello scope"))
{
    _logger.LogError("An example of an Error level message");
}

Következő lépések