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

.NET7 ASP.NET Core中Serilog配置自定义格式提供器找不到类问题

解决Serilog通过appsettings.json加载自定义格式提供器找不到类型的问题

几个可行的解决步骤:

1. 给类型名称加上完整程序集信息

Serilog从配置字符串解析类型时,得用完整的类型限定名(包含程序集名称)。如果你的程序集名称就是TestProj(和项目名一致),把配置里的格式改成这样:

"formatProvider": "TestProj.Formatting.Iso8601Formatter, TestProj"

后面的, TestProj就是程序集名,要和输出的dll文件名完全一致,要是项目名有特殊字符,得确认实际程序集名称。

2. 检查自定义格式器的访问权限

必须保证Iso8601Formatter是public修饰的,Serilog加载不了非公开的类。比如:

namespace TestProj.Formatting
{
    public class Iso8601Formatter : IFormatProvider, ICustomFormatter
    {
        // 你的实现代码
    }
}

3. 确认Serilog的Using配置

配置里的Using节点要明确包含自定义类型所在的程序集,还有Serilog sink的程序集,比如:

"Serilog": {
    "Using": ["TestProj", "Serilog.Sinks.Console"],
    "WriteTo": [
        {
            "Name": "Console",
            "Args": {
                "formatProvider": "TestProj.Formatting.Iso8601Formatter, TestProj"
            }
        }
    ]
}

4. 代码+配置结合的备选方案

要是上面的方法都不管用,干脆在代码里先初始化格式器,再合并配置:

var config = new ConfigurationBuilder()
    .AddJsonFile("appsettings.json")
    .Build();

var formatter = new Iso8601Formatter();

Log.Logger = new LoggerConfiguration()
    .ReadFrom.Configuration(config)
    // 用代码里的formatter覆盖配置里的设置
    .WriteTo.Console(formatProvider: formatter)
    .CreateLogger();

5. 最后检查拼写细节

  • 核对命名空间和类名的拼写,比如别把Formatting写成Formating
  • 注意大小写,.NET类型名称是区分大小写的

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 04:27:50