从控制台应用程序实现控制台、文件和内存日志记录

Implement console, file and memory logging from console application

我想在控制台应用程序中实现日志记录。由于我使用的库需要 ILogger,因此我需要提供一个。

由于我不太了解的原因,每篇文章似乎都建议我使用 SeriLog 而不是编写自己的记录器。但是没有人提供令人信服的理由。

无论哪种情况,我都需要以下内容:

谁能告诉我如何完成这三个任务,如果我真的需要 SeriLog 这样的东西来做到这一点?

注意:我认为读取日志文件并使用它通过电子邮件发送日志没有意义。日志文件可能包含许多会话的日志记录,我只想通过电子邮件发送最近会话的数据。

根据您列出的要求,Serilog 似乎非常适合您,因为您可以利用 existing sinks such as Console, File, and possibly Memory 的组合 - 尽管您不需要最后一个...可以轻松地为每个会话创建一个唯一的日志文件,读取该文件并通过电子邮件发送,如果这是您想要实现的...

如果您真的很在意最后一部分,您可以write your own Serilog sink按照您想要的方式缓冲日志事件,然后在最后通过电子邮件发送。

也就是说,如今人们不再真正通过电子邮件向自己发送日志...有better sinks that you can use to send logs directly to a store/service that can continuously ingest logs automatically and provide great UIs and APIs to query your logs... You might want to take a look at Seq, Sentry, DataDog,还有其他...


Serilog 是一个设计良好的库,使用非常广泛,并且经过全面测试,with close to 27,000 open-source projects and hundreds of contributors,截至撰写本文时。

如果您认为您可以创新日志记录的方式并将其提升到一个新的水平,那么这将是推出您自己的库的一个很好的理由,否则似乎是在浪费时间重新发明轮子。

创新实际上是 Serilog 的诞生方式...其他广泛使用的日志记录库(例如 Log4Net and NLog 之前就已经存在,但是 Serilog 使语义日志记录在 .NET space 中成为主流,再加上精心设计的创建扩展的方式(sinks,enrichers,destructures,...)。剩下的就是历史了……NLog 很快就跟随了 Serilog 的脚步,随着时间的推移,Log4Net 变得过时了,在这一点上成为了遗产。