ASP.NET环境下SSRS报表渲染异常捕获及详细日志记录方案咨询
1 完整SSRS报错详情的存储位置
SSRS默认不会把完整报错详情写入ExecutionLog3视图,该视图仅存储执行状态、耗时、用户等概要指标,完整的错误堆栈、子错误信息会写入本地文本日志:
- 默认日志路径:
C:\Program Files\Microsoft SQL Server\MSRS{版本号}.{实例名}\Reporting Services\LogFiles,SSRS 2017及以后版本路径为C:\Program Files\Microsoft SQL Server Reporting Services\SSRS\LogFiles - 日志文件按天生成,后缀为
.log,其中会完整记录rsProcessingAborted的下一级错误原因,包括数据集执行错误、存储过程参数缺失、超时等全链路报错信息
如果需要把详细错误存入数据库,可以自定义日志收集脚本,定期解析日志文件写入自定义表即可。
2 捕获错误触发自定义代码的实现方案
分不同应用场景选择对应方案:
WebForms场景(使用ReportViewer控件)
直接利用ReportViewer控件自带的ReportError事件,即可在报错时触发自定义逻辑,示例代码如下:
// 绑定事件,可在Page_Load或者aspx页面控件属性里指定OnReportError="ReportViewer1_ReportError" protected void ReportViewer1_ReportError(object sender, Microsoft.Reporting.WebForms.ReportErrorEventArgs e) { // 获取完整报错信息 string fullError = e.Exception.ToString(); // 执行自定义日志逻辑 YourCustomLogger.WriteError("SSRS报表加载失败", fullError); // 执行自定义告警逻辑,如发邮件、发短信、发内部群通知 YourCustomAlertService.SendAlert(fullError); // 可选:设置Handled为true,屏蔽默认报错,展示自定义友好提示 e.Handled = true; TipsLabel.Text = "报表加载异常,管理员已收到通知,请稍后重试"; }
MVC/.NET Core场景(调用SSRS API渲染)
在调用SSRS SOAP/REST API的代码外层包裹try-catch块,SSRS返回的异常对象中会包含完整的多级报错信息,直接在catch中执行你的自定义日志、告警逻辑即可。
全局服务端捕获(全报表统一处理)
如果需要对所有SSRS报表的报错做统一拦截,不需要修改每个业务页的代码,可以实现SSRS的IReportingServiceErrorHandler自定义扩展,部署到SSRS服务端后即可全局捕获所有报表错误,触发统一的自定义处理逻辑。
你提到的新增存储过程参数复现的参数缺失报错,以上方案都可以完整捕获到错误明细,包括存储过程名、缺失参数名、数据集名等信息。
内容的提问来源于stack exchange,提问作者MDD
相关产品推荐
相关产品推荐

