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

如何使用CSVHelper导出已收集的错误列表生成CSV文件

解决方案

1. 简化错误实体类的创建方法

原GetErrors方法每次返回单元素列表无实际意义,修改为直接返回单条错误实例:

public class ErrorLogging
{
    public string ErrorType { get; set; }
    public string Relation { get; set; }
    public string Message { get; set; }

    public static ErrorLogging Create(string type, string relating, string message)
    {
        return new ErrorLogging
        {
            ErrorType = type,
            Relation = relating,
            Message = message
        };
    }
}

2. 新增全局错误收集容器

在Program.cs代码入口处初始化一个列表,用于存储所有运行过程中产生的错误记录:

// 放在Program.cs最顶部,服务/配置初始化完成后即可声明
var errorLogs = new List<ErrorLogging>();

3. 修改错误触发逻辑

所有产生错误的分支,将生成的错误实例加入全局收集列表:

if (validateRoleTitles is not false)
{
    log.Information("Roles found");
}
else
{
    log.Warning("Roles could not be found");
    // 将错误添加到全局列表
    errorLogs.Add(ErrorLogging.Create("Warning", "Database", "Not all roles found in the database"));
}
// 其余所有错误场景都按上述写法添加即可

4. 调用导出方法

程序执行完毕或者需要导出日志的节点,直接将全局列表传入导出方法:

// 可选:先判断列表是否为空,避免生成无意义的空文件
if (errorLogs.Any())
{
    ExportLog.Log(config.ExportFolder, exportFile, errorLogs);
}

额外优化建议

原ExportLog类中的路径拼接写法不规范,Path.Combine会自动处理不同系统的路径分隔符,不需要手动拼接斜杠,修改后兼容性更好:

class ExportLog
{
    public static void Log<T>(string path, string file, List<T> report)
    {
        // 修正路径拼接写法
        var csvPath = Path.Combine(path, file);
        using (var streamWriter = new StreamWriter(csvPath))
        using (var csvWriter = new CsvWriter(streamWriter, CultureInfo.InvariantCulture))
        {
            csvWriter.WriteRecords(report);
        }
    }
}

如果你的应用是多线程运行场景,请将全局收集列表替换为线程安全的ConcurrentBag<ErrorLogging>,避免并发写入抛出异常。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 11:15:06