gpt4 book ai didi

c# - 如何将 Autofac 与 Serilog 包装类一起使用

转载 作者:太空狗 更新时间:2023-10-29 23:49:15 26 4
gpt4 key购买 nike

不久前,我们开始将我们的记录器从 log4net 替换为 Serilog,以便将我们的日志直接发送到我们的 Elastic。 .在我们的项目中,我们正在使用 IOC使用 Autofac .因此,我们最初创建了一个包装类(LogSerilog)和一个相应的接口(interface)(ILogSerilog),我们在类 LogSerilog 中将其添加到我们的构建器中。我们配置了根记录器

public class LogSerilog : ILogSerilog
{
private readonly IElasticConfiguration configuration;
public LogSerilog(IElasticConfiguration configuration)
{
this.configuration = configuration;
Init();
}
public void Init()
{
var logger = new LoggerConfiguration().MinimumLevel.Information().Enrich.WithMachineName();
try
{
logger.WriteTo.Elasticsearch(
this.configuration.GetElasticPath(), typeName: "Serilog");
}
catch (Exception)
{
//Swallow - Elastic is N/A don't wan't to crash. logging won't help since I don't have logger yet :)
}
logger.WriteTo.Log4Net();
Log.Logger = logger.CreateLogger();
}
..........

之后我看到了 autofac-serilog-integration Nuget 对我来说似乎是最好的解决方案。因为它会为我们连接所有上下文。问题是它似乎不起作用。更重要的是,log4net 接收器(我们仍在使用 log4net 在机器中获取日志副本)也不起作用!我觉得我在这里做错了什么 - 但我不确定我应该如何解决它。

  1. 如果我要删除 wrrapper 类,我应该在哪里配置根记录器?
  2. log4net 接收器的问题与包装类无关吗?
  3. 如果您看到我以错误的方式接近它,欢迎任何其他提示。

最佳答案

Serilog 有一个方便的静态类用于设置和保留日志配置。这是我的环境中常见配置的示例:

string SerilogPrefix = "SerilogPrefix";

Log.Logger = new LoggerConfiguration()
.ReadFrom.AppSettings(settingPrefix: SerilogPrefix)
.Enrich.FromLogContext()
.Enrich.WithMemoryUsage()
.Enrich.WithProcessId()
.Enrich.WithThreadId()
.Enrich.WithExceptionDetails()
.Enrich.With(new LogEnricher()) // optional custom class to add properties to the log message
.Filter.With(new SerilogEventFilter()) // optional custom class to filter messages
.CreateLogger();

在 nuget 上查看这些包:

Serilog.Settings.AppSettings
Serilog.Enrichers.Memory
Serilog.Enrichers.Process
Serilog.Enrichers.Thread
Serilog.Sinks.Seq
SerilogMetrics

关于c# - 如何将 Autofac 与 Serilog 包装类一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51616914/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com