0

0

Blazor 全局错误处理和日志记录方法

星降

星降

发布时间:2026-02-19 11:39:10

|

863人浏览过

|

来源于php中文网

原创

blazor全局错误处理需分环境、类型、层级设计:开发阶段用内置错误ui和开发者异常页快速定位;生产环境通过自定义中间件与errorboundary实现服务端/客户端双层拦截,结合serilog结构化日志及上下文追踪,blazor server还需特别防护电路断开问题。

blazor 全局错误处理和日志记录方法

Blazor 的全局错误处理和日志记录不是“配个中间件就完事”,而是要分环境、分类型、分层级来设计。开发阶段靠框架内置机制快速定位,生产环境靠结构化日志+前端友好提示,而 Blazor Server 和 WebAssembly 的处理路径还不太一样。

开发阶段:用好框架自带的错误 UI 和开发者异常页

Blazor 项目模板默认在 MainLayout.razor 中嵌入了 <div id="blazor-error-ui"> 元素,配合 CSS 隐藏/显示逻辑,在发生未捕获异常时自动弹出底部提示条。这个 UI 在开发时会引导你打开浏览器控制台查看详细错误。 <p>对于服务器端(Blazor Server 或托管式 Web App),你还应确保启用 <strong>Developer Exception Page</strong>:</p> <ul> <li>在 <code>Program.cs 中调用 app.UseDeveloperExceptionPage()(仅限 IsDevelopment() 环境)

  • 它能捕获中间件管道中任何位置抛出的同步/异步异常,并生成带堆栈、源码行号的 HTML 页面
  • 注意:该页不响应 Accept: text/plain 请求时返回纯文本,便于 API 调试
  • 生产环境:统一拦截 + 结构化日志 + 友好降级

    禁用开发者页面后,必须自己兜底。核心思路是两层拦截:

    Modoer多功能点评系统1.2.5 Build 20111220 UTF8
    Modoer多功能点评系统1.2.5 Build 20111220 UTF8

    Modoer 是一款以本地分享,多功能的点评网站管理系统。采用 PHP+MYSQL 开发设计,开放全部源代码。因具有非凡的访问速度和卓越的负载能力而深受国内外朋友的喜爱。在升级前一定要备份好自己的原版本,特别是自己设计了模板和修改了代码的用户。Modoer多功能点评系统 v1.2.5 Build 20111220更新列表修正 安全漏洞和安全隐患增加 后台登陆和SQL错误记录日志修复 若干小BUG

    下载
    • 服务端异常:添加自定义中间件(如 UseGlobalExceptionHandler),在 try/catch 中捕获 HttpContext 生命周期内的所有未处理异常;区分 UserFriendlyException(业务异常,不记堆栈)和系统异常(记录完整日志,返回泛化消息)
    • 客户端组件异常:使用 <errorboundary></errorboundary> 包裹关键区域。它会在子组件抛异常时隐藏内容、显示 ErrorContent,并提供 Recover() 方法重试渲染——但注意:状态会丢失,表单类场景需配合 @ref 或状态管理缓存临时数据

    日志记录:前后端一致、可追溯、带上下文

    默认的 ILogger<t></t> 能满足基础输出,但生产环境建议升级为 Serilog

    • 配置方式简洁:builder.Host.UseSerilog((ctx, cfg) => cfg.ReadFrom.Configuration(ctx.Configuration))
    • 支持跨请求关联:用 LogContext.PushProperty("CorrelationId", ...) 串联前后端日志
    • Blazor WebAssembly 中日志默认输出到浏览器控制台;Server 模式下日志写入文件或中心化平台(如 Seq、Elasticsearch)
    • 避免只记字符串——用消息模板(MyLogger.LogError(ex, "Failed to load {UserId} profile"))保留结构化字段,方便后续查询

    特别注意 Blazor Server 的“电路断开”问题

    Blazor Server 依赖 SignalR 长连接(即“电路”)。一旦因未处理异常导致电路终止,用户无法继续交互,只能刷新页面重建连接。因此:

    • 不要让异常穿透到 SignalR 层,尤其在 OnInitializedAsync、事件回调等生命周期方法中加必要防护
    • 服务端日志必须包含电路 ID(ConnectionId)和用户标识,便于快速定位故障会话
    • 可在 OnError 回调中监听电路异常,并触发主动通知或自动重连逻辑(需前端配合)

    基本上就这些。不复杂但容易忽略的是环境适配和日志结构设计——开发时看着报错爽,上线后查不到根因才真头疼。

    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

    热门AI工具

    更多
    DeepSeek
    DeepSeek

    幻方量化公司旗下的开源大模型平台

    豆包大模型
    豆包大模型

    字节跳动自主研发的一系列大型语言模型

    通义千问
    通义千问

    阿里巴巴推出的全能AI助手

    腾讯元宝
    腾讯元宝

    腾讯混元平台推出的AI助手

    文心一言
    文心一言

    文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

    讯飞写作
    讯飞写作

    基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

    即梦AI
    即梦AI

    一站式AI创作平台,免费AI图片和视频生成。

    ChatGPT
    ChatGPT

    最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

    相关专题

    更多
    什么是中间件
    什么是中间件

    中间件是一种软件组件,充当不兼容组件之间的桥梁,提供额外服务,例如集成异构系统、提供常用服务、提高应用程序性能,以及简化应用程序开发。想了解更多中间件的相关内容,可以阅读本专题下面的文章。

    180

    2024.05.11

    Golang 中间件开发与微服务架构
    Golang 中间件开发与微服务架构

    本专题系统讲解 Golang 在微服务架构中的中间件开发,包括日志处理、限流与熔断、认证与授权、服务监控、API 网关设计等常见中间件功能的实现。通过实战项目,帮助开发者理解如何使用 Go 编写高效、可扩展的中间件组件,并在微服务环境中进行灵活部署与管理。

    224

    2025.12.18

    scripterror怎么解决
    scripterror怎么解决

    scripterror的解决办法有检查语法、文件路径、检查网络连接、浏览器兼容性、使用try-catch语句、使用开发者工具进行调试、更新浏览器和JavaScript库或寻求专业帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

    371

    2023.10.18

    500error怎么解决
    500error怎么解决

    500error的解决办法有检查服务器日志、检查代码、检查服务器配置、更新软件版本、重新启动服务、调试代码和寻求帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

    339

    2023.10.25

    js 字符串转数组
    js 字符串转数组

    js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

    573

    2023.08.03

    js截取字符串的方法
    js截取字符串的方法

    js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

    216

    2023.09.04

    java基础知识汇总
    java基础知识汇总

    java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

    1553

    2023.10.24

    字符串介绍
    字符串介绍

    字符串是一种数据类型,它可以是任何文本,包括字母、数字、符号等。字符串可以由不同的字符组成,例如空格、标点符号、数字等。在编程中,字符串通常用引号括起来,如单引号、双引号或反引号。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

    640

    2023.11.24

    pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法
    pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法

    本专题系统整理pixiv网页版官网入口及登录访问方式,涵盖官网登录页面直达路径、在线阅读入口及快速进入方法说明,帮助用户高效找到pixiv官方网站,实现便捷、安全的网页端浏览与账号登录体验。

    660

    2026.02.13

    热门下载

    更多
    网站特效
    /
    网站源码
    /
    网站素材
    /
    前端模板

    精品课程

    更多
    相关推荐
    /
    热门推荐
    /
    最新课程
    关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
    php中文网:公益在线php培训,帮助PHP学习者快速成长!
    关注服务号 技术交流群
    PHP中文网订阅号
    每天精选资源文章推送

    Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号