[英]How to stop console app after logCritical in .NET Core
我希望我的控制台應用程序在 ILogger 使用 logError 或 logCritical 后停止。 那可能嗎 ?
例如,我將 ILogger 注入到一個類中,該類假設從外部 api 獲得一些結果:
public WebsiteApiServices(ILogger<WebsiteApiServices> logger)
{
_logger = logger;
}
我從外部 api 得到響應:
public TransactionDetails GetResultsFromApi(HttpClient client, string txnHash){
var jsonResponse = await GetJsonResponse(client, txnHash);
TransactionDetails result = null;
try
{
result = JsonConvert.DeserializeObject<EtherscanTransactionByHashSuccessfulResponse>(jsonResponse).Result;
}
catch (JsonSerializationException)
{
var failReason = JsonConvert.DeserializeObject<EtherscanTransactionByHashFailedResponse>(jsonResponse).Result;
switch (failReason)
{
case "Invalid API Key":
_logger.LogCritical($"API response: \"{failReason}\"");
State.ExitAndLog(new StackTrace(), _logger);
break;
}
}
return result;
}
因此,如果 API 密鑰無效,我希望我的控制台應用程序退出代碼。 我想要這個,因為這個方法被重復使用,所以我不想一直向外部 API 發送無效請求。
那可能嗎?
是的,但這非常不尋常。 通常,異常情況通過拋出異常來指示,應用程序可以決定如何處理這些異常。 例如,您可以定義一個由 API 代碼拋出的InvalidApiKeyException
,當異常到達頂級應用程序代碼時,應用程序將決定退出。
也就是說,您可以讓關鍵日志關閉您的應用程序。 執行此操作的適當方法是定義您自己的日志記錄提供程序,並在任何記錄關鍵消息時調用IApplicationLifetime.StopApplication
。 請注意,應用程序不會立即停止; 它將從LogCritical
方法正常返回並正常關閉。
如果您想要硬停止,請調用Environment.FailFast
而不是StopApplication
。 請注意,當使用FailFast
時,關鍵消息實際上可能不會被記錄,因為許多(大多數?)日志記錄提供程序會緩存他們的日志,並且當應用程序立即停止時實際上並沒有機會刷新該緩存。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.