You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C# .NET项目中如何获取未处理异常路径并添加至异常属性日志?

错误处理与日志记录优化方案

1. 不要直接修改异常的Message属性

异常的Message属性通常是只读的,无法直接修改。你可以创建包含原异常信息和物理路径的自定义日志内容,而非修改原异常对象。

2. 获取物理路径并整合日志信息

通过Request.PhysicalPath就能拿到当前请求对应的物理路径,把它和异常信息拼接成完整日志内容后再写入记录即可。

3. 实现日志记录的示例代码

方式一:写入文本日志

var ex = Server.GetLastError();
Server.ClearError();

// 获取物理路径
string physicalPath = Request.PhysicalPath;

// 拼接完整日志内容,包含时间、物理路径和异常详情
string logContent = $"[{DateTime.Now:yyyy-MM-dd HH:mm:ss}] 物理路径: {physicalPath}\n异常详情: {ex.ToString()}\n\n";

// 写入日志文件,可根据实际情况调整日志存储路径
string logFilePath = Server.MapPath("~/App_Data/ErrorLogs.txt");
System.IO.File.AppendAllText(logFilePath, logContent);

Response.Redirect("~/MyErrorPage.html");

方式二:使用.NET内置日志(ASP.NET Core项目适用)

如果是ASP.NET Core项目,建议通过依赖注入ILogger来规范记录日志:

private readonly ILogger _logger;

// 构造函数注入ILogger实例
public YourErrorHandler(ILogger<YourErrorHandler> logger)
{
    _logger = logger;
}

public void HandleError()
{
    var ex = HttpContext.Features.Get<IExceptionHandlerPathFeature>()?.Error;
    if (ex != null)
    {
        // 获取物理路径,结合内容根目录拼接完整路径
        string physicalPath = Path.Combine(HttpContext.RequestServices.GetRequiredService<IWebHostEnvironment>().ContentRootPath, 
                                           HttpContext.Request.Path.Value.TrimStart('/'));
        _logger.LogError(ex, "请求物理路径: {PhysicalPath}", physicalPath);
    }

    Response.Redirect("~/MyErrorPage.html");
}

4. 注意事项

  • 确保日志存储目录有写入权限,比如ASP.NET中App_Data目录默认具备写入权限
  • 生产环境不要将物理路径暴露给前端,仅在日志内部记录即可
  • 可根据需求扩展日志内容,比如添加请求IP、当前用户信息等

内容的提问来源于stack exchange,提问作者Kate

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 19:12:36