Trzeba użyć 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; }
Instancji IApplicationLifetime można uzyskać w Configure
metody. Również dodać ILoggerFactory tutaj:
public void Configure(IApplicationBuilder app, IApplicationLifetime applicationLifetime, ILoggerFactory loggerFactory)
{
// use applicationLifetime
}
Mając ILoggerFactory
można create instancja ILogger
:
var logger = loggerFactory.CreateLogger("StartupLogger");
Więc po prostu trzeba utworzyć właściwość w klasie startowego utrzymują się wystąpienie ILogger
(lub ILoggerFactory
, jeśli chcesz utworzyć inną instancję liggera dla różnych zdarzeń). Podsumowując:
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;
}
}
Czy jest coś podobnego do nieobsłużonych wyjątków? – grokky
Te metody [mogą być używane] (https://stackoverflow.com/a/35257670/7059613) do wykrywania rozpoczęcia/zatrzymania/zatrzymania. Ale jak byś się tam zalogował? Nie można odzyskać instancji rejestratora, ponieważ znajdujesz się w klasie "Startup"? – grokky
@grokky zaktualizował odpowiedź – Set