Compare commits

...

2 Commits

Author SHA1 Message Date
OpenClaw Agent
89c6ca5397 fix: 增强批量获取价格日志级别
- LogWarning → LogError(价格获取失败是严重问题)
- 记录具体错误信息
- 记录 AssetType 用于排查数据源选择问题
2026-03-24 09:45:28 +00:00
OpenClaw Agent
8022731b34 fix: 增强价格获取降级链日志
记录每个数据源的尝试和结果:
- [数据源获取开始]
- [数据源] 尝试 Yahoo/腾讯/Tiingo
- [数据源] Yahoo/腾讯/Tiingo 成功/失败
- 具体错误信息

帮助定位 UPRO 等股票获取失败的原因
2026-03-24 09:44:15 +00:00
2 changed files with 14 additions and 5 deletions

View File

@ -104,13 +104,14 @@ public class MarketDataService : IMarketDataService
/// </summary> /// </summary>
private async Task<MarketPriceResponse> FetchPriceFromSourceAsync(string symbol, string assetType) private async Task<MarketPriceResponse> FetchPriceFromSourceAsync(string symbol, string assetType)
{ {
_logger.LogInformation("从数据源获取价格: {Symbol}, 资产类型: {AssetType}", symbol, assetType); _logger.LogInformation("[数据源获取开始] Symbol={Symbol}, AssetType={AssetType}", symbol, assetType);
MarketPriceResponse response; MarketPriceResponse response;
string source; string source;
if (assetType.Equals("Crypto", StringComparison.OrdinalIgnoreCase)) if (assetType.Equals("Crypto", StringComparison.OrdinalIgnoreCase))
{ {
_logger.LogInformation("[数据源] 使用 OKX 获取 {Symbol}", symbol);
response = await _okxService.GetCryptoPriceAsync(symbol); response = await _okxService.GetCryptoPriceAsync(symbol);
source = "OKX"; source = "OKX";
} }
@ -119,22 +120,28 @@ public class MarketDataService : IMarketDataService
// 股票优先Yahoo财经失败降级腾讯财经最后降级 Tiingo // 股票优先Yahoo财经失败降级腾讯财经最后降级 Tiingo
try try
{ {
_logger.LogInformation("[数据源] 尝试 Yahoo 获取 {Symbol}", symbol);
response = await _yahooService.GetStockPriceAsync(symbol); response = await _yahooService.GetStockPriceAsync(symbol);
source = "Yahoo"; source = "Yahoo";
_logger.LogInformation("[数据源] Yahoo 成功: {Symbol} = {Price}", symbol, response.Price);
} }
catch (Exception ex) catch (Exception ex)
{ {
_logger.LogWarning(ex, "Yahoo财经获取失败降级使用 腾讯: {Symbol}", symbol); _logger.LogWarning("[数据源] Yahoo 失败: {Symbol}, 错误: {Error}", symbol, ex.Message);
try try
{ {
_logger.LogInformation("[数据源] 降级使用腾讯获取 {Symbol}", symbol);
response = await _tencentService.GetStockPriceAsync(symbol); response = await _tencentService.GetStockPriceAsync(symbol);
source = "Tencent"; source = "Tencent";
_logger.LogInformation("[数据源] 腾讯成功: {Symbol} = {Price}", symbol, response.Price);
} }
catch (Exception tencentEx) catch (Exception tencentEx)
{ {
_logger.LogWarning(tencentEx, "腾讯财经获取失败,降级使用 Tiingo: {Symbol}", symbol); _logger.LogWarning("[数据源] 腾讯失败: {Symbol}, 错误: {Error}", symbol, tencentEx.Message);
_logger.LogInformation("[数据源] 最后降级使用 Tiingo 获取 {Symbol}", symbol);
response = await _tiingoService.GetStockPriceAsync(symbol); response = await _tiingoService.GetStockPriceAsync(symbol);
source = "Tiingo"; source = "Tiingo";
_logger.LogInformation("[数据源] Tiingo 成功: {Symbol} = {Price}", symbol, response.Price);
} }
} }
} }

View File

@ -197,12 +197,14 @@ public class PortfolioService : IPortfolioService
try try
{ {
var pos = allPositions.First(p => p.StockCode == code); var pos = allPositions.First(p => p.StockCode == code);
var price = await _marketDataService.GetPriceAsync(code, pos.AssetType ?? "Stock"); var assetType = pos.AssetType ?? "Stock";
_logger.LogDebug("批量获取价格: {Code}, AssetType={AssetType}", code, assetType);
var price = await _marketDataService.GetPriceAsync(code, assetType);
return (code, price); return (code, price);
} }
catch (Exception ex) catch (Exception ex)
{ {
_logger.LogWarning(ex, "批量获取价格失败: {Code}", code); _logger.LogError(ex, "批量获取价格失败: {Code}, 错误详情: {Message}", code, ex.Message);
return (code, null); return (code, null);
} }
}).ToList(); }).ToList();