如何在Serilog中覆盖ASP.NET WebApi泛型类的日志级别
针对泛型类配置Serilog日志级别覆盖
要为MyService<T>这类泛型类统一覆盖日志级别,你需要使用开放泛型类型的标准命名格式来配置Serilog的Override项:
正确的配置示例
{ "Serilog": { "MinimumLevel": { "Default": "Information", "Override": { "MyNamespace.MyService`1": "Debug" } } } }
为什么之前的配置无效?
- 尝试的
"MyNamespace.MyService":Serilog不会将这个非泛型类名关联到任何泛型实例(比如MyService<int>),因为具体泛型类型的日志类别名称包含泛型参数标识,和普通类名不匹配。 - 尝试的
"MyNamespace.MyService<>":这不是.NET中泛型类型的标准命名格式,Serilog无法识别该格式的日志类别。
原理说明
.NET中开放泛型类型的名称规则是:类名后加`N(N为泛型参数的数量,这里MyService<T>只有1个泛型参数,所以是`1)。Serilog支持通过这个开放泛型名称匹配所有该泛型类的实例,从而实现统一的日志级别覆盖。
内容的提问来源于stack exchange,提问作者szafir
相关产品推荐
相关产品推荐

