C# Serilog中等效的log4net方法GetLogger() 简短回击

C# Serilog中等效的log4net方法GetLogger() 简短回击,c#,log4net,serilog,C#,Log4net,Serilog,我们正在将项目中的log4net替换为Serilog。在我们的许多类中,我们使用log4net的方法LogManager.GetLogger,使用MethodBase.GetCurrentMethod().DeclaringType将类名作为参数,因此我们可以知道日志是在哪个类中编写的 我的问题是 有没有什么方法可以给我提供Serilog中等效的记录器?我知道有ForContext()选项,您可以指定您所在的类,但我仍然不知道如何在没有某种logManager的情况下获取记录器实例。 P.S 将

我们正在将项目中的
log4net
替换为
Serilog
。在我们的许多类中,我们使用log4net的方法
LogManager.GetLogger
,使用
MethodBase.GetCurrentMethod().DeclaringType
将类名作为参数,因此我们可以知道日志是在哪个类中编写的

我的问题是 有没有什么方法可以给我提供Serilog中等效的记录器?我知道有
ForContext()
选项,您可以指定您所在的类,但我仍然不知道如何在没有某种logManager的情况下获取记录器实例。
P.S

将记录器作为参数提供给每个类构造函数(而不是使用
Getlogger()
)需要一些时间,我确实希望避免使用此选项

在上下文中设置的SourceContext属性如何?

在我做了一些研究之后,我发现Serilog中没有等价物

答案是否定的,但也许正是你所需要的

Serilog的Wiki中有一个示例:

var myLog=Log.ForContext();
myLog.Information(“你好!”);

它似乎像ForContext一样工作。我需要得到一个logger实例,我可以编辑它。你在dotnet core上吗?然后Log.logger可能是你的朋友:)我不明白Log.logger是如何帮助我的。我在初始化Serilog时使用它。你能解释一下你的意思吗?我遇到了这个确切的问题,你最终做了什么?@Q-bertsuit:同一艘船。看看serilog——微软规定实现必须实现
CreateLogger(字符串名)
——我很好奇他们自己是如何做到的。事实证明,它们基本上对所有记录器重复使用相同的
Serilog.Log.Logger
实例,并通过调用
ForContext()。至少,据我所知。@Q-bertsuit,很抱歉延迟回答。事实上,正如你所看到的,大约2年半前我就面临着这个问题。据我记忆所及,如其他评论所述,我使用了
ForContext()
并编辑了Elasticsearch接收器的类型。这个结论是错误的。不需要创建一个新的记录器实例来配置它-配置不是从记录器级别开始执行的
FromContext
将包含上下文信息。实际配置已经使用了类别和其他上下文信息。我同意你的看法,感谢你添加这些信息,我想我最初认为这可能会为人们节省一些时间来寻找这样的功能——这是很久以前的事了,所以我记不清了,也许我可以用另一种更详细的方式来编写它。但是,对于最初的问题,仍然没有等价物。我认为“是否有一种不同的、更好的方式来面对多个配置”的问题有点不同。对我来说,FromContext实际上做了与LogManager.GetLogger完全相同的事情?我错过了什么吗?