增强数据库操作日志记录和异常捕获

主要更改:
- 修改log4net配置文件,增加异常堆栈信息和线程ID输出
- 在RemoteMySQLDataAccess中添加详细的异常日志记录
- 为所有数据库操作方法的catch块添加错误日志
- 日志包含方法参数信息,便于定位问题

详情:
1. log4net.config
   - ErrorAppender增加线程ID和异常详情输出
   - DebugAppender增加线程ID和异常详情输出

2. RemoteMySQLDataAccess.cs
   - 添加日志记录器实例
   - 18个catch块添加详细错误日志
   - 日志包含操作参数(时间范围、ID、路径等)
   - 保留原有异常处理逻辑

这将帮助快速定位和重现数据库相关bug。

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
fix/database-bug
tayttt 4 days ago
parent 123a676cc8
commit 25b333ceb9

@ -12,6 +12,7 @@ using System.Text;
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using Txgy.EWS.Client.Common; using Txgy.EWS.Client.Common;
using Txgy.EWS.Client.Common.Helpers;
using Txgy.EWS.Client.IDAL; using Txgy.EWS.Client.IDAL;
using Txgy.EWS.Client.Models; using Txgy.EWS.Client.Models;
using Txgy.Microseismic.BaseLib.Common; using Txgy.Microseismic.BaseLib.Common;
@ -23,6 +24,7 @@ namespace Txgy.EWS.Client.DAL
{ {
public class RemoteMySQLDataAccess : IRemoteMySQLDataAccess public class RemoteMySQLDataAccess : IRemoteMySQLDataAccess
{ {
private static readonly log4net.ILog logger = log4net.LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
IFreeSql fsql = FreeSqlTencent.tencentRemoteMySQL; IFreeSql fsql = FreeSqlTencent.tencentRemoteMySQL;
public string saveWavePath = ""; public string saveWavePath = "";
public MySqlConnection RemoteConn { get; set; } public MySqlConnection RemoteConn { get; set; }
@ -69,8 +71,9 @@ namespace Txgy.EWS.Client.DAL
} }
return true; return true;
} }
catch catch (Exception ex)
{ {
logger.Error("数据库连接失败", ex);
return false; return false;
} }
} }
@ -131,6 +134,7 @@ namespace Txgy.EWS.Client.DAL
} }
catch (Exception ex) catch (Exception ex)
{ {
logger.Error($"获取事件列表失败 - 开始时间:{startTime}, 结束时间:{endTime}, 页码:{pageIndex}, 每页数量:{perPageCount}", ex);
return null; return null;
} }
} }
@ -178,7 +182,8 @@ namespace Txgy.EWS.Client.DAL
} }
catch (Exception ex) catch (Exception ex)
{ {
throw ex; logger.Error($"获取事件列表失败 - 开始时间:{startTime}, 结束时间:{endTime}", ex);
throw;
} }
finally finally
{ {
@ -231,7 +236,7 @@ namespace Txgy.EWS.Client.DAL
} }
catch (Exception ex) catch (Exception ex)
{ {
//messagebox.show logger.Error($"获取事件列表失败 - 开始时间:{startTime}, 结束时间:{endTime}, minML:{minML}, maxML:{maxML}", ex);
} }
finally finally
{ {
@ -309,7 +314,7 @@ namespace Txgy.EWS.Client.DAL
} }
catch (Exception ex) catch (Exception ex)
{ {
//throw ex; logger.Error($"根据SQL查询事件失败 - QueryStr:{QueryStr}, SortTarget:{ssm}, SortMode:{sm}", ex);
} }
finally finally
{ {
@ -376,7 +381,8 @@ namespace Txgy.EWS.Client.DAL
} }
catch (Exception ex) catch (Exception ex)
{ {
throw ex; logger.Error($"获取最新事件失败 - MaxCnt:{MaxCnt}, PreCnt:{PreCnt}", ex);
throw;
} }
finally finally
{ {
@ -442,7 +448,8 @@ namespace Txgy.EWS.Client.DAL
} }
catch (Exception ex) catch (Exception ex)
{ {
throw ex; logger.Error($"下载波形数据失败 - 事件时间:{eventTime}, 保存路径:{savePath}, 保存名称:{saveName}, 表名:{tableName}", ex);
throw;
} }
finally finally
{ {
@ -498,7 +505,7 @@ namespace Txgy.EWS.Client.DAL
} }
catch (Exception ex) catch (Exception ex)
{ {
//messagebox.show logger.Error($"获取事件详情失败 - 事件ID:{eventID}", ex);
} }
finally finally
{ {
@ -551,7 +558,8 @@ namespace Txgy.EWS.Client.DAL
} }
catch (Exception ex) catch (Exception ex)
{ {
throw ex; logger.Error($"获取事件详情失败 - 事件时间:{eventTime}", ex);
throw;
} }
finally finally
{ {
@ -604,7 +612,8 @@ namespace Txgy.EWS.Client.DAL
} }
catch (Exception ex) catch (Exception ex)
{ {
throw ex; logger.Error($"获取最新事件失败 - 截止时间:{deadline}", ex);
throw;
} }
finally finally
{ {
@ -658,7 +667,8 @@ namespace Txgy.EWS.Client.DAL
} }
catch (Exception ex) catch (Exception ex)
{ {
throw ex; logger.Error($"获取最新事件列表失败 - 数量:{resultCount}", ex);
throw;
} }
finally finally
{ {
@ -764,9 +774,10 @@ namespace Txgy.EWS.Client.DAL
} }
catch (Exception ex) catch (Exception ex)
{ {
logger.Error($"统计事件数量失败 - 开始时间:{startTime}, 结束时间:{endTime}", ex);
// 异常处理代码 // 异常处理代码
Console.WriteLine($"DownloadDataAsync error: {ex.StackTrace}"); Console.WriteLine($"DownloadDataAsync error: {ex.StackTrace}");
throw ex; throw;
} }
// 如果没有查询到数据,则返回空引用 // 如果没有查询到数据,则返回空引用
return 0; return 0;
@ -837,9 +848,10 @@ namespace Txgy.EWS.Client.DAL
} }
catch (Exception ex) catch (Exception ex)
{ {
logger.Error($"异步下载波形数据失败 - 事件时间:{gier.EventTime}, 保存路径:{savePath}", ex);
// 异常处理代码 // 异常处理代码
Console.WriteLine($"DownloadDataAsync error: {ex.StackTrace}"); Console.WriteLine($"DownloadDataAsync error: {ex.StackTrace}");
throw ex; throw;
} }
finally finally
{ {
@ -906,9 +918,10 @@ namespace Txgy.EWS.Client.DAL
} }
catch (Exception ex) catch (Exception ex)
{ {
logger.Error($"异步下载JSON数据失败 - 事件时间:{gier.EventTime}, 保存路径:{savePath}", ex);
// 异常处理代码 // 异常处理代码
Console.WriteLine($"DownloadDataAsync error: {ex.StackTrace}"); Console.WriteLine($"DownloadDataAsync error: {ex.StackTrace}");
throw ex; throw;
} }
finally finally
{ {
@ -975,9 +988,10 @@ namespace Txgy.EWS.Client.DAL
catch (Exception ex) catch (Exception ex)
{ {
_semaphore.Release(); _semaphore.Release();
logger.Error($"查询和下载数据失败 - 事件ID:{eventID}, 截止时间:{endTime}, 保存路径:{savePath}", ex);
// 异常处理代码 // 异常处理代码
Console.WriteLine($"QueryAndDownloadDataAsync error: {ex.StackTrace}"); Console.WriteLine($"QueryAndDownloadDataAsync error: {ex.StackTrace}");
throw ex; throw;
} }
} }
@ -1043,9 +1057,10 @@ namespace Txgy.EWS.Client.DAL
catch (Exception ex) catch (Exception ex)
{ {
_semaphore.Release(); _semaphore.Release();
logger.Error($"按ID查询和下载数据失败 - 事件ID:{eventID}, 保存路径:{savePath}", ex);
// 异常处理代码 // 异常处理代码
Console.WriteLine($"QueryAndDownloadDataAsync error: {ex.StackTrace}"); Console.WriteLine($"QueryAndDownloadDataAsync error: {ex.StackTrace}");
throw ex; throw;
} }
} }
public async Task QueryEventByIDAsync(int eventID, string savePath, Action<GridItemEventResult> callback) public async Task QueryEventByIDAsync(int eventID, string savePath, Action<GridItemEventResult> callback)
@ -1110,9 +1125,10 @@ namespace Txgy.EWS.Client.DAL
catch (Exception ex) catch (Exception ex)
{ {
_semaphore.Release(); _semaphore.Release();
logger.Error($"按ID查询事件失败 - 事件ID:{eventID}, 保存路径:{savePath}", ex);
// 异常处理代码 // 异常处理代码
Console.WriteLine($"QueryAndDownloadDataAsync error: {ex.StackTrace}"); Console.WriteLine($"QueryAndDownloadDataAsync error: {ex.StackTrace}");
throw ex; throw;
} }
} }
public List<GridItemEventResult> GetLastEvents(int lastEventID) public List<GridItemEventResult> GetLastEvents(int lastEventID)
@ -1205,7 +1221,8 @@ namespace Txgy.EWS.Client.DAL
} }
catch (Exception ex) catch (Exception ex)
{ {
throw ex; logger.Error($"获取最新事件失败 - 数量:{QueryCount}", ex);
throw;
} }
finally finally
{ {
@ -1261,8 +1278,8 @@ namespace Txgy.EWS.Client.DAL
} }
catch (Exception ex) catch (Exception ex)
{ {
//messagebox.show logger.Error($"获取网格事件失败 - 开始时间:{startTime}, 结束时间:{endTime}, minML:{minML}, maxML:{maxML}", ex);
throw ex; throw;
} }
finally finally
{ {

@ -34,8 +34,10 @@
<conversionPattern value=" <conversionPattern value="
%n【日志级别】%-5level %n【日志级别】%-5level
%n【记录时间】%date %n【记录时间】%date
%n【线程ID】[%thread]
%n【错误位置】%logger 属性[%property{NDC}] %n【错误位置】%logger 属性[%property{NDC}]
%n【错误描述】%message %n【错误描述】%message
%n【异常详情】%exception
%n【错误详情】%newline"/> %n【错误详情】%newline"/>
</layout> </layout>
<filter type="log4net.Filter.LevelRangeFilter,log4net"> <filter type="log4net.Filter.LevelRangeFilter,log4net">
@ -62,8 +64,7 @@
<layout type="log4net.Layout.PatternLayout"> <layout type="log4net.Layout.PatternLayout">
<!--输出格式 模板--> <!--输出格式 模板-->
<!--样例INFO 2008-03-26 13:42:32, Log4NetDemo.MainClass [(null)] - info--> <!--样例INFO 2008-03-26 13:42:32, Log4NetDemo.MainClass [(null)] - info-->
<!--<conversionPattern value="%newline %n记录时间%date %n线程ID:[%thread] %n日志级别 %-5level %n错误描述%message%newline %n"/>--> <conversionPattern value="%[-2level] %date [%thread] %logger 属性[%property{NDC}] %message %exception %n"/>
<conversionPattern value="%[-2level] %date %logger 属性[%property{NDC}] %message %n"/>
</layout> </layout>
<filter type="log4net.Filter.LevelRangeFilter,log4net"> <filter type="log4net.Filter.LevelRangeFilter,log4net">
<levelMin value="DEBUG" /> <levelMin value="DEBUG" />

Loading…
Cancel
Save