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完全相同的事情?我错过了什么吗?