tag route net data asp and all c# asp.net asp.net-core

c# - route - ¿Dónde puedo registrar los eventos de inicio/detención/error de una aplicación ASP.NET Core?



globalization and localization asp net core (2)

Necesita usar Microsoft.AspNetCore.Hosting.IApplicationLifetime

/// <summary> /// Triggered when the application host has fully started and is about to wait /// for a graceful shutdown. /// </summary> CancellationToken ApplicationStarted { get; } /// <summary> /// Triggered when the application host is performing a graceful shutdown. /// Requests may still be in flight. Shutdown will block until this event completes. /// </summary> CancellationToken ApplicationStopping { get; } /// <summary> /// Triggered when the application host is performing a graceful shutdown. /// All requests should be complete at this point. Shutdown will block /// until this event completes. /// </summary> CancellationToken ApplicationStopped { get; }

La instancia de IApplicationLifetime se puede obtener en el método de Configure . También agregue ILoggerFactory aquí:

public void Configure(IApplicationBuilder app, IApplicationLifetime applicationLifetime, ILoggerFactory loggerFactory) { // use applicationLifetime }

Al tener ILoggerFactory , puedes crear una instancia de ILogger :

var logger = loggerFactory.CreateLogger("StartupLogger");

Por lo tanto, solo necesita crear una propiedad en la clase de inicio para conservar la instancia de ILogger (o ILoggerFactory , si desea crear una instancia de ILogger diferente para diferentes eventos). Para resumir:

public class Startup { private ILogger _logger; public void Configure(IApplicationBuilder app, IApplicationLifetime applicationLifetime, ILoggerFactory loggerFactory) { applicationLifetime.ApplicationStopping.Register(OnShutdown); ... // add logger providers // loggerFactory.AddConsole() ... _logger = loggerFactory.CreateLogger("StartupLogger"); } private void OnShutdown() { // use _logger here; } }

En ASP.NET antiguo, en la clase Global.asax.cs , me registro cuando la aplicación se inicia, se detiene y arroja excepciones no controladas:

  • Application_Start()
  • Application_End()
  • Application_Error()

¿Cómo hago lo mismo en ASP.NET Core? Tiene una clase de Startup , pero es para configuración.

¿Dónde engancho los eventos de inicio / detención / error de la aplicación?


Consulte CaptureStartupErrors y el método .CaptureStartupErrors(true) que lo ayudará a encontrar problemas.

Esto es especialmente útil cuando algo funciona perfectamente en localhost pero falla en Azure.

Aquí está mi configuración habitual para NetCore Web Apps:

public static IWebHost BuildWebHost(string[] args) => WebHost .CreateDefaultBuilder(args) .CaptureStartupErrors(true) .UseKestrel() .UseIISIntegration() .UseStartup<Startup>() .UseAzureAppServices() .Build();

En Azure App Service, puede encontrar los registros en la secuencia de registro en Kudu Tools https://<appname>.scm.azurewebsites.net/api/logstream