增强错误处理和日志记录,添加HTTP请求超时设置

This commit is contained in:
movingsam 2025-11-27 11:37:27 +08:00
parent e4148f76fe
commit d6d1bf79f0
3 changed files with 241 additions and 124 deletions

View File

@ -34,7 +34,19 @@ public class CloseWorker : BackgroundService
} }
catch (Exception e) catch (Exception e)
{ {
$"执行控制器发生错误,错误信息:ex{e.StackTrace}".Error(); var errorMessage = $"执行控制器发生错误\n" +
$"异常类型: {e.GetType().Name}\n" +
$"异常消息: {e.Message}\n" +
$"堆栈跟踪: {e.StackTrace}\n" +
$"内部异常: {e.InnerException?.Message}\n" +
$"内部堆栈: {e.InnerException?.StackTrace}\n" +
$"源: {e.Source}\n" +
$"时间: {DateTime.Now:yyyy-MM-dd HH:mm:ss}";
errorMessage.Error();
// 同时使用结构化日志记录
_logger.LogError(e, "CloseWorker执行发生异常: {ExceptionType} - {Message}",
e.GetType().Name, e.Message);
} }
finally finally
{ {
@ -45,6 +57,8 @@ public class CloseWorker : BackgroundService
} }
private async Task Handle() private async Task Handle()
{
try
{ {
var _spiderServices = StaticServiceProvider.Current.GetRequiredService<SpiderServices>(); var _spiderServices = StaticServiceProvider.Current.GetRequiredService<SpiderServices>();
var listRes = await _spiderServices.GetTaskList(3); var listRes = await _spiderServices.GetTaskList(3);
@ -55,6 +69,8 @@ public class CloseWorker : BackgroundService
if (needDispose?.Any() ?? false) if (needDispose?.Any() ?? false)
{ {
foreach (var item in needDispose) foreach (var item in needDispose)
{
try
{ {
//2.结案操作 //2.结案操作
var result = await _spiderServices.CloseFile(item.caseNumber, "",item.address); var result = await _spiderServices.CloseFile(item.caseNumber, "",item.address);
@ -65,11 +81,43 @@ public class CloseWorker : BackgroundService
} }
else else
{ {
var message = $"结案失败,错误信息:{result.Message}"; var message = $"结案失败,任务编号:{item.caseNumber},错误信息:{result.Message}";
message.Error(); message.Error();
} }
} }
catch (Exception itemEx)
{
var itemErrorMessage = $"处理单个任务时发生异常\n" +
$"任务编号: {item.caseNumber}\n" +
$"任务地址: {item.address}\n" +
$"异常类型: {itemEx.GetType().Name}\n" +
$"异常消息: {itemEx.Message}\n" +
$"堆栈跟踪: {itemEx.StackTrace}\n" +
$"时间: {DateTime.Now:yyyy-MM-dd HH:mm:ss}";
itemErrorMessage.Error();
_logger.LogError(itemEx, "处理任务 {CaseNumber} 时发生异常", item.caseNumber);
} }
} }
} }
} }
else
{
var warningMessage = $"获取任务列表失败: {listRes.Message}";
warningMessage.Error();
_logger.LogWarning("获取任务列表失败: {Message}", listRes.Message);
}
}
catch (Exception handleEx)
{
var handleErrorMessage = $"Handle方法执行发生异常\n" +
$"异常类型: {handleEx.GetType().Name}\n" +
$"异常消息: {handleEx.Message}\n" +
$"堆栈跟踪: {handleEx.StackTrace}\n" +
$"内部异常: {handleEx.InnerException?.Message}\n" +
$"时间: {DateTime.Now:yyyy-MM-dd HH:mm:ss}";
handleErrorMessage.Error();
_logger.LogError(handleEx, "Handle方法执行发生异常");
throw; // 重新抛出异常让外层catch处理
}
}
}

View File

@ -46,7 +46,7 @@ builder.Services.AddSwaggerGen();
builder.Services.AddSingleton<IConfiguration>(config); builder.Services.AddSingleton<IConfiguration>(config);
builder.Services.Configure<ClientOptions>(config.GetSection("ClientOptions")); builder.Services.Configure<ClientOptions>(config.GetSection("ClientOptions"));
builder.Services.AddSingleton<HttpClientLogHandler>(); builder.Services.AddSingleton<HttpClientLogHandler>();
builder.Services.AddHttpClient("Default") builder.Services.AddHttpClient("Default", client => { client.Timeout = TimeSpan.FromSeconds(30); })
.AddHttpMessageHandler<HttpClientLogHandler>(); .AddHttpMessageHandler<HttpClientLogHandler>();
builder.Services.AddMemoryCache(); builder.Services.AddMemoryCache();
builder.Services.AddLogging(); builder.Services.AddLogging();

View File

@ -41,6 +41,8 @@ public class SpiderServices
public async Task<SpiderResponse<LoginResultData>> Login() public async Task<SpiderResponse<LoginResultData>> Login()
{
try
{ {
using var scope = _serviceProvider.CreateScope(); using var scope = _serviceProvider.CreateScope();
using var client = _httpClientFactory.CreateClient("Default"); using var client = _httpClientFactory.CreateClient("Default");
@ -72,14 +74,40 @@ public class SpiderServices
} }
} }
var errorMessage = $"登录失败\n" +
$"响应状态码: {response.StatusCode}\n" +
$"响应内容: {respJsonStr}\n" +
$"时间: {DateTime.Now:yyyy-MM-dd HH:mm:ss}";
_logger.LogWarning(errorMessage);
return new SpiderResponse<LoginResultData>() return new SpiderResponse<LoginResultData>()
{ {
IsSuccess = false, IsSuccess = false,
Result = null, Result = null,
Code = SpiderResponseCode.Fail, Code = SpiderResponseCode.Fail,
Message = "登录失败" Message = $"登录失败: {tokenRes?.Code.ToString() ?? ""}"
}; };
} }
catch (Exception ex)
{
var errorMessage = $"登录过程发生异常\n" +
$"异常类型: {ex.GetType().Name}\n" +
$"异常消息: {ex.Message}\n" +
$"堆栈跟踪: {ex.StackTrace}\n" +
$"内部异常: {ex.InnerException?.Message}\n" +
$"时间: {DateTime.Now:yyyy-MM-dd HH:mm:ss}";
_logger.LogError(ex, "Login方法异常");
errorMessage.Error();
return new SpiderResponse<LoginResultData>()
{
IsSuccess = false,
Result = null,
Code = SpiderResponseCode.Fail,
Message = $"登录过程发生异常: {ex.Message}"
};
}
}
public async Task<string?> GetToken() public async Task<string?> GetToken()
{ {
@ -101,6 +129,8 @@ public class SpiderServices
public async Task<SpiderResponse<QueryRespData>> GetTaskList(int state) public async Task<SpiderResponse<QueryRespData>> GetTaskList(int state)
{
try
{ {
// "headers": { // "headers": {
// "accept": "application/json, text/plain, */*", // "accept": "application/json, text/plain, */*",
@ -114,6 +144,17 @@ public class SpiderServices
// "referrer": "http://33.10.72.100/megcity/", // "referrer": "http://33.10.72.100/megcity/",
// "referrerPolicy": "strict-origin-when-cross-origin", // "referrerPolicy": "strict-origin-when-cross-origin",
var token = await GetToken(); var token = await GetToken();
if (string.IsNullOrWhiteSpace(token))
{
return new SpiderResponse<QueryRespData>()
{
IsSuccess = false,
Result = null,
Code = SpiderResponseCode.Fail,
Message = "无法获取访问令牌"
};
}
using var client = _httpClientFactory.CreateClient("Default"); using var client = _httpClientFactory.CreateClient("Default");
client.DefaultRequestHeaders.Add("authorization", $"{token}"); client.DefaultRequestHeaders.Add("authorization", $"{token}");
client.DefaultRequestHeaders.Add("accept-language", "zh-CN,zh;q=0.9"); client.DefaultRequestHeaders.Add("accept-language", "zh-CN,zh;q=0.9");
@ -121,7 +162,7 @@ public class SpiderServices
client.DefaultRequestHeaders.Add("module-alias", "pending-forward"); client.DefaultRequestHeaders.Add("module-alias", "pending-forward");
client.DefaultRequestHeaders.Add("module-source", "megcity-web"); client.DefaultRequestHeaders.Add("module-source", "megcity-web");
// var beginTime = DateTime.Now.AddMonths(-1); // var beginTime = DateTime.Now.AddMonths(-1);
var startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1)); var startTime = DateTime.UnixEpoch;
var beginTs = (long)(DateTime.Now.AddMonths(-1) - startTime).TotalMilliseconds; var beginTs = (long)(DateTime.Now.AddMonths(-1) - startTime).TotalMilliseconds;
var endTs = (long)(DateTime.Now - startTime).TotalMilliseconds; var endTs = (long)(DateTime.Now - startTime).TotalMilliseconds;
var body = new QueryReq var body = new QueryReq
@ -178,14 +219,42 @@ public class SpiderServices
} }
} }
var errorMessage = $"获取监控结果失败\n" +
$"响应状态码: {response.StatusCode}\n" +
$"响应内容: {respJsonStr}\n" +
$"解析结果: {spiderRes?.code}\n" +
$"时间: {DateTime.Now:yyyy-MM-dd HH:mm:ss}";
_logger.LogWarning(errorMessage);
return new SpiderResponse<QueryRespData>() return new SpiderResponse<QueryRespData>()
{ {
IsSuccess = false, IsSuccess = false,
Result = null, Result = null,
Code = SpiderResponseCode.Fail, Code = SpiderResponseCode.Fail,
Message = "获取监控结果失败" Message = $"获取监控结果失败: {spiderRes?.msg ?? ""}"
}; };
} }
catch (Exception ex)
{
var errorMessage = $"GetTaskList过程发生异常\n" +
$"参数state: {state}\n" +
$"异常类型: {ex.GetType().Name}\n" +
$"异常消息: {ex.Message}\n" +
$"堆栈跟踪: {ex.StackTrace}\n" +
$"内部异常: {ex.InnerException?.Message}\n" +
$"时间: {DateTime.Now:yyyy-MM-dd HH:mm:ss}";
_logger.LogError(ex, "GetTaskList方法异常, state: {State}", state);
errorMessage.Error();
return new SpiderResponse<QueryRespData>()
{
IsSuccess = false,
Result = null,
Code = SpiderResponseCode.Fail,
Message = $"GetTaskList过程发生异常: {ex.Message}"
};
}
}
// {"pageNo":1,"pageSize":20,"condition":{"roleIds":["a2e267c0-d88d-4ecb-a4b5-d904e85dfbb6"],"enabled":"null"}} // {"pageNo":1,"pageSize":20,"condition":{"roleIds":["a2e267c0-d88d-4ecb-a4b5-d904e85dfbb6"],"enabled":"null"}}