.Net 中的 Serilog:通过 appSettings.json 添加自定义增强器不起作用
Serilog in .Net: Adding custom enricher via appSettings.json doesn't work
使用 serilog,我试图通过 appSettings.json 添加我自己的自定义增强器但没有成功。
我完全按照文档进行了操作。
我也关注了这样的非官方介绍 https://www.ctrlaltdan.com/2018/08/14/custom-serilog-enrichers/
上面的介绍适用于 nuggets enrichers(如 Serilog.Enrichers.Environment、Serilog.Enrichers.Thread 等)
但不适用于我的自定义浓缩器。
这是相关代码:
public class ClassNameEnricher: ILogEventEnricher
{
private string GetClassName()
{
StackTrace trace = new StackTrace();
bool foundFrame = false;
int currentFrame = 0;
while (!foundFrame)
{
if (trace.GetFrame(currentFrame).GetMethod().ReflectedType.FullName == typeof(Logger).FullName)
{
foundFrame = true;
}
currentFrame++;
}
return trace.GetFrame(currentFrame).GetMethod().ReflectedType.FullName;
}
public virtual void Enrich(LogEvent logEvent, ILogEventPropertyFactory propertyFactory)
{
LogEventProperty className = propertyFactory.CreateProperty("ClassName", GetClassName());
logEvent.AddPropertyIfAbsent(className);
}
}
public static class LoggerEnrichmentConfigurationExtensions
{
public static LoggerConfiguration WithClassName(this LoggerEnrichmentConfiguration enrich)
{
return enrich.With<ClassNameEnricher>();
}
}
和设置:
我会注意到在代码中添加我的 enrihcer 工作正常。
有什么建议吗?
您必须在 "Using"
部分包含程序集的名称。
来自Serilog
documentation
Using section contains list of assemblies in which configuration
methods (WriteTo.File(), Enrich.WithThreadId()) reside.
请注意,您所指的那篇文章中存在程序集配置:
"Using": [ "Example.Assembly.Name" ]
使用 serilog,我试图通过 appSettings.json 添加我自己的自定义增强器但没有成功。
我完全按照文档进行了操作。 我也关注了这样的非官方介绍 https://www.ctrlaltdan.com/2018/08/14/custom-serilog-enrichers/
上面的介绍适用于 nuggets enrichers(如 Serilog.Enrichers.Environment、Serilog.Enrichers.Thread 等) 但不适用于我的自定义浓缩器。 这是相关代码:
public class ClassNameEnricher: ILogEventEnricher
{
private string GetClassName()
{
StackTrace trace = new StackTrace();
bool foundFrame = false;
int currentFrame = 0;
while (!foundFrame)
{
if (trace.GetFrame(currentFrame).GetMethod().ReflectedType.FullName == typeof(Logger).FullName)
{
foundFrame = true;
}
currentFrame++;
}
return trace.GetFrame(currentFrame).GetMethod().ReflectedType.FullName;
}
public virtual void Enrich(LogEvent logEvent, ILogEventPropertyFactory propertyFactory)
{
LogEventProperty className = propertyFactory.CreateProperty("ClassName", GetClassName());
logEvent.AddPropertyIfAbsent(className);
}
}
public static class LoggerEnrichmentConfigurationExtensions
{
public static LoggerConfiguration WithClassName(this LoggerEnrichmentConfiguration enrich)
{
return enrich.With<ClassNameEnricher>();
}
}
和设置:
我会注意到在代码中添加我的 enrihcer 工作正常。 有什么建议吗?
您必须在 "Using"
部分包含程序集的名称。
来自Serilog
documentation
Using section contains list of assemblies in which configuration methods (WriteTo.File(), Enrich.WithThreadId()) reside.
请注意,您所指的那篇文章中存在程序集配置:
"Using": [ "Example.Assembly.Name" ]