在 C# 开发中,异常处理是保障程序健壮性的关键环节。而当异常发生时,仅仅知道“出错了”远远不够——我们需要知道错误发生在哪一行代码、调用链是什么、内部异常又是什么。这就离不开对异常堆栈(Exception Stack Trace)的完整捕获与日志记录。
很多初学者在写日志时只记录了异常的 Message,例如:
catch (Exception ex){ logger.Error(ex.Message); // ❌ 仅记录消息,丢失关键信息!} 这样做会导致你无法定位问题根源。正确的做法是记录整个 StackTrace,甚至包括内部异常(InnerException)。
在 C# 中,每个 Exception 对象都包含以下关键属性:
Message:异常的简要描述StackTrace:调用堆栈信息InnerException:嵌套的内部异常最简单且有效的方式是直接使用 ex.ToString(),它会自动包含 Message、StackTrace 和所有 InnerException 的完整信息。
try{ // 可能抛出异常的代码 DoSomethingRisky();}catch (Exception ex){ // ✅ 正确方式:记录完整的异常信息 logger.Error(ex.ToString());} 如果你使用的是如 NLog、log4net 或 Serilog 等日志框架,它们通常提供专门用于记录异常的方法,能自动格式化堆栈信息。
示例:使用 NLog
private static readonly NLog.Logger logger = NLog.LogManager.GetCurrentClassLogger();try{ ProcessData();}catch (Exception ex){ // NLog 的 Error 方法支持传入 Exception 对象 logger.Error(ex, "处理数据时发生错误");} 示例:使用 Serilog
try{ SaveToFile();}catch (Exception ex){ Log.Error(ex, "保存文件失败");} 如果你暂时不想引入第三方库,可以自己封装一个简单的日志工具:
public static class SimpleLogger{ public static void LogError(Exception ex, string message = "") { var logEntry = $"[{DateTime.Now:yyyy-MM-dd HH:mm:ss}] {message}\n{ex.ToString()}\n-----\n"; File.AppendAllText("error.log", logEntry); }}// 使用方式try{ ConnectToDatabase();}catch (Exception ex){ SimpleLogger.LogError(ex, "数据库连接失败");} 本文围绕 C#异常处理、日志记录异常堆栈、C#日志最佳实践 和 捕获异常堆栈信息 四个核心关键词展开,帮助开发者从零开始掌握异常日志的正确记录方式。
掌握 C# 异常堆栈捕获 技巧,不仅能快速定位 Bug,还能大幅提升系统可维护性。从今天开始,让你的日志真正“有用”起来!
本文由主机测评网于2025-12-20发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://vpshk.cn/20251210395.html