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